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 }
|