Mark and SweepGC
// Mark and sweep like check.
def lifeCheck(node: Node): Unit =
if (node.tag.life) return
else {
node.tag.life = true
for (child <- node.fields)
lifeCheck(child)
}
2010/05/08 Scalaで実装するGC 13
14.
Copy GC
... // Fill memory ... コピー先をクリア
... // Compaction and destroy
for (node <- memory.elements) {
if (node.tag.life) {
node.tag.id = newId
memory(nextStart + newId) = node
newId += 1
} else
deathNodes += node
}
...
deathNodes // 殺すオブジェクトを返す...
2010/05/08 Scalaで実装するGC 14