136 virtual void work(uint worker_id) { 137 { 138 G1GCParPhaseTimesTracker x(_phase_times, G1GCPhaseTimes::StringDedupQueueFixup, worker_id); 139 G1StringDedupQueue::unlink_or_oops_do(&_cl); 140 } 141 { 142 G1GCParPhaseTimesTracker x(_phase_times, G1GCPhaseTimes::StringDedupTableFixup, worker_id); 143 G1StringDedupTable::unlink_or_oops_do(&_cl, worker_id); 144 } 145 } 146 }; 147 148 void G1StringDedup::unlink_or_oops_do(BoolObjectClosure* is_alive, 149 OopClosure* keep_alive, 150 bool allow_resize_and_rehash, 151 G1GCPhaseTimes* phase_times) { 152 assert(is_enabled(), "String deduplication not enabled"); 153 154 G1StringDedupUnlinkOrOopsDoTask task(is_alive, keep_alive, allow_resize_and_rehash, phase_times); 155 G1CollectedHeap* g1h = G1CollectedHeap::heap(); 156 g1h->set_par_threads(); 157 g1h->workers()->run_task(&task); 158 g1h->set_par_threads(0); 159 } 160 161 void G1StringDedup::threads_do(ThreadClosure* tc) { 162 assert(is_enabled(), "String deduplication not enabled"); 163 tc->do_thread(G1StringDedupThread::thread()); 164 } 165 166 void G1StringDedup::print_worker_threads_on(outputStream* st) { 167 assert(is_enabled(), "String deduplication not enabled"); 168 G1StringDedupThread::thread()->print_on(st); 169 st->cr(); 170 } 171 172 void G1StringDedup::verify() { 173 assert(is_enabled(), "String deduplication not enabled"); 174 G1StringDedupQueue::verify(); 175 G1StringDedupTable::verify(); 176 } 177 178 G1StringDedupUnlinkOrOopsDoClosure::G1StringDedupUnlinkOrOopsDoClosure(BoolObjectClosure* is_alive, | 136 virtual void work(uint worker_id) { 137 { 138 G1GCParPhaseTimesTracker x(_phase_times, G1GCPhaseTimes::StringDedupQueueFixup, worker_id); 139 G1StringDedupQueue::unlink_or_oops_do(&_cl); 140 } 141 { 142 G1GCParPhaseTimesTracker x(_phase_times, G1GCPhaseTimes::StringDedupTableFixup, worker_id); 143 G1StringDedupTable::unlink_or_oops_do(&_cl, worker_id); 144 } 145 } 146 }; 147 148 void G1StringDedup::unlink_or_oops_do(BoolObjectClosure* is_alive, 149 OopClosure* keep_alive, 150 bool allow_resize_and_rehash, 151 G1GCPhaseTimes* phase_times) { 152 assert(is_enabled(), "String deduplication not enabled"); 153 154 G1StringDedupUnlinkOrOopsDoTask task(is_alive, keep_alive, allow_resize_and_rehash, phase_times); 155 G1CollectedHeap* g1h = G1CollectedHeap::heap(); 156 g1h->workers()->run_task(&task); 157 } 158 159 void G1StringDedup::threads_do(ThreadClosure* tc) { 160 assert(is_enabled(), "String deduplication not enabled"); 161 tc->do_thread(G1StringDedupThread::thread()); 162 } 163 164 void G1StringDedup::print_worker_threads_on(outputStream* st) { 165 assert(is_enabled(), "String deduplication not enabled"); 166 G1StringDedupThread::thread()->print_on(st); 167 st->cr(); 168 } 169 170 void G1StringDedup::verify() { 171 assert(is_enabled(), "String deduplication not enabled"); 172 G1StringDedupQueue::verify(); 173 G1StringDedupTable::verify(); 174 } 175 176 G1StringDedupUnlinkOrOopsDoClosure::G1StringDedupUnlinkOrOopsDoClosure(BoolObjectClosure* is_alive, |