首页 > 解决方案 > GC 如何知道旧堆中的对象是否引用了年轻堆中的对象?

问题描述

Minor GC - 当垃圾收集器清除年轻代中未从“根”引用的对象时。Minor GC 仅适用于年轻堆。但是如果一个年轻的对象是从旧的堆中引用的呢?

标签: javagarbage-collectionheap-memory

解决方案


垃圾收集器需要知道引用年轻对象的旧对象。要查找所有这些引用,它可以扫描所有旧对象,但这是非常糟糕的解决方案。因此,Remembered 设置 保留此信息。然后每个线程通知 GC 如果它改变了一个引用,这可能会导致记忆集的改变。

卡片表(字节数组)是一种特殊类型的记忆集。如果引用改变,卡片(每个字节在卡片表中被称为卡片)变脏。脏卡包含从老年代到年轻代的新指针。最后java不扫描所有旧对象,而不是扫描记住的集合

GC1卡表和记忆集

标记卡


推荐阅读