src/share/vm/gc/g1/g1CollectedHeap.cpp
Print this page
@@ -1107,39 +1107,34 @@
void G1CollectedHeap::clear_rsets_post_compaction() {
PostMCRemSetClearClosure rs_clear(this, g1_barrier_set());
heap_region_iterate(&rs_clear);
}
-class RebuildRSOutOfRegionClosure: public HeapRegionClosure {
- G1CollectedHeap* _g1h;
+class ParRebuildRSTask: public G1ParallelizeByRegionsTask {
+ class RebuildRSOutOfRegionClosure: public HeapRegionClosure {
UpdateRSOopClosure _cl;
-public:
+ public:
RebuildRSOutOfRegionClosure(G1CollectedHeap* g1, uint worker_i = 0) :
- _cl(g1->g1_rem_set(), worker_i),
- _g1h(g1)
- { }
+ _cl(g1->g1_rem_set(), worker_i) {}
bool doHeapRegion(HeapRegion* r) {
if (!r->is_continues_humongous()) {
_cl.set_from(r);
r->oop_iterate(&_cl);
}
return false;
}
-};
-
-class ParRebuildRSTask: public AbstractGangTask {
- G1CollectedHeap* _g1;
- HeapRegionClaimer _hrclaimer;
+ };
public:
ParRebuildRSTask(G1CollectedHeap* g1) :
- AbstractGangTask("ParRebuildRSTask"), _g1(g1), _hrclaimer(g1->workers()->active_workers()) {}
+ G1ParallelizeByRegionsTask("ParRebuildRSTask", g1->workers()->active_workers()) {}
void work(uint worker_id) {
- RebuildRSOutOfRegionClosure rebuild_rs(_g1, worker_id);
- _g1->heap_region_par_iterate(&rebuild_rs, worker_id, &_hrclaimer);
+ G1CollectedHeap* g1 = G1CollectedHeap::heap();
+ RebuildRSOutOfRegionClosure rebuild_rs(g1, worker_id);
+ all_heap_regions_work(&rebuild_rs, worker_id);
}
};
class PostCompactionPrinterClosure: public HeapRegionClosure {
private:
@@ -4598,30 +4593,39 @@
void G1CollectedHeap::decrement_summary_bytes(size_t bytes) {
decrease_used(bytes);
}
-class G1ParScrubRemSetTask: public AbstractGangTask {
-protected:
- G1RemSet* _g1rs;
- HeapRegionClaimer _hrclaimer;
+class G1ParScrubRemSetTask: public G1ParallelizeByRegionsTask {
+ class G1ScrubRSClosure: public HeapRegionClosure {
+ G1CardLiveData* _live_data;
+ public:
+ G1ScrubRSClosure(G1CardLiveData* live_data) :
+ _live_data(live_data) {}
-public:
- G1ParScrubRemSetTask(G1RemSet* g1_rs, uint num_workers) :
- AbstractGangTask("G1 ScrubRS"),
- _g1rs(g1_rs),
- _hrclaimer(num_workers) {
+ bool doHeapRegion(HeapRegion* r) {
+ if (!r->is_continues_humongous()) {
+ r->rem_set()->scrub(_live_data);
}
+ return false;
+ }
+ };
+
+public:
+ G1ParScrubRemSetTask(uint num_workers) :
+ G1ParallelizeByRegionsTask("G1 ScrubRS", num_workers) {}
void work(uint worker_id) {
- _g1rs->scrub(worker_id, &_hrclaimer);
+ G1CollectedHeap* g1 = G1CollectedHeap::heap();
+ G1ScrubRSClosure scrub_cl(&g1->g1_rem_set()->_card_live_data);
+ all_heap_regions_work(&scrub_cl, worker_id);
}
};
void G1CollectedHeap::scrub_rem_set() {
uint num_workers = workers()->active_workers();
- G1ParScrubRemSetTask g1_par_scrub_rs_task(g1_rem_set(), num_workers);
+ G1ParScrubRemSetTask g1_par_scrub_rs_task(num_workers);
workers()->run_task(&g1_par_scrub_rs_task);
}
class G1FreeCollectionSetTask : public AbstractGangTask {
private: