关于jvm-gc的读书笔记

2018-01-30 11:01:49来源:oschina作者:加肥猫咪人点击

分享
第七城市th7cn
垃圾回收

一. 如何判定对象为垃圾对象


1. 引用计数法


1)在对象中添加一个引用计数器,当有地方引用这个对象的时候,引用计数器的值就+1,当引用失效的时候,计数器的值就-1


2)虚拟机参数配置:-verbose:gc -xx:+PrintGCDetail


3) hotspot并不是采用这种算法,因为在对象中存在循环引用的时候,会造成计数器永远大于1,就无法gc了


2. 可达性分析法


1)基本思路就是通过一系列名为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,下图对象object5, object6, object7虽然有互相判断,但它们到GC Roots是不可达的,所以它们将会判定为是可回收对象。



2)在Java语言里,可作为GC Roots对象的包括如下几种:a.虚拟机栈(栈桢中的本地变量表)中的引用的对象b.方法区中的类静态属性引用的对象c.方法区中的常量引用的对象d.本地方法栈中JNI的引用的对


二. 如何回收


1.回收策略


1)标记-清除算法:


问题:空间问题和效率问题


- 当每一个对象被分配到一个个内存块,这样就标记哪一个对象是在使用,哪一个对象可以被清除


- 这样内存区域出现很多不连续的空间,分配大对象的时候会多次寻址或出发gc


2)复制算法


3)标记-整理算法


4)分代收集算法


2. 垃圾回收器


1)serial


2)parnew


3) cms


4) g1


三. 何时回收

参考:


http://blog.csdn.net/ochangwen/article/details/51406779

第七城市th7cn

微信扫一扫

第七城市微信公众平台