< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp
Print this page
@@ -28,10 +28,11 @@
#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,11 +92,11 @@
switch (_state) {
case _empty_uncommitted:
do_commit();
case _empty_committed:
- _state = _regular;
+ set_state(_regular);
case _regular:
case _pinned:
return;
default:
report_illegal_transition("regular allocation");
@@ -112,14 +113,14 @@
do_commit();
case _empty_committed:
case _cset:
case _humongous_start:
case _humongous_cont:
- _state = _regular;
+ set_state(_regular);
return;
case _pinned_cset:
- _state = _pinned;
+ set_state(_pinned);
return;
case _regular:
case _pinned:
return;
default:
@@ -131,11 +132,11 @@
_heap->assert_heaplock_owned_by_current_thread();
switch (_state) {
case _empty_uncommitted:
do_commit();
case _empty_committed:
- _state = _humongous_start;
+ set_state(_humongous_start);
return;
default:
report_illegal_transition("humongous start allocation");
}
}
@@ -147,11 +148,11 @@
switch (_state) {
case _empty_committed:
case _regular:
case _humongous_start:
case _humongous_cont:
- _state = _humongous_start;
+ set_state(_humongous_start);
return;
default:
report_illegal_transition("humongous start bypass");
}
}
@@ -160,11 +161,11 @@
_heap->assert_heaplock_owned_by_current_thread();
switch (_state) {
case _empty_uncommitted:
do_commit();
case _empty_committed:
- _state = _humongous_cont;
+ set_state(_humongous_cont);
return;
default:
report_illegal_transition("humongous continuation allocation");
}
}
@@ -176,11 +177,11 @@
switch (_state) {
case _empty_committed:
case _regular:
case _humongous_start:
case _humongous_cont:
- _state = _humongous_cont;
+ set_state(_humongous_cont);
return;
default:
report_illegal_transition("humongous continuation bypass");
}
}
@@ -188,18 +189,18 @@
void ShenandoahHeapRegion::make_pinned() {
_heap->assert_heaplock_owned_by_current_thread();
switch (_state) {
case _regular:
assert (_critical_pins == 0, "sanity");
- _state = _pinned;
+ set_state(_pinned);
case _pinned_cset:
case _pinned:
_critical_pins++;
return;
case _humongous_start:
assert (_critical_pins == 0, "sanity");
- _state = _pinned_humongous_start;
+ 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,11 +218,11 @@
switch (_state) {
case _pinned:
assert (_critical_pins > 0, "sanity");
_critical_pins--;
if (_critical_pins == 0) {
- _state = _regular;
+ set_state(_regular);
}
return;
case _regular:
case _humongous_start:
assert (_critical_pins == 0, "sanity");
@@ -229,18 +230,18 @@
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;
+ set_state(_cset);
}
return;
case _pinned_humongous_start:
assert (_critical_pins > 0, "sanity");
_critical_pins--;
if (_critical_pins == 0) {
- _state = _humongous_start;
+ set_state(_humongous_start);
}
return;
default:
report_illegal_transition("unpinning");
}
@@ -248,11 +249,11 @@
void ShenandoahHeapRegion::make_cset() {
_heap->assert_heaplock_owned_by_current_thread();
switch (_state) {
case _regular:
- _state = _cset;
+ set_state(_cset);
case _cset:
return;
default:
report_illegal_transition("cset");
}
@@ -266,11 +267,11 @@
case _humongous_start:
case _humongous_cont:
// Reclaiming humongous regions
case _regular:
// Immediate region reclaim
- _state = _trash;
+ set_state(_trash);
return;
default:
report_illegal_transition("trashing");
}
}
@@ -285,11 +286,11 @@
void ShenandoahHeapRegion::make_empty() {
_heap->assert_heaplock_owned_by_current_thread();
switch (_state) {
case _trash:
- _state = _empty_committed;
+ set_state(_empty_committed);
_empty_time = os::elapsedTime();
return;
default:
report_illegal_transition("emptying");
}
@@ -298,11 +299,11 @@
void ShenandoahHeapRegion::make_uncommitted() {
_heap->assert_heaplock_owned_by_current_thread();
switch (_state) {
case _empty_committed:
do_uncommit();
- _state = _empty_uncommitted;
+ set_state(_empty_uncommitted);
return;
default:
report_illegal_transition("uncommiting");
}
}
@@ -312,11 +313,11 @@
assert (_heap->is_full_gc_in_progress(), "only for full GC");
switch (_state) {
case _empty_uncommitted:
do_commit();
- _state = _empty_committed;
+ set_state(_empty_committed);
return;
default:
report_illegal_transition("commit bypass");
}
}
@@ -677,5 +678,18 @@
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 >