ArtiPub

一文让你理解什么是shallow heap及retained heap

牧云@^-^@ 提交于 2020-03-08 18:48:06
前言 快速定位性能故障并非一朝一夕之功,需要我们对很多概念有很深刻的理解,在前文中,我们介绍了heap dump的相关概念和其获取方式,今天我们一起来了解一下什么是: Shallow 和 retained sizes。 GC ROOT是什么? 在java语言中,都是通过可达性分析来判定对象是否存活的。此算法的基本思路是:通过一系列的称为“GC Roots”的对象作为起点,从这些节点向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连,则证明此对象是不可达的。 在上图右侧中,我们可以看到,对象5/6/7虽然有依赖关联,但是他们到GC ROOT根节点是不可达的,所以这三个节点对象会被判定为是可回收的。 GC ROOT的定义比较特别,他们不属归属于对象图中,对象也不能反向的依赖他们,这也确保了不会出现循环引用的问题。因此也容易得出,只有引用类型的变量才被认为是Roots,值类型的变量永远不被认为是Roots。 在Java中,可作为GC Roots的对象包括以下几种: 虚拟机栈(栈帧中的局部变量表,Local Variable Table)中引用的对象。 方法区中类静态属性引用的对象。 方法区中常量引用的对象。 本地方法栈中JNI(即一般说的Native方法)引用的对象。 看到这里你可能要问,选择这些对象的依据是什么呢?

是什么在浪费我的硬盘空间-硬盘空间分析器-SpaceSniffer

最后都变了- 提交于 2020-03-06 20:49:12
SpaceSniffer 是一个免费、便携式工具应用程序,可让您了解磁盘上文件夹和文件的结构。 通过使用树图可视化布局,您可以立即感知大文件夹和文件在设备上的放置位置 基本使用 双击打开程序,选择需要分析的盘符,认真等待... 视图中的每个方块占据范围越大,磁盘上的文件夹和文件占据的空间就越大(此处的空间是指硬盘空间,也就是文件大小)。 单击方块。展开目录 单击方块顶部收起目录 双击方块顶部全屏展开目录 过滤功能 通过 过滤功能 能够列出所选分区的指定格式文件。 *.jpg 显示出 以 jpg 结尾的文件 |*.jpg 不显示以 jpg 为结尾的文件 > 1 gb 显示 大于 1 gb 的文件 > 2 years 显示 时间大于 2 年的文件 组合过滤项 * .jpg;> 1mb; <3months; 更加详细的过滤说明,可以通过软件的菜单里找到 导出功能 SpaceSniffer 可以导出纯文本的目录说明,在 File > export to file 下 下载 我们通过包管理工具可以方便的安装它 fosshub - https://www.fosshub.com/SpaceSniffer.html chocolatey 安装 - https://chocolatey.org/packages/spacesniffer 通过关注公众号 【极客收藏夹】 回复消息 【21】获取最新版

QQ 机器人SDK Newbe.Mahua 2.2 可用性修复

拥有回忆 提交于 2020-02-28 22:49:07
版本亮点 可用性修复 修复了以下平台近期由于平台更新导致 SDK 不可用的问题: CQP CleverQQ 虽说该版本是一个次要更新版本,但实际上现在版本在这两个平台上已经完全失效,必须升级为最新版本。 下载了源码的开发者,可以根据最新提交的代码 diff 来修正自己项目 优化 Installer 安装速度 在国内仍然有开发者反映依赖于 nuget 的模板下载安装速度不快。 因此,我们将最新的项目模板所需要的文件都进行了“离线化”处理,使得下载过程更加流畅。 由于有初学开发者无法区别“下载HTML”和“下载脚本”的区别,因此,我们制作了打包下载的方式托管于码云上。 点击此处查看Installer压缩包 升级方法与要点 使用命令行在机器人exe根目录运行以下命令 mahua InstallMahua 注意:升级过程将会覆盖以下配置文件,若开发者有自行定制过这些配置项,需要先自行备份: mahua.json NLog.config 本篇文章由一文多发平台 ArtiPub 自动发布 来源: oschina 链接: https://my.oschina.net/u/2308136/blog/3110503

