Wed, 17 Nov 2010 09:21:51 -0500
Merge
1.1 --- a/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Fri Nov 12 09:37:13 2010 -0500 1.2 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Wed Nov 17 09:21:51 2010 -0500 1.3 @@ -1093,7 +1093,8 @@ 1.4 // perm_gen_verify_bit_map where we store the "deadness" information if 1.5 // we did not sweep the perm gen in the most recent previous GC cycle. 1.6 bool CompactibleFreeListSpace::obj_is_alive(const HeapWord* p) const { 1.7 - assert (block_is_obj(p), "The address should point to an object"); 1.8 + assert(block_is_obj(p), "The address should point to an object"); 1.9 + assert(SafepointSynchronize::is_at_safepoint(), "Else races are possible"); 1.10 1.11 // If we're sweeping, we use object liveness information from the main bit map 1.12 // for both perm gen and old gen. 1.13 @@ -1102,9 +1103,14 @@ 1.14 // main marking bit map (live_map below) is locked, 1.15 // OR we're in other phases and perm_gen_verify_bit_map (dead_map below) 1.16 // is stable, because it's mutated only in the sweeping phase. 1.17 + // NOTE: This method is also used by jmap where, if class unloading is 1.18 + // off, the results can return "false" for legitimate perm objects, 1.19 + // when we are not in the midst of a sweeping phase, which can result 1.20 + // in jmap not reporting certain perm gen objects. This will be moot 1.21 + // if/when the perm gen goes away in the future. 1.22 if (_collector->abstract_state() == CMSCollector::Sweeping) { 1.23 CMSBitMap* live_map = _collector->markBitMap(); 1.24 - return live_map->isMarked((HeapWord*) p); 1.25 + return live_map->par_isMarked((HeapWord*) p); 1.26 } else { 1.27 // If we're not currently sweeping and we haven't swept the perm gen in 1.28 // the previous concurrent cycle then we may have dead but unswept objects 1.29 @@ -2266,7 +2272,7 @@ 1.30 } 1.31 1.32 void CompactibleFreeListSpace::print() const { 1.33 - Space::print_on(tty); 1.34 + print_on(tty); 1.35 } 1.36 1.37 void CompactibleFreeListSpace::prepare_for_verify() {
2.1 --- a/src/share/vm/memory/defNewGeneration.cpp Fri Nov 12 09:37:13 2010 -0500 2.2 +++ b/src/share/vm/memory/defNewGeneration.cpp Wed Nov 17 09:21:51 2010 -0500 2.3 @@ -838,7 +838,9 @@ 2.4 gch->incremental_collection_failed()) { 2.5 seen_incremental_collection_failed = true; 2.6 } else if (seen_incremental_collection_failed) { 2.7 - assert(!gch->incremental_collection_failed(), "Twice in a row"); 2.8 + assert(gch->gc_cause() == GCCause::_scavenge_alot || !gch->incremental_collection_failed(), 2.9 + "Twice in a row"); 2.10 + 2.11 seen_incremental_collection_failed = false; 2.12 } 2.13 #endif // ASSERT