Java虚拟机-记忆集的疑问

发布于 2022-09-12 03:24:15 字数 542 浏览 21 评论 0

看《深入理解Java虚拟机》中传统垃圾收集器(非G1)使用记忆集(Remembered Set)来处理跨代引用时根节点枚举的问题。
里边说到

在新生代上建立一个全局的称为记忆集的数据结构,
这个结构把老年代划分为若干个小块,标识出老年代哪一块内存会存在跨代引用。当发生 Minor GC 时,只有包含了跨代引用的小块内存中的老年代对象才会加入到 GC Roots 中,避免整个老年代加入到 GC Roots 中。

这里有个疑问,也有新生代引用老年代这种跨代引用,不需要在老年代也建立记忆集吗?不然回收老年代也得把整个新生代加入到 GC Roots中。

看书里也有说只有 CMS 垃圾收集器存在单独回收老年代的情况,那其他垃圾收集器是在回收新生代的时候知道的有哪些新生代对老年代的引用吗?

没有记忆集,那 CMS 单独回收老年代的时候是怎么处理跨代引用的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

送舟行 2022-09-19 03:24:15

除了CMS可以单独回收老年代外,其他的老年代收集器做的都是Full GC,也就是整个堆的GC

CMS 在回收老年代时也是会扫描新生代的的,只是不收集新生代里死掉的对象罢了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文