--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp Tue Mar 03 18:01:27 2015 +0100
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp Mon Mar 23 22:08:14 2015 +0100
@@ -2170,12 +2170,13 @@
g1h->secondary_free_list_add(&tmp_free_list);
SecondaryFreeList_lock->notify_all();
}
-
+#ifndef PRODUCT
if (G1StressConcRegionFreeing) {
for (uintx i = 0; i < G1StressConcRegionFreeingDelayMillis; ++i) {
os::sleep(Thread::current(), (jlong) 1, false);
}
}
+#endif
}
}
assert(tmp_free_list.is_empty(), "post-condition");
@@ -2532,11 +2533,6 @@
G1CMTraceTime trace("Unloading", G1Log::finer());
if (ClassUnloadingWithConcurrentMark) {
- // Cleaning of klasses depends on correct information from MetadataMarkOnStack. The CodeCache::mark_on_stack
- // part is too slow to be done serially, so it is handled during the weakRefsWorkParallelPart phase.
- // Defer the cleaning until we have complete on_stack data.
- MetadataOnStackMark md_on_stack(false /* Don't visit the code cache at this point */);
-
bool purged_classes;
{
@@ -2548,11 +2544,6 @@
G1CMTraceTime trace("Parallel Unloading", G1Log::finest());
weakRefsWorkParallelPart(&g1_is_alive, purged_classes);
}
-
- {
- G1CMTraceTime trace("Deallocate Metadata", G1Log::finest());
- ClassLoaderDataGraph::free_deallocate_lists();
- }
}
if (G1StringDedup::is_enabled()) {