< prev index next >
src/share/vm/gc_implementation/g1/heapRegion.hpp
Print this page
rev 8910 : full patch for jfr
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -28,10 +28,11 @@
#include "gc_implementation/g1/g1AllocationContext.hpp"
#include "gc_implementation/g1/g1BlockOffsetTable.hpp"
#include "gc_implementation/g1/g1_specialized_oop_closures.hpp"
#include "gc_implementation/g1/heapRegionType.hpp"
#include "gc_implementation/g1/survRateGroup.hpp"
+#include "gc_implementation/g1/g1HeapRegionTraceType.hpp"
#include "gc_implementation/shared/ageTable.hpp"
#include "gc_implementation/shared/spaceDecorator.hpp"
#include "memory/space.inline.hpp"
#include "memory/watermark.hpp"
#include "utilities/macros.hpp"
@@ -209,10 +210,12 @@
// issues.)
HeapRegionRemSet* _rem_set;
G1BlockOffsetArrayContigSpace* offsets() { return &_offsets; }
+ void report_region_type_change(G1HeapRegionTraceType::Type to);
+
protected:
// The index of this region in the heap region sequence.
uint _hrm_index;
AllocationContext_t _allocation_context;
@@ -403,10 +406,11 @@
_prev_marked_bytes = _next_marked_bytes = 0;
}
const char* get_type_str() const { return _type.get_str(); }
const char* get_short_type_str() const { return _type.get_short_str(); }
+ G1HeapRegionTraceType::Type get_trace_type() { return _type.get_trace_type(); }
bool is_free() const { return _type.is_free(); }
bool is_young() const { return _type.is_young(); }
bool is_eden() const { return _type.is_eden(); }
@@ -665,17 +669,44 @@
} else {
assert( _age_index == -1, "pre-condition" );
}
}
- void set_free() { _type.set_free(); }
+ void set_free() {
+ if (EnableJFR) {
+ report_region_type_change(G1HeapRegionTraceType::Free);
+ }
+ _type.set_free();
+ }
- void set_eden() { _type.set_eden(); }
- void set_eden_pre_gc() { _type.set_eden_pre_gc(); }
- void set_survivor() { _type.set_survivor(); }
+ void set_eden() {
+ if (EnableJFR) {
+ report_region_type_change(G1HeapRegionTraceType::Eden);
+ }
+ _type.set_eden();
+ }
- void set_old() { _type.set_old(); }
+ void set_old() {
+ if (EnableJFR) {
+ report_region_type_change(G1HeapRegionTraceType::Old);
+ }
+ _type.set_old();
+ }
+
+ void set_eden_pre_gc() {
+ if (EnableJFR) {
+ report_region_type_change(G1HeapRegionTraceType::Eden);
+ }
+ _type.set_eden_pre_gc();
+ }
+
+ void set_survivor() {
+ if (EnableJFR) {
+ report_region_type_change(G1HeapRegionTraceType::Survivor);
+ }
+ _type.set_survivor();
+ }
// Determine if an object has been allocated since the last
// mark performed by the collector. This returns true iff the object
// is within the unmarked area of the region.
bool obj_allocated_since_prev_marking(oop obj) const {
< prev index next >