< prev index next >

src/hotspot/share/gc/g1/g1FullGCAdjustTask.cpp

Print this page




  84     _root_processor(G1CollectedHeap::heap(), collector->workers()),
  85     _references_done(0),
  86     _weak_proc_task(collector->workers()),
  87     _hrclaimer(collector->workers()),
  88     _adjust(),
  89     _string_dedup_cleaning_task(NULL, &_adjust, false) {
  90   // Need cleared claim bits for the roots processing
  91   ClassLoaderDataGraph::clear_claimed_marks();
  92 }
  93 
  94 void G1FullGCAdjustTask::work(uint worker_id) {
  95   Ticks start = Ticks::now();
  96   ResourceMark rm;
  97 
  98   // Adjust preserved marks first since they are not balanced.
  99   G1FullGCMarker* marker = collector()->marker(worker_id);
 100   marker->preserved_stack()->adjust_during_full_gc();
 101 
 102   // Adjust the weak roots.
 103 
 104   if (Atomic::add(1u, &_references_done) == 1u) { // First incr claims task.
 105     G1CollectedHeap::heap()->ref_processor_stw()->weak_oops_do(&_adjust);
 106   }
 107 
 108   AlwaysTrueClosure always_alive;
 109   _weak_proc_task.work(worker_id, &always_alive, &_adjust);
 110 
 111   CLDToOopClosure adjust_cld(&_adjust, ClassLoaderData::_claim_strong);
 112   CodeBlobToOopClosure adjust_code(&_adjust, CodeBlobToOopClosure::FixRelocations);
 113   _root_processor.process_all_roots(&_adjust, &adjust_cld, &adjust_code);
 114 
 115   // Adjust string dedup data structures.
 116   _string_dedup_cleaning_task.work(worker_id);
 117 
 118   // Now adjust pointers region by region
 119   G1AdjustRegionClosure blk(collector()->mark_bitmap(), worker_id);
 120   G1CollectedHeap::heap()->heap_region_par_iterate_from_worker_offset(&blk, &_hrclaimer, worker_id);
 121   log_task("Adjust task", worker_id, start);
 122 }


  84     _root_processor(G1CollectedHeap::heap(), collector->workers()),
  85     _references_done(0),
  86     _weak_proc_task(collector->workers()),
  87     _hrclaimer(collector->workers()),
  88     _adjust(),
  89     _string_dedup_cleaning_task(NULL, &_adjust, false) {
  90   // Need cleared claim bits for the roots processing
  91   ClassLoaderDataGraph::clear_claimed_marks();
  92 }
  93 
  94 void G1FullGCAdjustTask::work(uint worker_id) {
  95   Ticks start = Ticks::now();
  96   ResourceMark rm;
  97 
  98   // Adjust preserved marks first since they are not balanced.
  99   G1FullGCMarker* marker = collector()->marker(worker_id);
 100   marker->preserved_stack()->adjust_during_full_gc();
 101 
 102   // Adjust the weak roots.
 103 
 104   if (Atomic::add(&_references_done, 1u) == 1u) { // First incr claims task.
 105     G1CollectedHeap::heap()->ref_processor_stw()->weak_oops_do(&_adjust);
 106   }
 107 
 108   AlwaysTrueClosure always_alive;
 109   _weak_proc_task.work(worker_id, &always_alive, &_adjust);
 110 
 111   CLDToOopClosure adjust_cld(&_adjust, ClassLoaderData::_claim_strong);
 112   CodeBlobToOopClosure adjust_code(&_adjust, CodeBlobToOopClosure::FixRelocations);
 113   _root_processor.process_all_roots(&_adjust, &adjust_cld, &adjust_code);
 114 
 115   // Adjust string dedup data structures.
 116   _string_dedup_cleaning_task.work(worker_id);
 117 
 118   // Now adjust pointers region by region
 119   G1AdjustRegionClosure blk(collector()->mark_bitmap(), worker_id);
 120   G1CollectedHeap::heap()->heap_region_par_iterate_from_worker_offset(&blk, &_hrclaimer, worker_id);
 121   log_task("Adjust task", worker_id, start);
 122 }
< prev index next >