src/hotspot/share/gc/shenandoah/shenandoahStringDedup.cpp
changeset 55760 bf8128faace1
parent 54524 33fda525ad41
child 57777 90ead0febf56
equal deleted inserted replaced
55759:bf9fa29bb3dc 55760:bf8128faace1
    73 
    73 
    74 void ShenandoahStringDedup::parallel_oops_do(BoolObjectClosure* is_alive, OopClosure* cl, uint worker_id) {
    74 void ShenandoahStringDedup::parallel_oops_do(BoolObjectClosure* is_alive, OopClosure* cl, uint worker_id) {
    75   assert(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint");
    75   assert(SafepointSynchronize::is_at_safepoint(), "Must be at a safepoint");
    76   assert(is_enabled(), "String deduplication not enabled");
    76   assert(is_enabled(), "String deduplication not enabled");
    77 
    77 
    78   ShenandoahWorkerTimings* worker_times = ShenandoahHeap::heap()->phase_timings()->worker_times();
    78   StringDedupUnlinkOrOopsDoClosure sd_cl(is_alive, cl);
       
    79   if (ShenandoahGCPhase::is_root_work_phase()) {
       
    80     ShenandoahWorkerTimings* worker_times = ShenandoahHeap::heap()->phase_timings()->worker_times();
       
    81     {
       
    82       ShenandoahWorkerTimingsTracker x(worker_times, ShenandoahPhaseTimings::StringDedupQueueRoots, worker_id);
       
    83       StringDedupQueue::unlink_or_oops_do(&sd_cl);
       
    84     }
    79 
    85 
    80   StringDedupUnlinkOrOopsDoClosure sd_cl(is_alive, cl);
    86     {
    81 
    87       ShenandoahWorkerTimingsTracker x(worker_times, ShenandoahPhaseTimings::StringDedupTableRoots, worker_id);
    82   {
    88       StringDedupTable::unlink_or_oops_do(&sd_cl, worker_id);
    83     ShenandoahWorkerTimingsTracker x(worker_times, ShenandoahPhaseTimings::StringDedupQueueRoots, worker_id);
    89     }
       
    90   } else {
    84     StringDedupQueue::unlink_or_oops_do(&sd_cl);
    91     StringDedupQueue::unlink_or_oops_do(&sd_cl);
    85   }
       
    86   {
       
    87     ShenandoahWorkerTimingsTracker x(worker_times, ShenandoahPhaseTimings::StringDedupTableRoots, worker_id);
       
    88     StringDedupTable::unlink_or_oops_do(&sd_cl, worker_id);
    92     StringDedupTable::unlink_or_oops_do(&sd_cl, worker_id);
    89   }
    93   }
    90 }
    94 }
    91 
    95 
    92 void ShenandoahStringDedup::oops_do_slow(OopClosure* cl) {
    96 void ShenandoahStringDedup::oops_do_slow(OopClosure* cl) {