--- old/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp 2014-03-07 14:31:32.177546549 +0100 +++ new/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp 2014-03-07 14:31:32.027590248 +0100 @@ -31,6 +31,7 @@ #include "code/icBuffer.hpp" #include "gc_implementation/g1/g1Log.hpp" #include "gc_implementation/g1/g1MarkSweep.hpp" +#include "gc_implementation/g1/stringDedup.hpp" #include "gc_implementation/shared/gcHeapSummary.hpp" #include "gc_implementation/shared/gcTimer.hpp" #include "gc_implementation/shared/gcTrace.hpp" @@ -161,6 +162,9 @@ // Prune dead klasses from subklass/sibling/implementor lists. Klass::clean_weak_klass_links(&GenMarkSweep::is_alive); + // Delete dead entries in string deduplication queue/table + StringDedup::unlink(&GenMarkSweep::is_alive); + // Delete entries for dead interned string and clean up unreferenced symbols in symbol table. G1CollectedHeap::heap()->unlink_string_and_symbol_table(&GenMarkSweep::is_alive); @@ -317,6 +321,9 @@ // have been cleared if they pointed to non-surviving objects.) sh->process_weak_roots(&GenMarkSweep::adjust_pointer_closure); + // Adjust pointers in the string deduplication queue/table + StringDedup::oops_do(&GenMarkSweep::adjust_pointer_closure); + GenMarkSweep::adjust_marks(); G1AdjustPointersClosure blk;