--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Fri Mar 15 11:44:33 2013 -0700
+++ b/hotspot/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());
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Fri Mar 15 11:44:33 2013 -0700
+++ b/hotspot/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);
}
}
--- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp Fri Mar 15 11:44:33 2013 -0700
+++ b/hotspot/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();
}
--- a/hotspot/src/share/vm/memory/metaspace.cpp Fri Mar 15 11:44:33 2013 -0700
+++ b/hotspot/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