一.判断对象是否存活
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线程间并行执行,耗时短)——>筛选回收(可以做到与用户线程并发,耗时长)