bool G1PrepareCompactClosure::doHeapRegion(HeapRegion* hr) { if (hr->is_humongous()) { oop obj = oop(hr->humongous_start_region()->bottom()); if (hr->is_starts_humongous() && obj->is_gc_marked()) { obj->forward_to(obj); } if (!obj->is_gc_marked()) { free_humongous_region(hr); } } else if (!hr->is_pinned()) { prepare_for_compaction(hr, hr->end()); } return false; }
bool G1PrepareCompactClosure::doHeapRegion(HeapRegion* hr) { if (hr->is_humongous()) { if (hr->is_starts_humongous()) { oop obj = oop(hr->bottom()); if (obj->is_gc_marked()) { obj->forward_to(obj); } else { free_humongous_region(hr); } } else { assert(hr->is_continues_humongous(), "Invalid humongous."); } } else if (!hr->is_pinned()) { prepare_for_compaction(hr, hr->end()); } return false; }
bool doHeapRegion(HeapRegion* hr) { if (hr->isHumongous()) { if (hr->startsHumongous()) { oop obj = oop(hr->bottom()); if (obj->is_gc_marked()) { obj->forward_to(obj); } else { free_humongous_region(hr); } } else { assert(hr->continuesHumongous(), "Invalid humongous."); } } else { hr->prepare_for_compaction(&_cp); // Also clear the part of the card table that will be unused after // compaction. _mrbs->clear(MemRegion(hr->compaction_top(), hr->end())); } return false; }