# HG changeset patch # User stefank # Date 1363595698 -3600 # Node ID 19f9fabd94cc5508e16d5fe13217ce6043d95045 # Parent 7ae04e71af90ae1adb13b5e38d1aa24104d263ac# Parent 3c226052f7dc50a9494a44c3081aa6baf0eee060 Merge diff -r 7ae04e71af90 -r 19f9fabd94cc src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp --- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Fri Mar 15 11:44:33 2013 -0700 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Mon Mar 18 09:34:58 2013 +0100 @@ -6068,6 +6068,10 @@ verify_work_stacks_empty(); verify_overflow_empty(); + if (should_unload_classes()) { + ClassLoaderDataGraph::purge(); + } + _intra_sweep_timer.stop(); _intra_sweep_estimate.sample(_intra_sweep_timer.seconds()); diff -r 7ae04e71af90 -r 19f9fabd94cc src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Fri Mar 15 11:44:33 2013 -0700 +++ b/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Mon Mar 18 09:34:58 2013 +0100 @@ -656,7 +656,7 @@ tty->print_cr("[Accumulated GC generation 0 time %3.7f secs]", time); } if (TraceGen1Time) { - double time = PSMarkSweep::accumulated_time()->seconds(); + double time = UseParallelOldGC ? PSParallelCompact::accumulated_time()->seconds() : PSMarkSweep::accumulated_time()->seconds(); tty->print_cr("[Accumulated GC generation 1 time %3.7f secs]", time); } } diff -r 7ae04e71af90 -r 19f9fabd94cc src/share/vm/memory/genCollectedHeap.cpp --- a/src/share/vm/memory/genCollectedHeap.cpp Fri Mar 15 11:44:33 2013 -0700 +++ b/src/share/vm/memory/genCollectedHeap.cpp Mon Mar 18 09:34:58 2013 +0100 @@ -554,6 +554,8 @@ } if (complete) { + // Delete metaspaces for unloaded class loaders and clean up loader_data graph + ClassLoaderDataGraph::purge(); // Resize the metaspace capacity after full collections MetaspaceGC::compute_new_size(); update_full_collections_completed(); @@ -564,11 +566,6 @@ gc_epilogue(complete); - // Delete metaspaces for unloaded class loaders and clean up loader_data graph - if (complete) { - ClassLoaderDataGraph::purge(); - } - if (must_restore_marks_for_biased_locking) { BiasedLocking::restore_marks(); } diff -r 7ae04e71af90 -r 19f9fabd94cc src/share/vm/memory/metaspace.cpp --- a/src/share/vm/memory/metaspace.cpp Fri Mar 15 11:44:33 2013 -0700 +++ b/src/share/vm/memory/metaspace.cpp Mon Mar 18 09:34:58 2013 +0100 @@ -1308,8 +1308,7 @@ gclog_or_tty->print_cr(" metaspace HWM: %.1fK", new_capacity_until_GC / (double) K); } } - assert(vsl->used_bytes_sum() == used_after_gc && - used_after_gc <= vsl->capacity_bytes_sum(), + assert(used_after_gc <= vsl->capacity_bytes_sum(), "sanity check"); } @@ -1969,6 +1968,9 @@ } SpaceManager::~SpaceManager() { + // This call this->_lock which can't be done while holding expand_lock() + const size_t in_use_before = sum_capacity_in_chunks_in_use(); + MutexLockerEx fcl(SpaceManager::expand_lock(), Mutex::_no_safepoint_check_flag); @@ -1986,7 +1988,7 @@ // Have to update before the chunks_in_use lists are emptied // below. - chunk_manager->inc_free_chunks_total(sum_capacity_in_chunks_in_use(), + chunk_manager->inc_free_chunks_total(in_use_before, sum_count_in_chunks_in_use()); // Add all the chunks in use by this space manager