--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Mon Mar 21 18:38:00 2011 -0700
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Tue Mar 22 13:36:33 2011 -0700
@@ -23,6 +23,7 @@
*/
#include "precompiled.hpp"
+#include "classfile/symbolTable.hpp"
#include "gc_implementation/parallelScavenge/cardTableExtension.hpp"
#include "gc_implementation/parallelScavenge/gcTaskManager.hpp"
#include "gc_implementation/parallelScavenge/generationSizer.hpp"
@@ -439,6 +440,14 @@
reference_processor()->enqueue_discovered_references(NULL);
}
+ if (!JavaObjectsInPerm) {
+ // 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);
+ }
+
// Finally, flush the promotion_manager's labs, and deallocate its stacks.
PSPromotionManager::post_scavenge();