Mark–Scavenge: 等待垃圾自行清理

主要观点:

  • 介绍新的垃圾收集算法 Mark-Scavenge,指出移动垃圾收集器中用可达性代理活跃度会导致不必要的数据移动,并提出解决方法。
  • 现代垃圾收集基于弱分代假设,堆按年龄分区,年轻代中基于存活对象的收集算法更高效。
  • 通常用指针可达性近似活跃度,但这可能导致“浪费工作”,即移动了之后不会再被系统触及的对象。
  • 以 ZGC 为例研究用可达性作为活跃度导致复制无效垃圾对象的程度,发现尽管 scavenging 中发现和复制之间时间短,但不一定能减少浪费工作。
  • 提出 Mark-Scavenge 算法,延迟 evacuation 到下一个 GC 周期以增加对象不可达的机会,结合了 scavenging 和 Mark-Evacuate 的优点。
  • Mark-Scavenge 在 ZGC 中实现,显著减少了死对象的迁移,在重载机器上性能提升明显。

关键信息:

  • 新算法 Mark-Scavenge 及其原理和优势。
  • 不同垃圾收集算法在处理活跃度和浪费工作方面的特点。
  • 用 ZGC 进行的实验及结果,包括不同基准测试下的浪费工作情况。
  • Mark-Scavenge 在减轻浪费工作和提升性能方面的表现。

重要细节:

  • 堆分区及年轻代收集算法的效率差异。
  • 可达性近似活跃度的局限性及导致的问题。
  • ZGC 中通过加载屏障检测对象访问及识别浪费工作。
  • Mark-Scavenge 延迟 evacuation 的机制及与其他算法的区别。
  • Mark-Scavenge 在不同基准测试和场景下的性能提升数据。
阅读 7
0 条评论