我实际上有两个问题1)我已经研究了各种文章和答案在这里关于垃圾收集和我不能理解的答案的问题:如何在多线程之间的垃圾收集器中使用“卡片表”结构?我想我缺少一些东西来理解它。2)这个结构“卡片表”只在并发垃圾收集器中使用是正确的吗?
bfnvny8b1#
卡片表是基于位图的记忆集的基本实现。卡片表中的一位对应于堆生成(或区域)中的一个或多个字。记忆集的目的是跟踪从老代到年轻代的引用-以便在进行仅年轻代的收集时更新老代中的引用。因此,记忆集或作为其特定实现的Card Table是代/区域收集器所固有的,无论是否并发。Card Table并不是特定于并发收集器的,它与多线程无关。甚至Serial GC也使用Card Table。我在1999年的JDK 1.2源代码中找到了gc/gen/cardtable.c的traces,当时根本没有并发垃圾收集器。
gc/gen/cardtable.c
1条答案
按热度按时间bfnvny8b1#
卡片表是基于位图的记忆集的基本实现。卡片表中的一位对应于堆生成(或区域)中的一个或多个字。
记忆集的目的是跟踪从老代到年轻代的引用-以便在进行仅年轻代的收集时更新老代中的引用。因此,记忆集或作为其特定实现的Card Table是代/区域收集器所固有的,无论是否并发。
Card Table并不是特定于并发收集器的,它与多线程无关。甚至Serial GC也使用Card Table。我在1999年的JDK 1.2源代码中找到了
gc/gen/cardtable.c
的traces,当时根本没有并发垃圾收集器。