--- old/src/share/vm/gc/g1/g1MarkSweep.cpp 2015-11-03 17:15:25.248158218 +0100 +++ new/src/share/vm/gc/g1/g1MarkSweep.cpp 2015-11-03 17:15:25.148157722 +0100 @@ -370,20 +370,12 @@ 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); - } + 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());