Go语言五种变量创建的方法

空扰寡人 提交于 2020-02-28 08:00:16
对于只有 Python 语言经验的朋友,也许会不太理解声明这个词,在 Python 中直接拿来就用,也不用声明类型啥的。 Go 语言是静态类型语言,由于编译时,编译器会检查变量的类型,所以要求所有的变量都要有明确的类型。 变量在使用前,需要先声明。声明类型,就约定了你这个变量只能赋该类型的值。 声明一般有以下四种方法,其中前面两种同样也可用于定义常量,只需把关键字 var 变成 const 即可。 第一种 :一行声明一个变量 var <name> <type> 其中 var 是关键字(固定不变),name 是变量名,type 是类型。 使用 var ,虽然只指定了类型,但是 Go 会对其进行隐式初始化,比如 string 类型就初始化为空字符串,int 类型就初始化为0,float 就初始化为 0.0,bool类型就初始化为false,指针类型就初始化为 nil。 若想在声明过程,顺便也初始化,可以这样写 var name sting = "Python编程时光" 在 Go 文件中的完整代码如下,为了不写重复性的代码,后续不再貼完整代码,只貼关键代码 package main import "fmt" func main() { var name string = "Python编程时光" fmt.Println(name) } 从右值(等号右边的值,rvalue)来看,明显是个

群晖搭建ArtiPub – 一款开源的一文多发平台(让你的文章随处可阅)

痴心易碎 提交于 2020-02-26 22:23:53
简介 ArtiPub (Article Publisher的简称,意为"文章发布者")是一款开源的一文多发平台,可以帮助文章作者将编写好的文章自动发布到掘金、SegmentFault、CSDN、知乎、开源中国等技术媒体平台,传播优质知识,获取最大的曝光度。ArtiPub安装简单,提供了多种安装方式,可以一键安装使用,安装一般只要5分钟。 ArtiPub目前支持文章编辑、文章发布、数据统计的功能,后期我们会加入存量文章导入、数据分析的功能,让您更好的管理、优化您的技术文章。此外,我们还会接入更多媒体渠道,真正做到让文章随处可阅。 之前搭建了好多次都没这个,要么就是群晖上搭建出来是空的,或者VPS上搭建一直加载,折腾了好久终于摸索成功了,分享一下方法! 项目地址:https://github.com/crawlab-team/artipub 支持平台 掘金 SegmentFault CSDN 简书 知乎 开源中国 今日头条 博客园 微博 百度百家号 51CTO 开发者头条 微信公众号 安装使用 一、安装方式 ArtiPub提供3种安装方式如下: Docker (大约5分钟): 适合对Docker有一定基础的开发者 npm (大约3分钟): 适合熟悉Node.js或npm的开发者 源码 (大约5-10分钟): 适合希望了解内核原理的开发者

Spring Boot 学习目录

人盡茶涼 提交于 2019-12-28 15:26:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Springboot JAVA Spring Boot 学习路径+记录 咱也开始学习,Spring Boot了,这是学习的目录,记忆一下自己的学习过程,欢迎小伙伴一起来学习,最好能共同讨论哦. 项目开始时间:2019-12-27 最后更新时间:2019-12-27 是否更新完成:否 项目配置: Windows/Linux/Mac 电脑一台 idea IDE 一个 TCPGNL 一个(哭) JDK 1.8 博主网站: https://www.tcpgnl.com 项目地址: https://github.com/TCPGNL/Springboot 序号 简介 开始时间 结束时间 项目说明 1 创建项目 2019-12-27 2019-12-27 初始化 2 打印HelloWorld! 2019-12-27 2019-12-27 创建controler 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 来源: oschina 链接: https://my.oschina.net/u/4209212/blog/3148985

图解Go里面的WaitGroup了解编程语言核心实现源码

