区分停止和复制垃圾收集中的转发地址和非复制对象

时间:2014-10-12 00:26:43

标签: garbage-collection

我已经阅读了半空间停止和复制收集器的许多描述,它们都有一个共同的步骤:

  

如果指针指向fromspace中的对象,则该对象被撤离。但是,如果指针指向转发地址,则该对象已被撤离,因此旧地址将被替换为新地址。

如何区分指针是指向转发地址而不是非复制对象?我已经看到许多声称停止复制并不需要块头,但我不知道如何在没有块头的情况下区分这两种选择。我读过的每个描述都将问题手写为"如果目标是转发地址",而不描述如何判断目标是否是转发地址。

例如,我在这里看了一个实现:https://gist.github.com/DmitrySoshnikov/4736334 它似乎是作弊,通过使用额外的字段" forwardingAddress"。这并不是我认为存在的无块头实现。

我现在能想到的唯一解决方案是垃圾收集器是保守的而不是精确的。但同样,我读过的任何内容都没有暗示停止复制收集器并不准确。

0 个答案:

没有答案