< prev index next >

src/hotspot/share/gc/shared/weakProcessor.cpp

Print this page
rev 53522 : imported patch 8213229-kbarrett-review
rev 53524 : imported patch 8217778-stringtable-wrong-dead-count

@@ -34,19 +34,20 @@
 #include "runtime/globals.hpp"
 #include "utilities/macros.hpp"
 
 void WeakProcessor::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive) {
   StringTable::reset_dead_counter();
-  CountingIsAliveClosure<BoolObjectClosure> cl(is_alive);
   FOR_EACH_WEAK_PROCESSOR_PHASE(phase) {
     if (WeakProcessorPhases::is_serial(phase)) {
+      CountingIsAliveClosure<BoolObjectClosure> cl(is_alive);
       WeakProcessorPhases::processor(phase)(&cl, keep_alive);
     } else {
-      WeakProcessorPhases::oop_storage(phase)->weak_oops_do(&cl, keep_alive);
-    }
+      CountingSkippedIsAliveClosure<BoolObjectClosure, OopClosure> cl(is_alive, keep_alive);
+      WeakProcessorPhases::oop_storage(phase)->oops_do(&cl);
     if (WeakProcessorPhases::is_stringtable(phase)) {
-      StringTable::inc_dead_counter(cl.num_dead());
+        StringTable::inc_dead_counter(cl.num_dead() + cl.num_skipped());
+      }
     }
   }
   StringTable::finish_dead_counter();
 }
 
< prev index next >