equal
deleted
inserted
replaced
218 } |
218 } |
219 return false; |
219 return false; |
220 } |
220 } |
221 }; |
221 }; |
222 |
222 |
223 class G1AlwaysTrueClosure: public BoolObjectClosure { |
|
224 public: |
|
225 bool do_object_b(oop p) { return true; } |
|
226 }; |
|
227 static G1AlwaysTrueClosure always_true; |
|
228 |
|
229 void G1MarkSweep::mark_sweep_phase3() { |
223 void G1MarkSweep::mark_sweep_phase3() { |
230 G1CollectedHeap* g1h = G1CollectedHeap::heap(); |
224 G1CollectedHeap* g1h = G1CollectedHeap::heap(); |
231 |
225 |
232 // Adjust the pointers to reflect the new locations |
226 // Adjust the pointers to reflect the new locations |
233 GCTraceTime(Trace, gc) tm("Phase 3: Adjust pointers", gc_timer()); |
227 GCTraceTime(Trace, gc) tm("Phase 3: Adjust pointers", gc_timer()); |
246 assert(GenMarkSweep::ref_processor() == g1h->ref_processor_stw(), "Sanity"); |
240 assert(GenMarkSweep::ref_processor() == g1h->ref_processor_stw(), "Sanity"); |
247 g1h->ref_processor_stw()->weak_oops_do(&GenMarkSweep::adjust_pointer_closure); |
241 g1h->ref_processor_stw()->weak_oops_do(&GenMarkSweep::adjust_pointer_closure); |
248 |
242 |
249 // Now adjust pointers in remaining weak roots. (All of which should |
243 // Now adjust pointers in remaining weak roots. (All of which should |
250 // have been cleared if they pointed to non-surviving objects.) |
244 // have been cleared if they pointed to non-surviving objects.) |
251 JNIHandles::weak_oops_do(&always_true, &GenMarkSweep::adjust_pointer_closure); |
245 JNIHandles::weak_oops_do(&GenMarkSweep::adjust_pointer_closure); |
252 |
246 |
253 if (G1StringDedup::is_enabled()) { |
247 if (G1StringDedup::is_enabled()) { |
254 G1StringDedup::oops_do(&GenMarkSweep::adjust_pointer_closure); |
248 G1StringDedup::oops_do(&GenMarkSweep::adjust_pointer_closure); |
255 } |
249 } |
256 |
250 |