< prev index next >

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

Print this page

        

*** 28,37 **** --- 28,38 ---- #include "gc/shenandoah/shenandoahHeap.inline.hpp" #include "gc/shenandoah/shenandoahHeapRegion.hpp" #include "gc/shenandoah/shenandoahMarkingContext.inline.hpp" #include "gc/shenandoah/shenandoahTraversalGC.hpp" #include "gc/shared/space.inline.hpp" + #include "jfr/jfrEvents.hpp" #include "memory/iterator.inline.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp"
*** 91,101 **** switch (_state) { case _empty_uncommitted: do_commit(); case _empty_committed: ! _state = _regular; case _regular: case _pinned: return; default: report_illegal_transition("regular allocation"); --- 92,102 ---- switch (_state) { case _empty_uncommitted: do_commit(); case _empty_committed: ! set_state(_regular); case _regular: case _pinned: return; default: report_illegal_transition("regular allocation");
*** 112,125 **** do_commit(); case _empty_committed: case _cset: case _humongous_start: case _humongous_cont: ! _state = _regular; return; case _pinned_cset: ! _state = _pinned; return; case _regular: case _pinned: return; default: --- 113,126 ---- do_commit(); case _empty_committed: case _cset: case _humongous_start: case _humongous_cont: ! set_state(_regular); return; case _pinned_cset: ! set_state(_pinned); return; case _regular: case _pinned: return; default:
*** 131,141 **** _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _empty_uncommitted: do_commit(); case _empty_committed: ! _state = _humongous_start; return; default: report_illegal_transition("humongous start allocation"); } } --- 132,142 ---- _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _empty_uncommitted: do_commit(); case _empty_committed: ! set_state(_humongous_start); return; default: report_illegal_transition("humongous start allocation"); } }
*** 147,157 **** switch (_state) { case _empty_committed: case _regular: case _humongous_start: case _humongous_cont: ! _state = _humongous_start; return; default: report_illegal_transition("humongous start bypass"); } } --- 148,158 ---- switch (_state) { case _empty_committed: case _regular: case _humongous_start: case _humongous_cont: ! set_state(_humongous_start); return; default: report_illegal_transition("humongous start bypass"); } }
*** 160,170 **** _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _empty_uncommitted: do_commit(); case _empty_committed: ! _state = _humongous_cont; return; default: report_illegal_transition("humongous continuation allocation"); } } --- 161,171 ---- _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _empty_uncommitted: do_commit(); case _empty_committed: ! set_state(_humongous_cont); return; default: report_illegal_transition("humongous continuation allocation"); } }
*** 176,186 **** switch (_state) { case _empty_committed: case _regular: case _humongous_start: case _humongous_cont: ! _state = _humongous_cont; return; default: report_illegal_transition("humongous continuation bypass"); } } --- 177,187 ---- switch (_state) { case _empty_committed: case _regular: case _humongous_start: case _humongous_cont: ! set_state(_humongous_cont); return; default: report_illegal_transition("humongous continuation bypass"); } }
*** 188,205 **** void ShenandoahHeapRegion::make_pinned() { _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _regular: assert (_critical_pins == 0, "sanity"); ! _state = _pinned; case _pinned_cset: case _pinned: _critical_pins++; return; case _humongous_start: assert (_critical_pins == 0, "sanity"); ! _state = _pinned_humongous_start; case _pinned_humongous_start: _critical_pins++; return; case _cset: guarantee(_heap->cancelled_gc(), "only valid when evac has been cancelled"); --- 189,206 ---- void ShenandoahHeapRegion::make_pinned() { _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _regular: assert (_critical_pins == 0, "sanity"); ! set_state(_pinned); case _pinned_cset: case _pinned: _critical_pins++; return; case _humongous_start: assert (_critical_pins == 0, "sanity"); ! set_state(_pinned_humongous_start); case _pinned_humongous_start: _critical_pins++; return; case _cset: guarantee(_heap->cancelled_gc(), "only valid when evac has been cancelled");
*** 217,227 **** switch (_state) { case _pinned: assert (_critical_pins > 0, "sanity"); _critical_pins--; if (_critical_pins == 0) { ! _state = _regular; } return; case _regular: case _humongous_start: assert (_critical_pins == 0, "sanity"); --- 218,228 ---- switch (_state) { case _pinned: assert (_critical_pins > 0, "sanity"); _critical_pins--; if (_critical_pins == 0) { ! set_state(_regular); } return; case _regular: case _humongous_start: assert (_critical_pins == 0, "sanity");
*** 229,246 **** case _pinned_cset: guarantee(_heap->cancelled_gc(), "only valid when evac has been cancelled"); assert (_critical_pins > 0, "sanity"); _critical_pins--; if (_critical_pins == 0) { ! _state = _cset; } return; case _pinned_humongous_start: assert (_critical_pins > 0, "sanity"); _critical_pins--; if (_critical_pins == 0) { ! _state = _humongous_start; } return; default: report_illegal_transition("unpinning"); } --- 230,247 ---- case _pinned_cset: guarantee(_heap->cancelled_gc(), "only valid when evac has been cancelled"); assert (_critical_pins > 0, "sanity"); _critical_pins--; if (_critical_pins == 0) { ! set_state(_cset); } return; case _pinned_humongous_start: assert (_critical_pins > 0, "sanity"); _critical_pins--; if (_critical_pins == 0) { ! set_state(_humongous_start); } return; default: report_illegal_transition("unpinning"); }
*** 248,258 **** void ShenandoahHeapRegion::make_cset() { _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _regular: ! _state = _cset; case _cset: return; default: report_illegal_transition("cset"); } --- 249,259 ---- void ShenandoahHeapRegion::make_cset() { _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _regular: ! set_state(_cset); case _cset: return; default: report_illegal_transition("cset"); }
*** 266,276 **** case _humongous_start: case _humongous_cont: // Reclaiming humongous regions case _regular: // Immediate region reclaim ! _state = _trash; return; default: report_illegal_transition("trashing"); } } --- 267,277 ---- case _humongous_start: case _humongous_cont: // Reclaiming humongous regions case _regular: // Immediate region reclaim ! set_state(_trash); return; default: report_illegal_transition("trashing"); } }
*** 285,295 **** void ShenandoahHeapRegion::make_empty() { _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _trash: ! _state = _empty_committed; _empty_time = os::elapsedTime(); return; default: report_illegal_transition("emptying"); } --- 286,296 ---- void ShenandoahHeapRegion::make_empty() { _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _trash: ! set_state(_empty_committed); _empty_time = os::elapsedTime(); return; default: report_illegal_transition("emptying"); }
*** 298,308 **** void ShenandoahHeapRegion::make_uncommitted() { _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _empty_committed: do_uncommit(); ! _state = _empty_uncommitted; return; default: report_illegal_transition("uncommiting"); } } --- 299,309 ---- void ShenandoahHeapRegion::make_uncommitted() { _heap->assert_heaplock_owned_by_current_thread(); switch (_state) { case _empty_committed: do_uncommit(); ! set_state(_empty_uncommitted); return; default: report_illegal_transition("uncommiting"); } }
*** 312,322 **** assert (_heap->is_full_gc_in_progress(), "only for full GC"); switch (_state) { case _empty_uncommitted: do_commit(); ! _state = _empty_committed; return; default: report_illegal_transition("commit bypass"); } } --- 313,323 ---- assert (_heap->is_full_gc_in_progress(), "only for full GC"); switch (_state) { case _empty_uncommitted: do_commit(); ! set_state(_empty_committed); return; default: report_illegal_transition("commit bypass"); } }
*** 677,681 **** --- 678,695 ---- if (!_heap->uncommit_bitmap_slice(this)) { report_java_out_of_memory("Unable to uncommit bitmaps for region"); } _heap->decrease_committed(ShenandoahHeapRegion::region_size_bytes()); } + + void ShenandoahHeapRegion::set_state(RegionState to) { + EventShenandoahHeapRegionStateChange evt; + if (evt.should_commit()){ + evt.set_index(region_number()); + evt.set_start((uintptr_t)bottom()); + evt.set_used(used()); + evt.set_from(_state); + evt.set_to(to); + evt.commit(); + } + _state = to; + }
< prev index next >