< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp

Print this page
rev 59438 : 8245823: Shenandoah: inline/optimize ShenandoahEvacOOMScope


 953 
 954 class ShenandoahEvacuationTask : public AbstractGangTask {
 955 private:
 956   ShenandoahHeap* const _sh;
 957   ShenandoahCollectionSet* const _cs;
 958   bool _concurrent;
 959 public:
 960   ShenandoahEvacuationTask(ShenandoahHeap* sh,
 961                            ShenandoahCollectionSet* cs,
 962                            bool concurrent) :
 963     AbstractGangTask("Parallel Evacuation Task"),
 964     _sh(sh),
 965     _cs(cs),
 966     _concurrent(concurrent)
 967   {}
 968 
 969   void work(uint worker_id) {
 970     if (_concurrent) {
 971       ShenandoahConcurrentWorkerSession worker_session(worker_id);
 972       ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers);
 973       ShenandoahEvacOOMScope oom_evac_scope;
 974       do_work();
 975     } else {
 976       ShenandoahParallelWorkerSession worker_session(worker_id);
 977       ShenandoahEvacOOMScope oom_evac_scope;
 978       do_work();
 979     }
 980   }
 981 
 982 private:
 983   void do_work() {
 984     ShenandoahConcurrentEvacuateRegionObjectClosure cl(_sh);
 985     ShenandoahHeapRegion* r;
 986     while ((r =_cs->claim_next()) != NULL) {
 987       assert(r->has_live(), "Region " SIZE_FORMAT " should have been reclaimed early", r->index());
 988       _sh->marked_object_iterate(r, &cl);
 989 
 990       if (ShenandoahPacing) {
 991         _sh->pacer()->report_evac(r->used() >> LogHeapWordSize);
 992       }
 993 
 994       if (_sh->check_cancelled_gc_and_yield(_concurrent)) {
 995         break;
 996       }
 997     }


3001   _memory_pool = new ShenandoahMemoryPool(this);
3002   _cycle_memory_manager.add_pool(_memory_pool);
3003   _stw_memory_manager.add_pool(_memory_pool);
3004 }
3005 
3006 GrowableArray<GCMemoryManager*> ShenandoahHeap::memory_managers() {
3007   GrowableArray<GCMemoryManager*> memory_managers(2);
3008   memory_managers.append(&_cycle_memory_manager);
3009   memory_managers.append(&_stw_memory_manager);
3010   return memory_managers;
3011 }
3012 
3013 GrowableArray<MemoryPool*> ShenandoahHeap::memory_pools() {
3014   GrowableArray<MemoryPool*> memory_pools(1);
3015   memory_pools.append(_memory_pool);
3016   return memory_pools;
3017 }
3018 
3019 MemoryUsage ShenandoahHeap::memory_usage() {
3020   return _memory_pool->get_memory_usage();
3021 }
3022 
3023 void ShenandoahHeap::enter_evacuation() {
3024   _oom_evac_handler.enter_evacuation();
3025 }
3026 
3027 void ShenandoahHeap::leave_evacuation() {
3028   _oom_evac_handler.leave_evacuation();
3029 }
3030 
3031 ShenandoahRegionIterator::ShenandoahRegionIterator() :
3032   _heap(ShenandoahHeap::heap()),
3033   _index(0) {}
3034 
3035 ShenandoahRegionIterator::ShenandoahRegionIterator(ShenandoahHeap* heap) :
3036   _heap(heap),
3037   _index(0) {}
3038 
3039 void ShenandoahRegionIterator::reset() {
3040   _index = 0;
3041 }
3042 
3043 bool ShenandoahRegionIterator::has_next() const {
3044   return _index < _heap->num_regions();
3045 }
3046 
3047 char ShenandoahHeap::gc_state() const {
3048   return _gc_state.raw_value();




 953 
 954 class ShenandoahEvacuationTask : public AbstractGangTask {
 955 private:
 956   ShenandoahHeap* const _sh;
 957   ShenandoahCollectionSet* const _cs;
 958   bool _concurrent;
 959 public:
 960   ShenandoahEvacuationTask(ShenandoahHeap* sh,
 961                            ShenandoahCollectionSet* cs,
 962                            bool concurrent) :
 963     AbstractGangTask("Parallel Evacuation Task"),
 964     _sh(sh),
 965     _cs(cs),
 966     _concurrent(concurrent)
 967   {}
 968 
 969   void work(uint worker_id) {
 970     if (_concurrent) {
 971       ShenandoahConcurrentWorkerSession worker_session(worker_id);
 972       ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers);
 973       ShenandoahEvacOOMScope oom_evac_scope(_sh);
 974       do_work();
 975     } else {
 976       ShenandoahParallelWorkerSession worker_session(worker_id);
 977       ShenandoahEvacOOMScope oom_evac_scope(_sh);
 978       do_work();
 979     }
 980   }
 981 
 982 private:
 983   void do_work() {
 984     ShenandoahConcurrentEvacuateRegionObjectClosure cl(_sh);
 985     ShenandoahHeapRegion* r;
 986     while ((r =_cs->claim_next()) != NULL) {
 987       assert(r->has_live(), "Region " SIZE_FORMAT " should have been reclaimed early", r->index());
 988       _sh->marked_object_iterate(r, &cl);
 989 
 990       if (ShenandoahPacing) {
 991         _sh->pacer()->report_evac(r->used() >> LogHeapWordSize);
 992       }
 993 
 994       if (_sh->check_cancelled_gc_and_yield(_concurrent)) {
 995         break;
 996       }
 997     }


3001   _memory_pool = new ShenandoahMemoryPool(this);
3002   _cycle_memory_manager.add_pool(_memory_pool);
3003   _stw_memory_manager.add_pool(_memory_pool);
3004 }
3005 
3006 GrowableArray<GCMemoryManager*> ShenandoahHeap::memory_managers() {
3007   GrowableArray<GCMemoryManager*> memory_managers(2);
3008   memory_managers.append(&_cycle_memory_manager);
3009   memory_managers.append(&_stw_memory_manager);
3010   return memory_managers;
3011 }
3012 
3013 GrowableArray<MemoryPool*> ShenandoahHeap::memory_pools() {
3014   GrowableArray<MemoryPool*> memory_pools(1);
3015   memory_pools.append(_memory_pool);
3016   return memory_pools;
3017 }
3018 
3019 MemoryUsage ShenandoahHeap::memory_usage() {
3020   return _memory_pool->get_memory_usage();








3021 }
3022 
3023 ShenandoahRegionIterator::ShenandoahRegionIterator() :
3024   _heap(ShenandoahHeap::heap()),
3025   _index(0) {}
3026 
3027 ShenandoahRegionIterator::ShenandoahRegionIterator(ShenandoahHeap* heap) :
3028   _heap(heap),
3029   _index(0) {}
3030 
3031 void ShenandoahRegionIterator::reset() {
3032   _index = 0;
3033 }
3034 
3035 bool ShenandoahRegionIterator::has_next() const {
3036   return _index < _heap->num_regions();
3037 }
3038 
3039 char ShenandoahHeap::gc_state() const {
3040   return _gc_state.raw_value();


< prev index next >