69 assert(is_enabled(), "String deduplication not enabled"); |
69 assert(is_enabled(), "String deduplication not enabled"); |
70 StringDedupStat dummy; // Statistics from this path is never used |
70 StringDedupStat dummy; // Statistics from this path is never used |
71 StringDedupTable::deduplicate(java_string, &dummy); |
71 StringDedupTable::deduplicate(java_string, &dummy); |
72 } |
72 } |
73 |
73 |
74 void ShenandoahStringDedup::parallel_oops_do(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 ShenandoahWorkerTimings* worker_times = ShenandoahHeap::heap()->phase_timings()->worker_times(); |
79 |
79 |
80 StringDedupUnlinkOrOopsDoClosure sd_cl(NULL, cl); |
80 StringDedupUnlinkOrOopsDoClosure sd_cl(is_alive, cl); |
81 |
81 |
82 { |
82 { |
83 ShenandoahWorkerTimingsTracker x(worker_times, ShenandoahPhaseTimings::StringDedupQueueRoots, worker_id); |
83 ShenandoahWorkerTimingsTracker x(worker_times, ShenandoahPhaseTimings::StringDedupQueueRoots, worker_id); |
84 StringDedupQueue::unlink_or_oops_do(&sd_cl); |
84 StringDedupQueue::unlink_or_oops_do(&sd_cl); |
85 } |
85 } |