垃圾回收

2021-05-25  本文已影响0人  垂直居中的句号

1.识别垃圾对象的方法

引用计数法:给对象加一个引用计数器,有一个地方引用就加1,引用失效就减1,计数器为0就是可回收对象。无法解决相互循环依赖的关系,因为相互引用时计数器永远不为0 。

可达性分析对象

GCROOTS从节点开始向下搜索引用的对象,找到的对象都标记为非垃圾对象,其余未标记的对象为垃圾对象。

根节点通常是线程的本地变量,静态变量,本地方法栈的变量等。

2.垃圾回收算法

标记清除法,复制法,标记整理法。

3.垃圾收集器

JDK1.8之前使用分代,JDK1.9之后使用分区。

分代:年轻代、老年代

年轻代占1/3,老年代占2/3

年轻代中包含8/10Eden(伊甸园区)->s0(1/10)->s1(1/10)(s0,s1幸存区)。

当年轻代的Eden区占满后执行引擎开启垃圾收集线程monitorGC,YGC,  移入s0年龄加1,s0满了移入s1年龄加1,s1满了移入s0,年龄加1。

GC会引发stw(stop the world)

年轻代都满了,会进入老年代,老年代满了会引发 full gc

年轻代使用的复制法,serial,parallel,parnew

老年代 serial old  ,parallel old  (标记整理法) 

  cms(concurrentmarksweep)使用的并行标记清除法。包括初始标记,并发标记,重新标记,标记清理。

上一篇 下一篇

猜你喜欢

热点阅读