JVM垃圾回收器的GC回收算法

时间:2021-03-16 00:04:58

垃圾回收器的种类

串行回收器 一个线程回收,单核的情况下效率很高,年轻代

并行回收器 多线程回收

并发回收器 在工作的间隙回收,对程序来说看着像是没有停止


分代回收策略已经说明了回收的时间点和策略,当具体要回收的时候,是回收那些没有引用对象。

所以回收器要做的就是两件事,怎么找到没有引用的对象和找到之后采用什么算法回收。

找对象有两个方法:

1引用计数法,就是对每个对象保存一个计数器,每多一处引用,计数器加一,少一处引用,计数器减一,当技术变为0时,

表示这个对象可以被会回收,这个方法是较早期的jvm实现的方法,因为它不能解决循环引用的问题,现在都不用了。

2根搜索算法,通过一系列的名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。

关键就是选取GC ROOTS,待学习。


回收算法有3个

复制算法,就是复制一份一样的内存对象,扫描一遍对象,把存活的对象拷贝过去,这个会导致内存碎片,而且需要另一份内存

标记回收算法 遍历一遍把存活的对象,标记住位置,第二阶段遍历整个堆,把未标记的对象清除,清除过程,停止所有工作,会有内存碎片

标记回收compact算法,与上边一样,只是在回收的时候,把空间压缩一块。