Files
Hui-s-notebook/Shenandoah收集器.md
2023-09-10 10:50:53 +08:00

1.6 KiB
Raw Blame History

非Orcale开发未集成在OrcaleJDK里 与G1Garbage First的区别

  1. 支持并发的整理算法
  2. 默认不适用分代收集
  3. 抛弃了G1中的记忆集使用链接矩阵记录跨Region引用

工作过程

初始标记 标记与GCRoots关联对象需要停止工作停顿时间与GCRoots数量有关与堆大小无关 并发标记 遍历对象图,标记所有可达对象,与用户线程并发,时间取决于堆中存活对象及对象图结构复杂程度 最终标记 处理剩余SATB扫描统计回收价值最高的Region并构成一组回收集有一小段暂停 并发清理 清理那些整个区域内一个存活对象都没有的Region 并发回收 将回收集中存活对象复制一份到其它未使用Region中通过读屏障和Brooks Pointers的转发指针实现运行时间取决于回收集的大小 初始引用更新 复制完成后将堆中指向旧对象的引用修正到复制后的地址当中,该阶段只是为了建立一个线程集合点,确保所有并发回收阶段中进行的收集器线程都已完成分配的对象移动任务 并发引用更新 开始进行引用更新操作,与用户线程并发的,时间取决于内存中涉及的引用数量的多少,不需要沿着对象图搜索,只需按照内存物理地址顺序线性搜索出引用类型修改为新值即可 最终引用更新 修正存在于GC Roots中的引用停顿时间与GC Roots数量有关 并发清理 通过并发回收和引用更新之后整个回收集中已经没有存活对象最后调用并发清理回收这些Region空间 Brook Pointer