首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的“单代”垃圾收集器是什么?

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

Stack Overflow用户
提问于 2020-12-24 23:05:07
回答 2查看 298关注 0票数 4

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

正常世代GC

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

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

单代GC与多代GC

那么,到底什么是“单代”垃圾收集器,这与当前在内容管理系统和G1中如何通过多个垃圾收集周期跟踪对象有什么不同?

EN

回答 2

Stack Overflow用户

发布于 2020-12-25 00:03:42

tl;dr

ZGC有很多值得吹嘘的地方,但单代并不在其中。

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

详细信息

一些垃圾收集器实现区分新对象和旧对象,即“年轻一代”与“老一代”。这样做的目的是让程序员创建短期对象的成本更低,因为可以更快、更有效地处理这些对象以释放内存。

ZGC不会“吹嘘”自己是单代的。相反,该团队表示,他们希望在ZGC的未来版本中添加分代功能。请参阅Oracle的Per Liden演讲的这一部分的讨论(请等待几秒钟以获得新的幻灯片“Generational ZGC”):https://youtu.be/88E86quLmQA

有关各代的更多信息,请参阅此问题:

票数 3
EN

Stack Overflow用户

发布于 2020-12-29 01:35:02

您确实知道其中的细节,但是您知道为什么要发明分代垃圾收集器吗?具体地说,为什么G1GC是代际的?

当时的想法是,扫描整个堆的成本很高,这意味着STW。事实上,G1是在一个非世代(或者您所说的单代)的时代开始的,但是记忆集的大小和它们复习它们的时间,触发了它成为世代。有“几代”的事实+ G1在一个周期内扫描所有年轻区域的事实(或者更准确地说,如果它在某个周期开始时“承诺”扫描一些X个年轻区域-它必须扫描所有这些区域),这意味着你不需要记住的集合在年轻空间中具有它们之间的连接(卡片表也要小得多)。

关于你直接的问题,ZGC (以及Shenandoah)不“跟踪”一个对象存活了多少个周期,它们不需要这样做,因为它们没有世代,所以不需要将对象移动到“旧”中的某个地方,以便“稍后”进行扫描。它们在每个周期中扫描整个堆。他们同时做这件事(以一种非常有趣的方式),所以目前根本没有必要让他们代代相传。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65440031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档