4

据称,次要垃圾收集非常有效,因为它不会扫描旧代。

次要垃圾收集如何检测到没有从永久或永久存储中对年轻对象的引用而不扫描它们?

4

2 回答 2

0

它没有。在执行时,在引用分配(称为写屏障)上运行的小段代码会记录这些从旧到新的引用(特定对象或堆的小子区域以节省空间)。次要 GC确实会查看那些(罕见的)旧对象,它只是跳过那些已知不包含年轻引用的对象

于 2013-11-09T16:26:10.503 回答
0

看看Understanding GC pauses in JVM, HotSpot的minor GC,这篇文章会给你非常详细的解释年轻的GC机制和HotSpot JVM中的写障碍。

简而言之,老一代没有被跳过。所有从 old 到 new 的引用都被视为年轻空间 GC 的根(同样,所有从 new 到 old 的引用都被视为 old space GC 的根)。诀窍是写屏障只允许扫描非常小的一部分旧空间以找到对年轻空间的所有引用。

于 2013-11-11T04:19:37.180 回答