Files
Hui-s-notebook/HotSpot算法实现.md
2023-09-10 10:50:53 +08:00

1.5 KiB

根节点枚举

所有收集器在进行根节点枚举时都要暂停用户线程,可以并发也是再一个保障一致性的快照中进行,防止根节点集合的对象引用关系还在不断变化 通过一组OopMap的数据结构来直接得到引用对象存放位置

安全点

如果为每一条指令生成OopMap存储占用巨大 通过在特定位置安全点记录这些信息 用户程序需要达到安全点后才能够暂停下来开始垃圾回收 安全点选取位置以是否具有让程序长时间自行的特征为标准选定(指令序列的复用方法调用,循环跳转,异常跳转)

安全区域

程序不执行无法到达安全点,需要通过安全区域解决 执行到安全区域里面代码时标记已经进入安全区域,这样垃圾收集时就不管安全区域内线程,当该线程离开时检查是否已完成根节点枚举或其他需要暂停的阶段,否则就一直在安全区等待

记忆集与卡表

通过记忆集避免将整个老年代加入GC Roots扫描 卡精度:每个记录精确到一块内存区域,该区域内有对象含有跨代指针 通过卡表实现记忆集

写屏障

并发的可达性分析

解决并发扫描时的对象小时问题 增量更新 当黑色对象插入新的的引用关系后记录下来,扫描完成后这些黑色对象为根重新扫描 原始快照 灰色对象要删除指向白色对象引用关系时,将这个要删除的引用记录下来,扫描结束后以灰色对象为根重新扫描