gpt4 book ai didi

java - 垃圾收集新生代扫描

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:21 24 4
gpt4 key购买 nike

我正在尝试了解垃圾回收机制,我正在研究分代算法,我有一个关于年轻一代/老一代差异的问题。我读到开始在年轻代 GC 中收集对象是从 GC 根开始标记它们以找到 Activity 对象,通常它将它们复制到幸存者空间,清除年轻代区域,瞧。

我不明白,如果我们从 GC roots 开始,我们开始遍历 Activity 对象,难道我们不会在老年代找到对象吗?这是否意味着当我们在旧空间中击中一个对象时,我们会在那个点停止跟踪引用或什么?

最佳答案

虽然我没有直接检查过这一点,但常识表明,每次遇到来自老年代的对象时,对象图遍历都会减少。请注意,此检查的成本非常低:对指针值进行简单的范围检查就足以确定对象在堆区域内的位置。

然而,还有另一个重要的问题需要考虑:如果只能通过旧对象访问新对象怎么办?显然,必须以某种方式将老一代视为

进入卡表:这是每个堆区域前面的支持结构,其中保存该区域的压缩“位图” View ,例如,每个位对应于 256 字节堆。每次更新引用类型变量时,卡表中的相应位都会被提升为 1,表示“脏”。

在卡表就位后,每个 YG 集合都会发生以下情况:扫描所有标记为“脏”的堆 block 以查找指向年轻代中对象的指针。以这种方式找到的每个对象都被认为是可达的。

以上的推论:通过旧对象可访问的新对象同时变成垃圾将被视为可访问并污染堆,直到发生主要 GC。

关于java - 垃圾收集新生代扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26280684/

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