--- a/hotspot/src/share/vm/gc/g1/g1CardLiveData.cpp Tue Apr 12 14:03:31 2016 +0200
+++ b/hotspot/src/share/vm/gc/g1/g1CardLiveData.cpp Mon Apr 11 09:49:10 2016 +0200
@@ -206,8 +206,14 @@
return 0;
}
if (hr->is_humongous()) {
- mark_card_bitmap_range(start, hr->top());
- return pointer_delta(hr->top(), start, 1);
+ HeapRegion* start_region = hr->humongous_start_region();
+ if (mark_bitmap->isMarked(start_region->bottom())) {
+ mark_card_bitmap_range(start, hr->top());
+ return pointer_delta(hr->top(), start, 1);
+ } else {
+ // Humongous start object was actually dead.
+ return 0;
+ }
}
assert(start <= hr->end() && start <= ntams && ntams <= hr->end(),