< prev index next >
src/share/vm/gc/g1/g1MarkSweep.cpp
Print this page
@@ -368,25 +368,17 @@
_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()) {
+ oop obj = oop(hr->humongous_start_region()->bottom());
+ if (hr->is_starts_humongous() && 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;
}
< prev index next >