alo*_*dzk 7 java garbage-collection
我正在尝试理解垃圾收集机制,我正在使用世代算法,我对年轻/老一代的差异有疑问.我读到了开始收集年轻一代的对象GC正在标记它们从GC根源开始找到活的,并且通常将它们复制到幸存者空间,清除年轻一代区域和瞧.
我不知道如果我们从GC根开始并且我们开始经历活动对象,我们在老一代中找不到对象吗?这是否意味着当我们在旧空间中击中一个物体时,我们会停止在那一点跟踪参考或什么?
尽管我还没有直接检查这一点,但是常识表明,每次遇到旧一代的对象时,对象图遍历都会减少。请注意,这种检查非常便宜:对指针值进行简单的范围检查就足以确定对象在堆区域内的位置。
但是,还有另一个要考虑的要点:如果只能通过旧物体才能到达年轻物体,该怎么办?显然,老一代必须以某种方式考虑。
输入卡片表:这是每个堆区域前面的支持结构,其中保留了该区域的压缩“位图”视图,因此每个位对应于256个字节的堆。每次更新引用类型的变量时,卡表中的相应位都会升为1,表示“脏”。
放置好牌桌后,每个YG集合都会发生以下情况:扫描标记为“脏”的所有堆块,以寻找指向Young Generation中对象的指针。以这种方式找到的每个对象都被认为是可到达的。
上面的一个花招:通过旧对象可到达的年轻对象(同时已变成垃圾)将被认为是可到达的,并污染堆,直到发生重大GC。
归档时间: |
|
查看次数: |
575 次 |
最近记录: |