2283 2284 // Iterates an ObjectClosure over all objects within a HeapRegion. 2285 2286 class IterateObjectClosureRegionClosure: public HeapRegionClosure { 2287 ObjectClosure* _cl; 2288 public: 2289 IterateObjectClosureRegionClosure(ObjectClosure* cl) : _cl(cl) {} 2290 bool do_heap_region(HeapRegion* r) { 2291 if (!r->is_continues_humongous()) { 2292 r->object_iterate(_cl); 2293 } 2294 return false; 2295 } 2296 }; 2297 2298 void G1CollectedHeap::object_iterate(ObjectClosure* cl) { 2299 IterateObjectClosureRegionClosure blk(cl); 2300 heap_region_iterate(&blk); 2301 } 2302 2303 void G1CollectedHeap::keep_alive(oop obj) { 2304 G1BarrierSet::enqueue(obj); 2305 } 2306 2307 void G1CollectedHeap::heap_region_iterate(HeapRegionClosure* cl) const { 2308 _hrm->iterate(cl); 2309 } 2310 2311 void G1CollectedHeap::heap_region_par_iterate_from_worker_offset(HeapRegionClosure* cl, 2312 HeapRegionClaimer *hrclaimer, 2313 uint worker_id) const { 2314 _hrm->par_iterate(cl, hrclaimer, hrclaimer->offset_for_worker(worker_id)); 2315 } 2316 2317 void G1CollectedHeap::heap_region_par_iterate_from_start(HeapRegionClosure* cl, 2318 HeapRegionClaimer *hrclaimer) const { 2319 _hrm->par_iterate(cl, hrclaimer, 0); 2320 } 2321 2322 void G1CollectedHeap::collection_set_iterate_all(HeapRegionClosure* cl) { 4901 4902 void G1CollectedHeap::rebuild_strong_code_roots() { 4903 RebuildStrongCodeRootClosure blob_cl(this); 4904 CodeCache::blobs_do(&blob_cl); 4905 } 4906 4907 void G1CollectedHeap::initialize_serviceability() { 4908 _g1mm->initialize_serviceability(); 4909 } 4910 4911 MemoryUsage G1CollectedHeap::memory_usage() { 4912 return _g1mm->memory_usage(); 4913 } 4914 4915 GrowableArray<GCMemoryManager*> G1CollectedHeap::memory_managers() { 4916 return _g1mm->memory_managers(); 4917 } 4918 4919 GrowableArray<MemoryPool*> G1CollectedHeap::memory_pools() { 4920 return _g1mm->memory_pools(); 4921 } 4922 4923 class G1ParallelObjectIterator : public ParallelObjectIterator { 4924 private: 4925 G1CollectedHeap* _heap; 4926 HeapRegionClaimer _claimer; 4927 4928 public: 4929 G1ParallelObjectIterator(uint thread_num) : 4930 _heap(G1CollectedHeap::heap()), 4931 _claimer(thread_num == 0 ? G1CollectedHeap::heap()->workers()->active_workers() : thread_num) {} 4932 4933 virtual void object_iterate(ObjectClosure* cl, uint worker_id) { 4934 _heap->object_iterate_parallel(cl, worker_id, &_claimer); 4935 } 4936 }; 4937 4938 ParallelObjectIterator* G1CollectedHeap::parallel_object_iterator(uint thread_num) { 4939 return new G1ParallelObjectIterator(thread_num); 4940 } 4941 4942 void G1CollectedHeap::object_iterate_parallel(ObjectClosure* cl, uint worker_id, HeapRegionClaimer* claimer) { 4943 IterateObjectClosureRegionClosure blk(cl); 4944 heap_region_par_iterate_from_worker_offset(&blk, claimer, worker_id); 4945 } | 2283 2284 // Iterates an ObjectClosure over all objects within a HeapRegion. 2285 2286 class IterateObjectClosureRegionClosure: public HeapRegionClosure { 2287 ObjectClosure* _cl; 2288 public: 2289 IterateObjectClosureRegionClosure(ObjectClosure* cl) : _cl(cl) {} 2290 bool do_heap_region(HeapRegion* r) { 2291 if (!r->is_continues_humongous()) { 2292 r->object_iterate(_cl); 2293 } 2294 return false; 2295 } 2296 }; 2297 2298 void G1CollectedHeap::object_iterate(ObjectClosure* cl) { 2299 IterateObjectClosureRegionClosure blk(cl); 2300 heap_region_iterate(&blk); 2301 } 2302 2303 class G1ParallelObjectIterator : public ParallelObjectIterator { 2304 private: 2305 G1CollectedHeap* _heap; 2306 HeapRegionClaimer _claimer; 2307 2308 public: 2309 G1ParallelObjectIterator(uint thread_num) : 2310 _heap(G1CollectedHeap::heap()), 2311 _claimer(thread_num == 0 ? G1CollectedHeap::heap()->workers()->active_workers() : thread_num) {} 2312 2313 virtual void object_iterate(ObjectClosure* cl, uint worker_id) { 2314 _heap->object_iterate_parallel(cl, worker_id, &_claimer); 2315 } 2316 }; 2317 2318 ParallelObjectIterator* G1CollectedHeap::parallel_object_iterator(uint thread_num) { 2319 return new G1ParallelObjectIterator(thread_num); 2320 } 2321 2322 void G1CollectedHeap::object_iterate_parallel(ObjectClosure* cl, uint worker_id, HeapRegionClaimer* claimer) { 2323 IterateObjectClosureRegionClosure blk(cl); 2324 heap_region_par_iterate_from_worker_offset(&blk, claimer, worker_id); 2325 } 2326 2327 void G1CollectedHeap::keep_alive(oop obj) { 2328 G1BarrierSet::enqueue(obj); 2329 } 2330 2331 void G1CollectedHeap::heap_region_iterate(HeapRegionClosure* cl) const { 2332 _hrm->iterate(cl); 2333 } 2334 2335 void G1CollectedHeap::heap_region_par_iterate_from_worker_offset(HeapRegionClosure* cl, 2336 HeapRegionClaimer *hrclaimer, 2337 uint worker_id) const { 2338 _hrm->par_iterate(cl, hrclaimer, hrclaimer->offset_for_worker(worker_id)); 2339 } 2340 2341 void G1CollectedHeap::heap_region_par_iterate_from_start(HeapRegionClosure* cl, 2342 HeapRegionClaimer *hrclaimer) const { 2343 _hrm->par_iterate(cl, hrclaimer, 0); 2344 } 2345 2346 void G1CollectedHeap::collection_set_iterate_all(HeapRegionClosure* cl) { 4925 4926 void G1CollectedHeap::rebuild_strong_code_roots() { 4927 RebuildStrongCodeRootClosure blob_cl(this); 4928 CodeCache::blobs_do(&blob_cl); 4929 } 4930 4931 void G1CollectedHeap::initialize_serviceability() { 4932 _g1mm->initialize_serviceability(); 4933 } 4934 4935 MemoryUsage G1CollectedHeap::memory_usage() { 4936 return _g1mm->memory_usage(); 4937 } 4938 4939 GrowableArray<GCMemoryManager*> G1CollectedHeap::memory_managers() { 4940 return _g1mm->memory_managers(); 4941 } 4942 4943 GrowableArray<MemoryPool*> G1CollectedHeap::memory_pools() { 4944 return _g1mm->memory_pools(); 4945 } |