2495 } 2496 }; 2497 2498 void G1CollectedHeap::object_iterate(ObjectClosure* cl) { 2499 IterateObjectClosureRegionClosure blk(cl); 2500 heap_region_iterate(&blk); 2501 } 2502 2503 // Calls a SpaceClosure on a HeapRegion. 2504 2505 class SpaceClosureRegionClosure: public HeapRegionClosure { 2506 SpaceClosure* _cl; 2507 public: 2508 SpaceClosureRegionClosure(SpaceClosure* cl) : _cl(cl) {} 2509 bool doHeapRegion(HeapRegion* r) { 2510 _cl->do_space(r); 2511 return false; 2512 } 2513 }; 2514 2515 void G1CollectedHeap::space_iterate(SpaceClosure* cl) { 2516 SpaceClosureRegionClosure blk(cl); 2517 heap_region_iterate(&blk); 2518 } 2519 2520 void G1CollectedHeap::heap_region_iterate(HeapRegionClosure* cl) const { 2521 _hrm.iterate(cl); 2522 } 2523 2524 void 2525 G1CollectedHeap::heap_region_par_iterate(HeapRegionClosure* cl, 2526 uint worker_id, 2527 HeapRegionClaimer *hrclaimer, 2528 bool concurrent) const { 2529 _hrm.par_iterate(cl, worker_id, hrclaimer, concurrent); 2530 } 2531 2532 // Clear the cached CSet starting regions and (more importantly) 2533 // the time stamps. Called when we reset the GC time stamp. 2534 void G1CollectedHeap::clear_cset_start_regions() { 2535 assert(_worker_cset_start_region != NULL, "sanity"); 2536 assert(_worker_cset_start_region_time_stamp != NULL, "sanity"); 2537 2538 int n_queues = MAX2((int)ParallelGCThreads, 1); 2539 for (int i = 0; i < n_queues; i++) { | 2495 } 2496 }; 2497 2498 void G1CollectedHeap::object_iterate(ObjectClosure* cl) { 2499 IterateObjectClosureRegionClosure blk(cl); 2500 heap_region_iterate(&blk); 2501 } 2502 2503 // Calls a SpaceClosure on a HeapRegion. 2504 2505 class SpaceClosureRegionClosure: public HeapRegionClosure { 2506 SpaceClosure* _cl; 2507 public: 2508 SpaceClosureRegionClosure(SpaceClosure* cl) : _cl(cl) {} 2509 bool doHeapRegion(HeapRegion* r) { 2510 _cl->do_space(r); 2511 return false; 2512 } 2513 }; 2514 2515 void G1CollectedHeap::heap_region_iterate(HeapRegionClosure* cl) const { 2516 _hrm.iterate(cl); 2517 } 2518 2519 void 2520 G1CollectedHeap::heap_region_par_iterate(HeapRegionClosure* cl, 2521 uint worker_id, 2522 HeapRegionClaimer *hrclaimer, 2523 bool concurrent) const { 2524 _hrm.par_iterate(cl, worker_id, hrclaimer, concurrent); 2525 } 2526 2527 // Clear the cached CSet starting regions and (more importantly) 2528 // the time stamps. Called when we reset the GC time stamp. 2529 void G1CollectedHeap::clear_cset_start_regions() { 2530 assert(_worker_cset_start_region != NULL, "sanity"); 2531 assert(_worker_cset_start_region_time_stamp != NULL, "sanity"); 2532 2533 int n_queues = MAX2((int)ParallelGCThreads, 1); 2534 for (int i = 0; i < n_queues; i++) { |