GC回收机制
1.引用计数法
当堆里面的对象被引用了,这计数器+1,引用失效了则-1,扫描Eden Space中的对象,干掉引用等于0的对象
缺点:需要维护计数器
JVM一般使用可达性分析算法判断是否可以被回收
可达性分析算法:GC Root 的对象为起点,从这些节点向下搜索,类似就是遍历树,没有在树上的对象,则说明该对象是可以回收的
GC Root 对象
1.虚拟机栈中引用的对象
2.方法区中类静态属性引用的对象
3.方法区中常量引用的对象
4.本地方法栈中JNI引用的对象
不可达对象
finalize() 方法最终判定对象是否需要回收
1.如果对象没有finalize 回收
2.如果对象执行过finalize()被回收
3.如果finalize()将自己与引用链产生了关系则不被回收
2.复制算法
MinorGC处理了在Eden处理一批对象,当对象在Eden区里面逃过一劫时,MinorGC会把剩下的对象复制到幸存区,幸存区里面有两个,至少一个是空的,把对象丢进空的幸存区,在复制过来另一个幸存区的对象
幸存区也会进行MInorGC的可达性分析回收对象。产生碎片,所以需要把碎片的幸存区里面的对象移动到宁外一个被GC丢入Eden的对象中区域
每经历一次MInorGC 对象年龄加1,15岁就可以进养老区了
缺点:浪费了一半的空间
标记清除压缩算法
评论区