< prev index next >
src/share/vm/gc/g1/g1MarkSweep.cpp
Print this page
*** 368,392 ****
_g1h->remove_from_old_sets(empty_set, _humongous_regions_removed);
}
bool G1PrepareCompactClosure::doHeapRegion(HeapRegion* hr) {
if (hr->is_humongous()) {
! oop obj;
! if (hr->is_starts_humongous()) {
! 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.");
- obj = oop(hr->humongous_start_region()->bottom());
if (!obj->is_gc_marked()) {
free_humongous_region(hr);
}
- }
} else if (!hr->is_pinned()) {
prepare_for_compaction(hr, hr->end());
}
return false;
}
--- 368,384 ----
_g1h->remove_from_old_sets(empty_set, _humongous_regions_removed);
}
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;
}
< prev index next >