6939027: G1: assertion failure during the concurrent phase of cleanup
authortonyp
Thu Apr 15 18:45:30 2010 -0400 (3 years ago)
changeset 1688f9ec1e4bbb44
parent 16875dbd9300cf9c
child 168979e419e5ea3b
child 1690bdb5361c461c
6939027: G1: assertion failure during the concurrent phase of cleanup
Summary: The outgoing region map is not maintained properly and it's causing an assert failure. Given that we don't actually use it, I'm removing it. I'm piggy-backing a small change on this which removes a message that it's printed before a Full GC when DisableExplicitGC is set.
Reviewed-by: apetrusenko, ysr
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp
src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp
--- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu Apr 15 15:52:55 2010 -0700
+++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu Apr 15 18:45:30 2010 -0400
@@ -913,7 +913,6 @@ void G1CollectedHeap::do_collection(bool
}
if (full && DisableExplicitGC) {
- gclog_or_tty->print("\n\n\nDisabling Explicit GC\n\n\n");
return;
}
--- a/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Thu Apr 15 15:52:55 2010 -0700
+++ b/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Thu Apr 15 18:45:30 2010 -0400
@@ -662,8 +662,6 @@ void OtherRegionsTable::add_reference(Oo
prt = PosParPRT::alloc(from_hr);
}
prt->init(from_hr);
- // Record the outgoing pointer in the from_region's outgoing bitmap.
- from_hr->rem_set()->add_outgoing_reference(hr());
PosParPRT* first_prt = _fine_grain_regions[ind];
prt->set_next(first_prt); // XXX Maybe move to init?
@@ -1073,11 +1071,7 @@ int HeapRegionRemSet::num_par_rem_sets()
HeapRegionRemSet::HeapRegionRemSet(G1BlockOffsetSharedArray* bosa,
HeapRegion* hr)
- : _bosa(bosa), _other_regions(hr),
- _outgoing_region_map(G1CollectedHeap::heap()->max_regions(),
- false /* in-resource-area */),
- _iter_state(Unclaimed)
-{}
+ : _bosa(bosa), _other_regions(hr), _iter_state(Unclaimed) { }
void HeapRegionRemSet::setup_remset_size() {
@@ -1148,29 +1142,10 @@ void HeapRegionRemSet::par_cleanup() {
PosParPRT::par_contract_all();
}
-void HeapRegionRemSet::add_outgoing_reference(HeapRegion* to_hr) {
- _outgoing_region_map.par_at_put(to_hr->hrs_index(), 1);
-}
-
void HeapRegionRemSet::clear() {
- clear_outgoing_entries();
- _outgoing_region_map.clear();
_other_regions.clear();
assert(occupied() == 0, "Should be clear.");
}
-
-void HeapRegionRemSet::clear_outgoing_entries() {
- G1CollectedHeap* g1h = G1CollectedHeap::heap();
- size_t i = _outgoing_region_map.get_next_one_offset(0);
- while (i < _outgoing_region_map.size()) {
- HeapRegion* to_region = g1h->region_at(i);
- if (!to_region->in_collection_set()) {
- to_region->rem_set()->clear_incoming_entry(hr());
- }
- i = _outgoing_region_map.get_next_one_offset(i+1);
- }
-}
-
void HeapRegionRemSet::scrub(CardTableModRefBS* ctbs,
BitMap* region_bm, BitMap* card_bm) {
--- a/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp Thu Apr 15 15:52:55 2010 -0700
+++ b/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp Thu Apr 15 18:45:30 2010 -0400
@@ -179,13 +179,6 @@ private:
OtherRegionsTable _other_regions;
- // One set bit for every region that has an entry for this one.
- BitMap _outgoing_region_map;
-
- // Clear entries for the current region in any rem sets named in
- // the _outgoing_region_map.
- void clear_outgoing_entries();
-
enum ParIterState { Unclaimed, Claimed, Complete };
volatile ParIterState _iter_state;
volatile jlong _iter_claimed;
@@ -242,10 +235,6 @@ public:
void add_reference(OopOrNarrowOopStar from, int tid) {
_other_regions.add_reference(from, tid);
}
-
- // Records the fact that the current region contains an outgoing
- // reference into "to_hr".
- void add_outgoing_reference(HeapRegion* to_hr);
// Removes any entries shown by the given bitmaps to contain only dead
// objects.