和自甴很熟 提交于 2019-12-25 18:04:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. 基础筑基 sync.WaitGroup里面的实现逻辑其实蛮简单的,在看过之前的sync.Mutex和synx.RWMutex之后,阅读起来应该非常简单,而唯一有差异的其实就是sync.WaitGroup里面的state1 1.1 等待机制 sync.WaitGroup主要用于等待一组goroutine退出,本质上其实就是一个计数器,我们可以通过Add指定我们需要等待退出的goroutine的数量,然后通过Done来递减,如果为0,则可以退出 1.2 内存对齐 内存对齐是一个比较大的话题,其核心机制是编译器根据结构体内部元素的size结合平台和编译器自身的规则来进行补位, 而在sync.WaitGroup里面就有用到,也是我感觉可能在WaitGroup所有实现的核心特性里面最重要的一条了 在WaitGroup里面只有state1 [3]uint32这一个元素,通过类型我们可以计算uint32是4个字节,长度3的数组总长度12,其实之前这个地方是[12]byte, 切换uint32是go语言里面为了让底层的编译器保证按照4个字节对齐而做的切换 1.3 8字节 8字节即两个4字节,也就是两个uint32的长度,实际上也是一个uint64的长度,在sync

图解Go里面的mutex了解编程语言核心源码实现

折月煮酒 提交于 2019-12-23 09:47:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. 锁的基础概念 1.1 CAS与轮询 1.1.1 cas实现锁 在锁的实现中现在越来越多的采用CAS来进行,通过利用处理器的CAS指令来实现对给定变量的值交换来进行锁的获取 1.1.2 轮询锁 在多线程并发的情况下很有可能会有线程CAS失败,通常就会配合for循环采用轮询的方式去尝试重新获取锁 1.2 锁的公平性 锁从公平性上通常会分为公平锁和非公平锁,主要取决于在锁获取的过程中,先进行锁获取的线程是否比后续的线程更先获得锁,如果是则就是公平锁:多个线程按照获取锁的顺序依次获得锁,否则就是非公平性 1.3 饥饿与排队 1.3.1 锁饥饿 锁饥饿是指因为大量线程都同时进行获取锁,某些线程可能在锁的CAS过程中一直失败,从而长时间获取不到锁 1.3.2 排队机制 上面提到了CAS和轮询锁进行锁获取的方式,可以发现如果已经有线程获取了锁,但是在当前线程在多次轮询获取锁失败的时候,就没有必要再继续进行反复尝试浪费系统资源,通常就会采用一种排队机制,来进行排队等待 1.4 位计数 在大多数编程语言中针对实现基于CAS的锁的时候,通常都会采用一个32位的整数来进行锁状态的存储 2. mutex实现 2.1 成员变量与模式 2.1.1 成员变量 在go的mutex中核心成员变量只有两个state和sema

Java 对象序列化工具类

一个人想着一个人 提交于 2019-12-12 12:04:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 以下是我平时项目中经常用到的对象序列化工具类 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * ClassName: SerializationUtils * @Description: 对象序列化工具类 * @author JornTang * @date 2017年7月22日 */ public class SerializationUtil{ private static Logger log = LoggerFactory.getLogger(SerializationUtil.class); public SerializationUtil() { } /** * @Description: 序列化对象 * @param state *

QQ 机器人SDK Newbe.Mahua 2.2 可用性修复

天涯浪子 提交于 2019-11-30 11:24:01
版本亮点 可用性修复 修复了以下平台近期由于平台更新导致 SDK 不可用的问题: CQP CleverQQ 虽说该版本是一个次要更新版本,但实际上现在版本在这两个平台上已经完全失效,必须升级为最新版本。 下载了源码的开发者,可以根据最新提交的代码 diff 来修正自己项目 优化 Installer 安装速度 在国内仍然有开发者反映依赖于 nuget 的模板下载安装速度不快。 因此,我们将最新的项目模板所需要的文件都进行了“离线化”处理,使得下载过程更加流畅。 由于有初学开发者无法区别“下载HTML”和“下载脚本”的区别,因此,我们制作了打包下载的方式托管于码云上。 点击此处查看Installer压缩包 升级方法与要点 使用命令行在机器人exe根目录运行以下命令 mahua InstallMahua 注意:升级过程将会覆盖以下配置文件,若开发者有自行定制过这些配置项,需要先自行备份: mahua.json NLog.config 本篇文章由一文多发平台 ArtiPub 自动发布 来源: https://my.oschina.net/newbe36524/blog/3110503