GC算法与收集器

一.判断对象是否存活

1.引用计数算法

2.可达性分析算法

二.垃圾收集算法

1.标记-清除算法:效率低,内存碎片

2.复制算法:适用于对象存活率低

3.标记-整理算法:没有内存碎片

4.分代收集算法:新生代用复制算法

                            老年代用标记-清除/整理算法

三.HotSpot算法实现

1.枚举根节点

2.安全点:线程run状态

3.安全区域:线程sleep/blocked状态

四.垃圾收集器

1.Serial收集器:单线程,暂停其它线程

2.ParNew收集器:Serial收集器的多线程版

3.Parallel Scavenge收集器:吞吐量优先,自适应调节策略

4.Serial Old收集器:Serial收集器的老年代版本

5.Parellel Old收集器:Parallel Scavenge收集器的老年代版本

6.CMS收集器:

  目标:获取最短回收停顿时间

  算法:基于标记-清除。初始标记(Stop The World,耗时短)——>并发标记(与用户线程并发,耗时长)——>重新标记(Stop The World,耗时短)——>并发清除(与用户线程并发,耗时长)

  缺点:I.对cpu资源敏感;II.无法处理浮动垃圾;III.基于标记-清除算法,收集结束后会有大量空间碎片产生。

7.G1收集器

  特点:I.并行与并发;II.分代收集;III.空间整合;IV.可预测的停顿。

  思路:化整为零,分为多个Region,Region直接建立Remembered Set。

  初始标记(Stop The World,耗时短)——>并发标记(与用户线程并发,耗时长)——>重新标记(Stop The World,gc线程间并行执行,耗时短)——>筛选回收(可以做到与用户线程并发,耗时长)

原文地址:https://www.cnblogs.com/xiehuazhen/p/10102679.html