diff src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp @ 10363:8dbc025ff709

8015422: Large performance hit when the StringTable is walked twice in Parallel Scavenge Summary: Combine the calls to StringTable::unlink and StringTable::oops_do in Parallel Scavenge. Reviewed-by: pliden, coleenp
author stefank
date Mon, 27 May 2013 12:58:42 +0200
parents eda078b01c65
children 47bdfb3d010f
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp	Mon May 27 12:56:34 2013 +0200
+++ b/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp	Mon May 27 12:58:42 2013 +0200
@@ -450,11 +450,9 @@
       reference_processor()->enqueue_discovered_references(NULL);
     }
 
-      // Unlink any dead interned Strings
-      StringTable::unlink(&_is_alive_closure);
-      // Process the remaining live ones
-      PSScavengeRootsClosure root_closure(promotion_manager);
-      StringTable::oops_do(&root_closure);
+    // Unlink any dead interned Strings and process the remaining live ones.
+    PSScavengeRootsClosure root_closure(promotion_manager);
+    StringTable::unlink_or_oops_do(&_is_alive_closure, &root_closure);
 
     // Finally, flush the promotion_manager's labs, and deallocate its stacks.
     PSPromotionManager::post_scavenge();