< prev index next >
src/share/vm/gc/g1/g1MarkSweep.cpp
Print this page
*** 277,288 ****
if (obj->is_gc_marked()) {
obj->init_mark();
} else {
assert(hr->is_empty(), "Should have been cleared in phase 2.");
}
- hr->reset_during_compaction();
}
} else if (!hr->is_pinned()) {
hr->compact();
}
return false;
}
--- 277,288 ----
if (obj->is_gc_marked()) {
obj->init_mark();
} else {
assert(hr->is_empty(), "Should have been cleared in phase 2.");
}
}
+ hr->reset_during_compaction();
} else if (!hr->is_pinned()) {
hr->compact();
}
return false;
}
*** 332,344 ****
void G1PrepareCompactClosure::free_humongous_region(HeapRegion* hr) {
HeapWord* end = hr->end();
FreeRegionList dummy_free_list("Dummy Free List for G1MarkSweep");
- assert(hr->is_starts_humongous(),
- "Only the start of a humongous region should be freed.");
-
hr->set_containing_set(NULL);
_humongous_regions_removed.increment(1u, hr->capacity());
_g1h->free_humongous_region(hr, &dummy_free_list, false /* par */);
prepare_for_compaction(hr, end);
--- 332,341 ----
*** 371,389 ****
_g1h->remove_from_old_sets(empty_set, _humongous_regions_removed);
}
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;
--- 368,383 ----
_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 >