< 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 >