Java Full GC浮动垃圾疑问:跨代引用与脏卡机制解惑
Java垃圾回收(GC)流程疑问:DefNew与Tenured阶段的跨代引用处理
我最近在啃Java垃圾回收的相关知识,碰到了一个有点绕的场景问题,先给大家看一下对应的场景示意图:

根据某专业GC手册的说明,这个场景下会先执行DefNew(新生代垃圾回收),再执行Tenured(老年代垃圾回收),按照这个流程推导会出现两个情况:
- DefNew阶段中,老年代的对象持有对Object A的引用,因此Object A不会被回收;
- Tenured阶段中,由于新生代的Object A还持有对Object B的引用,Object B也不会被清除。
我现在完全搞不懂这个流程具体是怎么运作的?我之前想到了脏卡(dirty cards)机制,但按我的理解只有Object C会被标记成脏卡,因为它的引用发生了变更——删掉了对Object B的引用。
内容的提问来源于stack exchange,提问作者Noskol
相关产品推荐
相关产品推荐

