Java 中的“单代”垃圾收集器是什么?

Cam*_*zie 5 java garbage-collection jvm jvm-hotspot

在阅读有关 ZGC 的文章时,我注意到它吹嘘自己是“单代垃圾收集器”,但我很少看到有关该术语确切含义的任何详细信息。

正常分代GC

我熟悉伊甸园、幸存者空间、托儿所、临终关怀、元空间、permgen、僵尸对象、诺亚方舟和老年之家,所以我不需要解释并发标记清除(CMS GC)或垃圾优先(G1 GC)算法有效。我的理解是,这些都是多代人的,我对此很满意。

就我个人而言,我一直喜欢能够通过 Java Mission Control 并查看对象经历了多少代 GC 周期。这对于解决内存泄漏或 GC 问题总是很有帮助。

单代 GC 与多代 GC

那么“单代”垃圾收集器到底是什么?它与当前在 CMS 和 G1 中通过多个垃圾收集周期跟踪对象的方式有何不同?

Bas*_*que 5

太长了;博士

\n

ZGC 有很多值得夸耀的地方,但单代并不是其中之一。

\n

计划增加多代作为未来的改进。

\n

细节

\n

一些垃圾收集器实现区分新对象和旧对象,\xe2\x80\x9cyoung Generation\xe2\x80\x9d 与 \xe2\x80\x9cold Generation\xe2\x80\x9d。目标是让程序员更便宜地创建短期对象,因为它们将被更快、更有效地处理以释放内存。

\n

ZGC并不认为是单代的。恰恰相反,该团队表示希望在 ZGC 的未来版本中添加分代功能。请参阅 Oracle 的 Per Liden 演讲的本节中的讨论(请等待几秒钟以查看新幻灯片 \xe2\x80\x9cGenerational ZGC\xe2\x80\x9d):https: //youtu.be/88E86quLmQA

\n

有关世代的更多信息,请参阅此问题:Java 堆术语:年轻世代、老世代和永久世代?

\n