8209802: Garbage collectors should register JFR types themselves to avoid build errors
Reviewed-by: kbarrett, tschatzl
This commit is contained in:
parent
bb63558420
commit
f7d0ece0a1
@ -1567,6 +1567,7 @@ G1CollectedHeap::G1CollectedHeap() :
|
|||||||
|
|
||||||
// Initialize the G1EvacuationFailureALot counters and flags.
|
// Initialize the G1EvacuationFailureALot counters and flags.
|
||||||
NOT_PRODUCT(reset_evacuation_should_fail();)
|
NOT_PRODUCT(reset_evacuation_should_fail();)
|
||||||
|
_gc_tracer_stw->initialize();
|
||||||
|
|
||||||
guarantee(_task_queues != NULL, "task_queues allocation failure.");
|
guarantee(_task_queues != NULL, "task_queues allocation failure.");
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "gc/g1/heapRegion.hpp"
|
#include "gc/g1/heapRegion.hpp"
|
||||||
#include "g1HeapRegionEventSender.hpp"
|
#include "g1HeapRegionEventSender.hpp"
|
||||||
#include "jfr/jfrEvents.hpp"
|
#include "jfr/jfrEvents.hpp"
|
||||||
|
#include "runtime/vmThread.hpp"
|
||||||
|
|
||||||
class DumpEventInfoClosure : public HeapRegionClosure {
|
class DumpEventInfoClosure : public HeapRegionClosure {
|
||||||
public:
|
public:
|
||||||
@ -41,9 +42,17 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class VM_G1SendHeapRegionInfoEvents : public VM_Operation {
|
||||||
void G1HeapRegionEventSender::send_events() {
|
virtual void doit() {
|
||||||
DumpEventInfoClosure c;
|
DumpEventInfoClosure c;
|
||||||
|
|
||||||
G1CollectedHeap::heap()->heap_region_iterate(&c);
|
G1CollectedHeap::heap()->heap_region_iterate(&c);
|
||||||
}
|
}
|
||||||
|
virtual VMOp_Type type() const { return VMOp_HeapIterateOperation; }
|
||||||
|
};
|
||||||
|
|
||||||
|
void G1HeapRegionEventSender::send_events() {
|
||||||
|
if (UseG1GC) {
|
||||||
|
VM_G1SendHeapRegionInfoEvents op;
|
||||||
|
VMThread::execute(&op);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -24,10 +24,53 @@
|
|||||||
|
|
||||||
#include "precompiled.hpp"
|
#include "precompiled.hpp"
|
||||||
#include "gc/g1/g1EvacuationInfo.hpp"
|
#include "gc/g1/g1EvacuationInfo.hpp"
|
||||||
|
#include "gc/g1/g1HeapRegionTraceType.hpp"
|
||||||
#include "gc/g1/g1Trace.hpp"
|
#include "gc/g1/g1Trace.hpp"
|
||||||
#include "gc/g1/g1YCTypes.hpp"
|
#include "gc/g1/g1YCTypes.hpp"
|
||||||
#include "gc/shared/gcHeapSummary.hpp"
|
#include "gc/shared/gcHeapSummary.hpp"
|
||||||
#include "jfr/jfrEvents.hpp"
|
#include "jfr/jfrEvents.hpp"
|
||||||
|
#if INCLUDE_JFR
|
||||||
|
#include "jfr/metadata/jfrSerializer.hpp"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if INCLUDE_JFR
|
||||||
|
class G1HeapRegionTypeConstant : public JfrSerializer {
|
||||||
|
public:
|
||||||
|
void serialize(JfrCheckpointWriter& writer) {
|
||||||
|
static const u4 nof_entries = G1HeapRegionTraceType::G1HeapRegionTypeEndSentinel;
|
||||||
|
writer.write_count(nof_entries);
|
||||||
|
for (u4 i = 0; i < nof_entries; ++i) {
|
||||||
|
writer.write_key(i);
|
||||||
|
writer.write(G1HeapRegionTraceType::to_string((G1HeapRegionTraceType::Type)i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class G1YCTypeConstant : public JfrSerializer {
|
||||||
|
public:
|
||||||
|
void serialize(JfrCheckpointWriter& writer) {
|
||||||
|
static const u4 nof_entries = G1YCTypeEndSentinel;
|
||||||
|
writer.write_count(nof_entries);
|
||||||
|
for (u4 i = 0; i < nof_entries; ++i) {
|
||||||
|
writer.write_key(i);
|
||||||
|
writer.write(G1YCTypeHelper::to_string((G1YCType)i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static void register_jfr_type_constants() {
|
||||||
|
JfrSerializer::register_serializer(TYPE_G1HEAPREGIONTYPE, false, true,
|
||||||
|
new G1HeapRegionTypeConstant());
|
||||||
|
|
||||||
|
JfrSerializer::register_serializer(TYPE_G1YCTYPE, false, true,
|
||||||
|
new G1YCTypeConstant());
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void G1NewTracer::initialize() {
|
||||||
|
JFR_ONLY(register_jfr_type_constants());
|
||||||
|
}
|
||||||
|
|
||||||
void G1NewTracer::report_yc_type(G1YCType type) {
|
void G1NewTracer::report_yc_type(G1YCType type) {
|
||||||
_g1_young_gc_info.set_type(type);
|
_g1_young_gc_info.set_type(type);
|
||||||
|
@ -48,6 +48,7 @@ class G1NewTracer : public YoungGCTracer {
|
|||||||
public:
|
public:
|
||||||
G1NewTracer() : YoungGCTracer(G1New) {}
|
G1NewTracer() : YoungGCTracer(G1New) {}
|
||||||
|
|
||||||
|
void initialize();
|
||||||
void report_yc_type(G1YCType type);
|
void report_yc_type(G1YCType type);
|
||||||
void report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions);
|
void report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions);
|
||||||
void report_evacuation_info(G1EvacuationInfo* info);
|
void report_evacuation_info(G1EvacuationInfo* info);
|
||||||
|
@ -32,7 +32,6 @@
|
|||||||
#include "classfile/systemDictionary.hpp"
|
#include "classfile/systemDictionary.hpp"
|
||||||
#include "code/codeCache.hpp"
|
#include "code/codeCache.hpp"
|
||||||
#include "compiler/compileBroker.hpp"
|
#include "compiler/compileBroker.hpp"
|
||||||
#include "gc/g1/g1HeapRegionEventSender.hpp"
|
|
||||||
#include "gc/shared/gcConfiguration.hpp"
|
#include "gc/shared/gcConfiguration.hpp"
|
||||||
#include "gc/shared/gcTrace.hpp"
|
#include "gc/shared/gcTrace.hpp"
|
||||||
#include "gc/shared/gcVMOperations.hpp"
|
#include "gc/shared/gcVMOperations.hpp"
|
||||||
@ -65,6 +64,9 @@
|
|||||||
#include "services/threadService.hpp"
|
#include "services/threadService.hpp"
|
||||||
#include "utilities/exceptions.hpp"
|
#include "utilities/exceptions.hpp"
|
||||||
#include "utilities/globalDefinitions.hpp"
|
#include "utilities/globalDefinitions.hpp"
|
||||||
|
#if INCLUDE_G1GC
|
||||||
|
#include "gc/g1/g1HeapRegionEventSender.hpp"
|
||||||
|
#endif
|
||||||
#if INCLUDE_SHENANDOAHGC
|
#if INCLUDE_SHENANDOAHGC
|
||||||
#include "gc/shenandoah/shenandoahJfrSupport.hpp"
|
#include "gc/shenandoah/shenandoahJfrSupport.hpp"
|
||||||
#endif
|
#endif
|
||||||
@ -323,18 +325,8 @@ TRACE_REQUEST_FUNC(ObjectCount) {
|
|||||||
VMThread::execute(&op);
|
VMThread::execute(&op);
|
||||||
}
|
}
|
||||||
|
|
||||||
class VM_G1SendHeapRegionInfoEvents : public VM_Operation {
|
|
||||||
virtual void doit() {
|
|
||||||
G1HeapRegionEventSender::send_events();
|
|
||||||
}
|
|
||||||
virtual VMOp_Type type() const { return VMOp_HeapIterateOperation; }
|
|
||||||
};
|
|
||||||
|
|
||||||
TRACE_REQUEST_FUNC(G1HeapRegionInformation) {
|
TRACE_REQUEST_FUNC(G1HeapRegionInformation) {
|
||||||
if (UseG1GC) {
|
G1GC_ONLY(G1HeapRegionEventSender::send_events());
|
||||||
VM_G1SendHeapRegionInfoEvents op;
|
|
||||||
VMThread::execute(&op);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Java Mission Control (JMC) uses (Java) Long.MIN_VALUE to describe that a
|
// Java Mission Control (JMC) uses (Java) Long.MIN_VALUE to describe that a
|
||||||
|
@ -56,10 +56,6 @@
|
|||||||
#include "opto/compile.hpp"
|
#include "opto/compile.hpp"
|
||||||
#include "opto/node.hpp"
|
#include "opto/node.hpp"
|
||||||
#endif
|
#endif
|
||||||
#if INCLUDE_G1GC
|
|
||||||
#include "gc/g1/g1HeapRegionTraceType.hpp"
|
|
||||||
#include "gc/g1/g1YCTypes.hpp"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Requires a ResourceMark for get_thread_name/as_utf8
|
// Requires a ResourceMark for get_thread_name/as_utf8
|
||||||
class JfrCheckpointThreadClosure : public ThreadClosure {
|
class JfrCheckpointThreadClosure : public ThreadClosure {
|
||||||
@ -188,15 +184,6 @@ void GCWhenConstant::serialize(JfrCheckpointWriter& writer) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void G1HeapRegionTypeConstant::serialize(JfrCheckpointWriter& writer) {
|
|
||||||
static const u4 nof_entries = G1HeapRegionTraceType::G1HeapRegionTypeEndSentinel;
|
|
||||||
writer.write_count(nof_entries);
|
|
||||||
for (u4 i = 0; i < nof_entries; ++i) {
|
|
||||||
writer.write_key(i);
|
|
||||||
writer.write(G1HeapRegionTraceType::to_string((G1HeapRegionTraceType::Type)i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void GCThresholdUpdaterConstant::serialize(JfrCheckpointWriter& writer) {
|
void GCThresholdUpdaterConstant::serialize(JfrCheckpointWriter& writer) {
|
||||||
static const u4 nof_entries = MetaspaceGCThresholdUpdater::Last;
|
static const u4 nof_entries = MetaspaceGCThresholdUpdater::Last;
|
||||||
writer.write_count(nof_entries);
|
writer.write_count(nof_entries);
|
||||||
@ -224,17 +211,6 @@ void MetaspaceObjectTypeConstant::serialize(JfrCheckpointWriter& writer) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void G1YCTypeConstant::serialize(JfrCheckpointWriter& writer) {
|
|
||||||
#if INCLUDE_G1GC
|
|
||||||
static const u4 nof_entries = G1YCTypeEndSentinel;
|
|
||||||
writer.write_count(nof_entries);
|
|
||||||
for (u4 i = 0; i < nof_entries; ++i) {
|
|
||||||
writer.write_key(i);
|
|
||||||
writer.write(G1YCTypeHelper::to_string((G1YCType)i));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char* reference_type_to_string(ReferenceType rt) {
|
static const char* reference_type_to_string(ReferenceType rt) {
|
||||||
switch (rt) {
|
switch (rt) {
|
||||||
case REF_NONE: return "None reference";
|
case REF_NONE: return "None reference";
|
||||||
|
@ -67,11 +67,6 @@ class GCWhenConstant : public JfrSerializer {
|
|||||||
void serialize(JfrCheckpointWriter& writer);
|
void serialize(JfrCheckpointWriter& writer);
|
||||||
};
|
};
|
||||||
|
|
||||||
class G1HeapRegionTypeConstant : public JfrSerializer {
|
|
||||||
public:
|
|
||||||
void serialize(JfrCheckpointWriter& writer);
|
|
||||||
};
|
|
||||||
|
|
||||||
class GCThresholdUpdaterConstant : public JfrSerializer {
|
class GCThresholdUpdaterConstant : public JfrSerializer {
|
||||||
public:
|
public:
|
||||||
void serialize(JfrCheckpointWriter& writer);
|
void serialize(JfrCheckpointWriter& writer);
|
||||||
@ -87,11 +82,6 @@ class MetaspaceObjectTypeConstant : public JfrSerializer {
|
|||||||
void serialize(JfrCheckpointWriter& writer);
|
void serialize(JfrCheckpointWriter& writer);
|
||||||
};
|
};
|
||||||
|
|
||||||
class G1YCTypeConstant : public JfrSerializer {
|
|
||||||
public:
|
|
||||||
void serialize(JfrCheckpointWriter& writer);
|
|
||||||
};
|
|
||||||
|
|
||||||
class ReferenceTypeConstant : public JfrSerializer {
|
class ReferenceTypeConstant : public JfrSerializer {
|
||||||
public:
|
public:
|
||||||
void serialize(JfrCheckpointWriter& writer);
|
void serialize(JfrCheckpointWriter& writer);
|
||||||
|
@ -226,11 +226,9 @@ bool JfrTypeManager::initialize() {
|
|||||||
register_type(TYPE_GCCAUSE, false, true, new GCCauseConstant());
|
register_type(TYPE_GCCAUSE, false, true, new GCCauseConstant());
|
||||||
register_type(TYPE_GCNAME, false, true, new GCNameConstant());
|
register_type(TYPE_GCNAME, false, true, new GCNameConstant());
|
||||||
register_type(TYPE_GCWHEN, false, true, new GCWhenConstant());
|
register_type(TYPE_GCWHEN, false, true, new GCWhenConstant());
|
||||||
register_type(TYPE_G1HEAPREGIONTYPE, false, true, new G1HeapRegionTypeConstant());
|
|
||||||
register_type(TYPE_GCTHRESHOLDUPDATER, false, true, new GCThresholdUpdaterConstant());
|
register_type(TYPE_GCTHRESHOLDUPDATER, false, true, new GCThresholdUpdaterConstant());
|
||||||
register_type(TYPE_METADATATYPE, false, true, new MetadataTypeConstant());
|
register_type(TYPE_METADATATYPE, false, true, new MetadataTypeConstant());
|
||||||
register_type(TYPE_METASPACEOBJECTTYPE, false, true, new MetaspaceObjectTypeConstant());
|
register_type(TYPE_METASPACEOBJECTTYPE, false, true, new MetaspaceObjectTypeConstant());
|
||||||
register_type(TYPE_G1YCTYPE, false, true, new G1YCTypeConstant());
|
|
||||||
register_type(TYPE_REFERENCETYPE, false, true, new ReferenceTypeConstant());
|
register_type(TYPE_REFERENCETYPE, false, true, new ReferenceTypeConstant());
|
||||||
register_type(TYPE_NARROWOOPMODE, false, true, new NarrowOopModeConstant());
|
register_type(TYPE_NARROWOOPMODE, false, true, new NarrowOopModeConstant());
|
||||||
register_type(TYPE_COMPILERPHASETYPE, false, true, new CompilerPhaseTypeConstant());
|
register_type(TYPE_COMPILERPHASETYPE, false, true, new CompilerPhaseTypeConstant());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user