872 RecycleDirtyRegionsClosure() : _heap(ShenandoahHeap::heap()) {}
873
874 bool doHeapRegion(ShenandoahHeapRegion* r) {
875
876 assert (! _heap->cancelled_concgc(), "no recycling after cancelled marking");
877
878 if (_heap->in_collection_set(r)) {
879 log_develop_trace(gc, region)("Recycling region " SIZE_FORMAT ":", r->region_number());
880 _heap->decrease_used(r->used());
881 _bytes_reclaimed += r->used();
882 r->recycle();
883 }
884
885 return false;
886 }
887 size_t bytes_reclaimed() { return _bytes_reclaimed;}
888 void clear_bytes_reclaimed() {_bytes_reclaimed = 0;}
889 };
890
891 void ShenandoahHeap::recycle_dirty_regions() {
892 RecycleDirtyRegionsClosure cl;
893 cl.clear_bytes_reclaimed();
894
895 heap_region_iterate(&cl);
896
897 _shenandoah_policy->record_bytes_reclaimed(cl.bytes_reclaimed());
898 if (! cancelled_concgc()) {
899 clear_cset_fast_test();
900 }
901 }
902
903 ShenandoahFreeSet* ShenandoahHeap::free_regions() {
904 return _free_regions;
905 }
906
907 void ShenandoahHeap::print_heap_regions(outputStream* st) const {
908 _ordered_regions->print(st);
909 }
910
911 class PrintAllRefsOopClosure: public ExtendedOopClosure {
|
872 RecycleDirtyRegionsClosure() : _heap(ShenandoahHeap::heap()) {}
873
874 bool doHeapRegion(ShenandoahHeapRegion* r) {
875
876 assert (! _heap->cancelled_concgc(), "no recycling after cancelled marking");
877
878 if (_heap->in_collection_set(r)) {
879 log_develop_trace(gc, region)("Recycling region " SIZE_FORMAT ":", r->region_number());
880 _heap->decrease_used(r->used());
881 _bytes_reclaimed += r->used();
882 r->recycle();
883 }
884
885 return false;
886 }
887 size_t bytes_reclaimed() { return _bytes_reclaimed;}
888 void clear_bytes_reclaimed() {_bytes_reclaimed = 0;}
889 };
890
891 void ShenandoahHeap::recycle_dirty_regions() {
892 shenandoahPolicy()->record_peak_occupancy();
893 RecycleDirtyRegionsClosure cl;
894 cl.clear_bytes_reclaimed();
895
896 heap_region_iterate(&cl);
897
898 _shenandoah_policy->record_bytes_reclaimed(cl.bytes_reclaimed());
899 if (! cancelled_concgc()) {
900 clear_cset_fast_test();
901 }
902 }
903
904 ShenandoahFreeSet* ShenandoahHeap::free_regions() {
905 return _free_regions;
906 }
907
908 void ShenandoahHeap::print_heap_regions(outputStream* st) const {
909 _ordered_regions->print(st);
910 }
911
912 class PrintAllRefsOopClosure: public ExtendedOopClosure {
|