gpt4 book ai didi

language-agnostic - tracing generational GC 是如何判断年轻代垃圾的?

转载 作者:行者123 更新时间:2023-12-05 04:18:29 24 4
gpt4 key购买 nike

假设我们有一个简单的分代 GC,只有两代,“旧”代(至少在一次回收中幸存的对象)和“年轻”代(新分配的)。那么 GC 如何在不从根部追踪整个引用图的情况下确定一个“年轻”对象是垃圾??或者换一种说法:当 GC 打算只收集“年轻”代时,它选择什么作为跟踪的根?

我对一般方法感兴趣,但也对现有实现中的具体示例感兴趣。

谢谢!

最佳答案

有一些技术,归结为维护哪些老年代对象(或老年代内存范围)可能包含对年轻对象的引用的知识。

几乎所有我能想到的实现都通过添加写屏障来维护这一知识。当新生代引用存储在老年代对象中时,这些写障碍会触发,从而导致执行记住新引用的小代码片段。

为了存储这些知识,一些 GC 使用 card marking ,其中紧凑的位图用于将小型内存块标记为“包含对年轻一代的引用”。其他人维护明确的“ memset ”,它对单个对象执行类似的操作。在这两种情况下,年轻代集合然后将(由卡片表标记的 memset /内存块)中的对象添加到根。

至于具体实现:

关于language-agnostic - tracing generational GC 是如何判断年轻代垃圾的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13659226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com