Introduction
The following are the events for OpenJDK 15 (jdk-15.0.10+5, permalink, 03-June-2026). The events are collected from the event configuration and the source code. Visit the jfreventcollector repository for more information. This is also where you can contribute additional event descriptions, if you don't want to contribute them directly to the OpenJDK. The site generator lives on GitHub, too.
This page is maintained by Johannes Bechberger of the SapMachine team at SAP and contributors.
Some events have fake end times/durations; these are hidden in the event description here.
Flight Recorder
DumpReason
default profiling startTime 11 17 21 25 26 27
Category: Flight Recorder
Who requested the recording and why
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/recorder/repository/jfrEmergencyDump.cpp:
static void post_events(bool exception_handler, Thread* thread) {
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(thread));
if (exception_handler) {
EventShutdown e;
e.set_reason("VM Error");
e.commit();
} else {
// OOM
LeakProfiler::emit_events(max_jlong, false, false);
}
EventDumpReason event;
event.set_reason(exception_handler ? "Crash" : "Out of Memory");
event.set_recordingId(-1);
event.commit();
}
void JfrEmergencyDump::on_vm_shutdown(bool exception_handler) {
if (!guard_reentrancy()) {
return;
}
Thread* thread = Thread::current_or_null_safe();
if (thread == NULL) {
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| reason | string | Reason Reason for writing recording data to disk |
| recordingId | int | Recording Id Id of the recording that triggered the dump, or -1 if it was not related to a recording |
DataLoss
default profiling startTime 11 17 21 25 26 27
Category: Flight Recorder
Data could not be copied out from a buffer, typically because of contention
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/recorder/storage/jfrStorage.cpp:
assert(!buffer->transient(), "invariant");
assert(buffer->lease(), "invariant");
storage_instance.control().increment_leased();
return buffer;
}
}
return acquire_transient(size, thread);
}
static void write_data_loss_event(JfrBuffer* buffer, u8 unflushed_size, Thread* thread) {
assert(buffer != NULL, "invariant");
assert(buffer->empty(), "invariant");
const u8 total_data_loss = thread->jfr_thread_local()->add_data_lost(unflushed_size);
if (EventDataLoss::is_enabled()) {
JfrNativeEventWriter writer(buffer, thread);
writer.begin_event_write(false);
writer.write<u8>(EventDataLoss::eventId);
writer.write(JfrTicks::now());
writer.write(unflushed_size);
writer.write(total_data_loss);
writer.end_event_write(false);
}
}
static void write_data_loss(BufferPtr buffer, Thread* thread) {
assert(buffer != NULL, "invariant");
const size_t unflushed_size = buffer->unflushed_size();
buffer->reinitialize();
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| amount | ulong: bytes | Amount Amount lost data |
| total | ulong: bytes | Total Total lost amount for thread |
Flush
experimental startTime duration 14 17 21 25 26 27
Category: Flight Recorder
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/recorder/service/jfrRecorderService.cpp:
template <typename Functor>
static u4 invoke(Functor& f) {
f.process();
return f.elements();
}
template <typename Functor>
static u4 invoke_with_flush_event(Functor& f) {
const u4 elements = invoke(f);
EventFlush e(UNTIMED);
e.set_starttime(f.start_time());
e.set_endtime(f.end_time());
e.set_flushId(flushpoint_id);
e.set_elements(f.elements());
e.set_size(f.size());
e.commit();
return elements;
}
class StackTraceRepository : public StackObj {
private:
| Configuration | enabled | threshold |
|---|---|---|
| default | false | 0 ns |
| profiling | false | 0 ns |
| Field | Type | Description |
|---|---|---|
| flushId | ulong | Flush Identifier |
| elements | ulong | Elements Written |
| size | ulong: bytes | Size Written |
Examples 3
ActiveRecording
default profiling startTime duration stackTrace 11 17 21 25 26 27
Source src/jdk.jfr/share/classes/jdk/jfr/events/ActiveRecordingEvent.java
Category: Flight Recorder
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/ActiveRecordingEvent.java:
@Name(Type.EVENT_NAME_PREFIX + "ActiveRecording")
@Label("Flight Recording")
@Category("Flight Recorder")
@StackTrace(false)
public final class ActiveRecordingEvent extends AbstractJDKEvent {
public static final ThreadLocal<ActiveRecordingEvent> EVENT = new ThreadLocal<ActiveRecordingEvent>() {
@Override
protected ActiveRecordingEvent initialValue() {
return new ActiveRecordingEvent();
}
};
@Label("Id")
public long id;
@Label("Name")
public String name;
@Label("Destination")
public String destination;
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class,
jdk.internal.event.ProcessStartEvent.class,
DirectBufferStatisticsEvent.class
};
// This is a list of the classes with instrumentation code that should be applied.
private static final Class<?>[] instrumentationClasses = new Class<?>[] {
FileInputStreamInstrumentor.class,
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java:
private RepositoryChunk currentChunk;
private boolean inShutdown;
public PlatformRecorder() throws Exception {
repository = Repository.getRepository();
Logger.log(JFR_SYSTEM, INFO, "Initialized disk repository");
repository.ensureRepository();
jvm.createNativeJFR();
Logger.log(JFR_SYSTEM, INFO, "Created native");
JDKEvents.initialize();
Logger.log(JFR_SYSTEM, INFO, "Registered JDK events");
JDKEvents.addInstrumentation();
startDiskMonitor();
activeRecordingEvent = EventType.getEventType(ActiveRecordingEvent.class);
activeSettingEvent = EventType.getEventType(ActiveSettingEvent.class);
shutdownHook = SecuritySupport.createThreadWitNoPermissions("JFR Shutdown Hook", new ShutdownHook(this));
SecuritySupport.setUncaughtExceptionHandler(shutdownHook, new ShutdownHook.ExceptionHandler());
SecuritySupport.registerShutdownHook(shutdownHook);
}
private static Timer createTimer() {
try {
List<Timer> result = new CopyOnWriteArrayList<>();
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java:
private void finishChunk(RepositoryChunk chunk, Instant time, PlatformRecording ignoreMe) {
chunk.finish(time);
for (PlatformRecording r : getRecordings()) {
if (r != ignoreMe && r.getState() == RecordingState.RUNNING) {
r.appendChunk(chunk);
}
}
FilePurger.purge();
}
private void writeMetaEvents() {
if (activeRecordingEvent.isEnabled()) {
ActiveRecordingEvent event = ActiveRecordingEvent.EVENT.get();
for (PlatformRecording r : getRecordings()) {
if (r.getState() == RecordingState.RUNNING && r.shouldWriteMetadataEvent()) {
event.id = r.getId();
event.name = r.getName();
WriteableUserPath p = r.getDestination();
event.destination = p == null ? null : p.getRealPathText();
Duration d = r.getDuration();
event.recordingDuration = d == null ? Long.MAX_VALUE : d.toMillis();
Duration age = r.getMaxAge();
event.maxAge = age == null ? Long.MAX_VALUE : age.toMillis();
Long size = r.getMaxSize();
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| id | long | Id |
| name | string | Name |
| destination | string | Destination |
| maxAge | long: millis | Max Age |
| flushInterval | long: millis 14+ | Flush Interval |
| maxSize | long: bytes | Max Size |
| recordingStart | long: epochmillis | Start Time |
| recordingDuration | long: millis | Recording Duration |
Examples 3
| destination | string | /home/runner/work/jfrevents/jfrevents/jfr/sample_linux_UseG1GC.jfr
|
|---|---|---|
| flushInterval | long: millis | 1000
|
| id | long | 1
|
| maxAge | long: millis | 9223372036854775807
|
| maxSize | long: bytes | 262144000
|
| name | string | 1
|
| recordingDuration | long: millis | 9223372036854775807
|
| recordingStart | long: epochmillis | 1780495574399
|
| startTime | long: millis | 107676135176
|
| destination | string | /home/runner/work/jfrevents/jfrevents/jfr/sample_linux_UseG1GC_events.jfr
|
|---|---|---|
| flushInterval | long: millis | 1000
|
| id | long | 1
|
| maxAge | long: millis | 9223372036854775807
|
| maxSize | long: bytes | 0
|
| name | string | 1
|
| recordingDuration | long: millis | 27000
|
| recordingStart | long: epochmillis | 1780495704241
|
| startTime | long: millis | 370445781
|
| destination | string | /home/runner/work/jfrevents/jfrevents/jfr/sample_linux_UseParallelGC.jfr
|
|---|---|---|
| flushInterval | long: millis | 1000
|
| id | long | 1
|
| maxAge | long: millis | 9223372036854775807
|
| maxSize | long: bytes | 262144000
|
| name | string | 1
|
| recordingDuration | long: millis | 9223372036854775807
|
| recordingStart | long: epochmillis | 1780495561697
|
| startTime | long: millis | 17427344452
|
ActiveSetting
default profiling startTime duration stackTrace 11 17 21 25 26 27
Source src/jdk.jfr/share/classes/jdk/jfr/events/ActiveSettingEvent.java
Category: Flight Recorder
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/ActiveSettingEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.StackTrace;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "ActiveSetting")
@Label("Recording Setting")
@Category("Flight Recorder")
@StackTrace(false)
public final class ActiveSettingEvent extends AbstractJDKEvent {
public static final ThreadLocal<ActiveSettingEvent> EVENT = new ThreadLocal<ActiveSettingEvent>() {
@Override
protected ActiveSettingEvent initialValue() {
return new ActiveSettingEvent();
}
};
@Label("Event Id")
public long id;
@Label("Setting Name")
public String name;
@Label("Setting Value")
public String value;
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class,
jdk.internal.event.ProcessStartEvent.class,
DirectBufferStatisticsEvent.class
};
// This is a list of the classes with instrumentation code that should be applied.
private static final Class<?>[] instrumentationClasses = new Class<?>[] {
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java:
private boolean inShutdown;
public PlatformRecorder() throws Exception {
repository = Repository.getRepository();
Logger.log(JFR_SYSTEM, INFO, "Initialized disk repository");
repository.ensureRepository();
jvm.createNativeJFR();
Logger.log(JFR_SYSTEM, INFO, "Created native");
JDKEvents.initialize();
Logger.log(JFR_SYSTEM, INFO, "Registered JDK events");
JDKEvents.addInstrumentation();
startDiskMonitor();
activeRecordingEvent = EventType.getEventType(ActiveRecordingEvent.class);
activeSettingEvent = EventType.getEventType(ActiveSettingEvent.class);
shutdownHook = SecuritySupport.createThreadWitNoPermissions("JFR Shutdown Hook", new ShutdownHook(this));
SecuritySupport.setUncaughtExceptionHandler(shutdownHook, new ShutdownHook.ExceptionHandler());
SecuritySupport.registerShutdownHook(shutdownHook);
}
private static Timer createTimer() {
try {
List<Timer> result = new CopyOnWriteArrayList<>();
Thread t = SecuritySupport.createThreadWitNoPermissions("Permissionless thread", ()-> {
src/jdk.jfr/share/classes/jdk/jfr/internal/EventControl.java:
void disable() {
for (NamedControl nc : namedControls) {
if (nc.control instanceof EnabledSetting) {
nc.control.setValueSafe("false");
return;
}
}
}
void writeActiveSettingEvent() {
if (!type.isRegistered()) {
return;
}
ActiveSettingEvent event = ActiveSettingEvent.EVENT.get();
for (NamedControl nc : namedControls) {
if (Utils.isSettingVisible(nc.control, type.hasEventHook())) {
String value = nc.control.getLastValue();
if (value == null) {
value = nc.control.getDefaultValue();
}
event.id = type.getId();
event.name = nc.name;
event.value = value;
event.commit();
}
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| id | long | Event Id |
| name | string | Setting Name |
| value | string | Setting Value |
Examples 3
JVM
JVMInformation
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine
Description of JVM and the Java application
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
#if INCLUDE_SHENANDOAHGC
#include "gc/shenandoah/shenandoahJfrSupport.hpp"
#endif
/**
* JfrPeriodic class
* Implementation of declarations in
* xsl generated traceRequestables.hpp
*/
#define TRACE_REQUEST_FUNC(id) void JfrPeriodicEventSet::request##id(void)
TRACE_REQUEST_FUNC(JVMInformation) {
ResourceMark rm;
EventJVMInformation event;
event.set_jvmName(VM_Version::vm_name());
event.set_jvmVersion(VM_Version::internal_vm_info_string());
event.set_javaArguments(Arguments::java_command());
event.set_jvmArguments(Arguments::jvm_args());
event.set_jvmFlags(Arguments::jvm_flags());
event.set_jvmStartTime(Management::vm_init_done_time());
event.set_pid(os::current_process_id());
event.commit();
}
TRACE_REQUEST_FUNC(OSInformation) {
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| jvmName | string | JVM Name |
| jvmVersion | string | JVM Version |
| jvmArguments | string | JVM Command Line Arguments |
| jvmFlags | string | JVM Settings File Arguments |
| javaArguments | string | Java Application Arguments |
| jvmStartTime | long: epochmillis | JVM Start Time |
| pid | long | Process Identifier |
Examples 3
| javaArguments | string | /home/runner/work/jfrevents/jfrevents/.cache/renaissance.jar -t 5 -r 1 all
|
|---|---|---|
| jvmArguments | string | -XX:StartFlightRecording=filename=/home/runner/work/jfrevents/jfrevents/jfr/sample_linux_UseParallelGC.jfr,settings=/home/runner/work/jfrevents/jfrevents/.cache/jfc.jfc -XX:+UseParallelGC
|
| jvmFlags | string | null
|
| jvmName | string | OpenJDK 64-Bit Server VM
|
| jvmStartTime | long: epochmillis | 1780495561360
|
| jvmVersion | string | OpenJDK 64-Bit Server VM (25.0.3+9-LTS) for linux-amd64 JRE (25.0.3+9-LTS), built on 2026-04-20T14:40:29Z with gcc 14.2.0
|
| pid | long | 2792
|
| startTime | long: millis | 28322455125
|
| javaArguments | string | /home/runner/work/jfrevents/jfrevents/.cache/renaissance.jar -t 5 -r 1 all
|
|---|---|---|
| jvmArguments | string | -XX:StartFlightRecording=filename=/home/runner/work/jfrevents/jfrevents/jfr/sample_linux_UseG1GC.jfr,settings=/home/runner/work/jfrevents/jfrevents/.cache/jfc.jfc -XX:+UseG1GC
|
| jvmFlags | string | null
|
| jvmName | string | OpenJDK 64-Bit Server VM
|
| jvmStartTime | long: epochmillis | 1780495574039
|
| jvmVersion | string | OpenJDK 64-Bit Server VM (25.0.3+9-LTS) for linux-amd64 JRE (25.0.3+9-LTS), built on 2026-04-20T14:40:29Z with gcc 14.2.0
|
| pid | long | 2776
|
| startTime | long: millis | 57841141927
|
| javaArguments | string | /home/runner/work/jfrevents/jfrevents/.cache/jfr_sample_app.jar
|
|---|---|---|
| jvmArguments | string | --add-exports=java.base/jdk.internal.vm.annotation=ALL-UNNAMED -Djdk.attach.allowAttachSelf=true -XX:+UnlockDiagnosticVMOptions -XX:DiagnoseSyncOnValueBasedClasses=2 -XX:NativeMemoryTracking=summary -XX:StartFlightRecording=filename=/home/runner/work/jfrevents/jfrevents/jfr/sample_linux_UseG1GC_even…
|
| jvmFlags | string | null
|
| jvmName | string | OpenJDK 64-Bit Server VM
|
| jvmStartTime | long: epochmillis | 1780495703889
|
| jvmVersion | string | OpenJDK 64-Bit Server VM (25.0.3+9-LTS) for linux-amd64 JRE (25.0.3+9-LTS), built on 2026-04-20T14:40:29Z with gcc 14.2.0
|
| pid | long | 3276
|
| startTime | long: millis | 8304151539
|
InitialSystemProperty
default profiling startTime end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine
System Property at JVM start
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
jlong max_size = conf.has_max_size_default_value() ? jmc_undefined_long : conf.max_size();
EventYoungGenerationConfiguration event;
event.set_maxSize((u8)max_size);
event.set_minSize(conf.min_size());
event.set_newRatio(conf.new_ratio());
event.commit();
}
TRACE_REQUEST_FUNC(InitialSystemProperty) {
SystemProperty* p = Arguments::system_properties();
JfrTicks time_stamp = JfrTicks::now();
while (p != NULL) {
if (!p->internal()) {
EventInitialSystemProperty event(UNTIMED);
event.set_key(p->key());
event.set_value(p->value());
event.set_endtime(time_stamp);
event.commit();
}
p = p->next();
}
}
TRACE_REQUEST_FUNC(ThreadAllocationStatistics) {
ResourceMark rm;
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| key | string | Key |
| value | string | Value |
Examples 3
JVM: Class Loading
ClassLoad
startTime duration eventThread stackTrace 11 17 21 25 26 27
Category: Java Virtual Machine / Class Loading
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/classfile/systemDictionary.hpp:
//
class BootstrapInfo;
class ClassFileStream;
class Dictionary;
class PlaceholderTable;
class LoaderConstraintTable;
template <MEMFLAGS F> class HashtableBucket;
class ResolutionErrorTable;
class SymbolPropertyTable;
class ProtectionDomainCacheTable;
class ProtectionDomainCacheEntry;
class GCTimer;
class EventClassLoad;
#define WK_KLASS_ENUM_NAME(kname) kname##_knum
// Certain classes, such as java.lang.Object and java.lang.String,
// are "well-known", in the sense that no class loader is allowed
// to provide a different definition.
//
// Each well-known class has a short klass name (like object_klass),
// and a vmSymbol name (like java_lang_Object).
//
// The order of these definitions is significant: the classes are
src/hotspot/share/classfile/systemDictionary.hpp:
static ProtectionDomainCacheTable* _pd_cache_table;
protected:
static void validate_protection_domain(InstanceKlass* klass,
Handle class_loader,
Handle protection_domain, TRAPS);
friend class VM_PopulateDumpSharedSpace;
friend class TraversePlaceholdersClosure;
static PlaceholderTable* placeholders() { return _placeholders; }
static LoaderConstraintTable* constraints() { return _loader_constraints; }
static ResolutionErrorTable* resolution_errors() { return _resolution_errors; }
static SymbolPropertyTable* invoke_method_table() { return _invoke_method_table; }
static void post_class_load_event(EventClassLoad* event, const InstanceKlass* k, const ClassLoaderData* init_cld);
// Basic loading operations
static InstanceKlass* resolve_instance_class_or_null_helper(Symbol* name,
Handle class_loader,
Handle protection_domain,
TRAPS);
static InstanceKlass* resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
static Klass* resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
static InstanceKlass* handle_parallel_super_load(Symbol* class_name, Symbol* supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS);
// Wait on SystemDictionary_lock; unlocks lockObject before
// waiting; relocks lockObject with correct recursion count
src/hotspot/share/classfile/systemDictionary.cpp:
SystemDictionary_lock->wait();
} else {
double_lock_wait(lockObject, THREAD);
}
} else {
// If not in SD and not in PH, other thread's load must have failed
super_load_in_progress = false;
}
}
}
return NULL;
}
void SystemDictionary::post_class_load_event(EventClassLoad* event, const InstanceKlass* k, const ClassLoaderData* init_cld) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_loadedClass(k);
event->set_definingClassLoader(k->class_loader_data());
event->set_initiatingClassLoader(init_cld);
event->commit();
}
// Be careful when modifying this code: once you have run
// placeholders()->find_and_add(PlaceholderTable::LOAD_INSTANCE),
// you need to find_and_remove it before returning.
// So be careful to not exit with a CHECK_ macro betweeen these calls.
//
// name must be in the form of "java/lang/Object" -- cannot be "Ljava/lang/Object;"
InstanceKlass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
Handle class_loader,
Handle protection_domain,
TRAPS) {
assert(name != NULL && !Signature::is_array(name) &&
!Signature::has_envelope(name), "invalid class name");
EventClassLoad class_load_start_event;
HandleMark hm(THREAD);
// Fix for 4474172; see evaluation for more details
class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader()));
ClassLoaderData* loader_data = register_loader(class_loader);
Dictionary* dictionary = loader_data->dictionary();
unsigned int d_hash = dictionary->compute_hash(name);
// Do lookup to see if class already exist and the protection domain
// has the right access
src/hotspot/share/classfile/systemDictionary.cpp:
// Note: this method is much like resolve_from_stream, but
// does not publish the classes via the SystemDictionary.
// Handles Lookup.defineClass hidden, unsafe_DefineAnonymousClass
// and redefineclasses. RedefinedClasses do not add to the class hierarchy.
InstanceKlass* SystemDictionary::parse_stream(Symbol* class_name,
Handle class_loader,
ClassFileStream* st,
const ClassLoadInfo& cl_info,
TRAPS) {
EventClassLoad class_load_start_event;
ClassLoaderData* loader_data;
bool is_unsafe_anon_class = cl_info.unsafe_anonymous_host() != NULL;
// - for unsafe anonymous class: create a new CLD whith a class holder that uses
// the same class loader as the unsafe_anonymous_host.
// - for hidden classes that are not strong: create a new CLD that has a class holder and
// whose loader is the Lookup class's loader.
// - for hidden class: add the class to the Lookup class's loader's CLD.
if (is_unsafe_anon_class || cl_info.is_hidden()) {
guarantee(!is_unsafe_anon_class || cl_info.unsafe_anonymous_host()->class_loader() == class_loader(),
"should be NULL or the same");
src/hotspot/share/classfile/systemDictionaryShared.cpp:
InstanceKlass* shared_nest_host = get_shared_nest_host(lambda_ik);
assert(shared_nest_host != NULL, "unexpected NULL _nest_host");
InstanceKlass* loaded_lambda =
SystemDictionary::load_shared_lambda_proxy_class(lambda_ik, class_loader, protection_domain, pkg_entry, CHECK_NULL);
// Ensures the nest host is the same as the lambda proxy's
// nest host recorded at dump time.
InstanceKlass* nest_host = caller_ik->nest_host(THREAD);
assert(nest_host == shared_nest_host, "mismatched nest host");
EventClassLoad class_load_start_event;
{
MutexLocker mu_r(THREAD, Compile_lock);
// Add to class hierarchy, initialize vtables, and do possible
// deoptimizations.
SystemDictionary::add_to_hierarchy(loaded_lambda, CHECK_NULL); // No exception, but can block
// But, do not add to dictionary.
}
loaded_lambda->link_class(CHECK_NULL);
// notify jvmti
if (JvmtiExport::should_post_class_load()) {
| Configuration | enabled | stackTrace | threshold |
|---|---|---|---|
| default | false | true | 0 ms |
| profiling | false | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| loadedClass | Class | Loaded Class |
| definingClassLoader | ClassLoader | Defining Class Loader |
| initiatingClassLoader | ClassLoader | Initiating Class Loader |
Examples 3
| definingClassLoader | ClassLoader | |
|---|---|---|
| name | string | bootstrap
|
| type | Class | null
|
| initiatingClassLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| loadedClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1544
|
| name | string | java/util/Formatter$FormatString
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 64
|
| lineNumber | int | 2795
|
| method | Method | |
| descriptor | string | (Ljava/lang/String;)Ljava/util/List;
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | parse
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/util/Formatter
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| type | FrameType | Interpreted
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 411568756
|
| definingClassLoader | ClassLoader | |
|---|---|---|
| name | string | bootstrap
|
| type | Class | null
|
| initiatingClassLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| loadedClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 0
|
| name | string | java/util/TaskQueue
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 5
|
| lineNumber | int | 96
|
| method | Method | |
| descriptor | string | (Ljava/lang/String;Z)V
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | <init>
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/util/Timer
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| type | FrameType | Interpreted
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 388476712
|
| definingClassLoader | ClassLoader | |
|---|---|---|
| name | string | bootstrap
|
| type | Class | null
|
| initiatingClassLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| loadedClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 24
|
| name | string | java/util/Formatter$FormatSpecifierParser
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 139
|
| lineNumber | int | 2810
|
| method | Method | |
| descriptor | string | (Ljava/lang/String;)Ljava/util/List;
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | parse
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/util/Formatter
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| type | FrameType | Interpreted
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 387341323
|
ClassDefine
startTime eventThread stackTrace 11 17 21 25 26 27
Category: Java Virtual Machine / Class Loading
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/classfile/systemDictionary.cpp:
// For user defined Java class loaders, check that the name returned is
// the same as that requested. This check is done for the bootstrap
// loader when parsing the class file.
if (class_name == k->name()) {
return k;
}
}
// Class is not found or has the wrong name, return NULL
return NULL;
}
}
static void post_class_define_event(InstanceKlass* k, const ClassLoaderData* def_cld) {
EventClassDefine event;
if (event.should_commit()) {
event.set_definedClass(k);
event.set_definingClassLoader(def_cld);
event.commit();
}
}
void SystemDictionary::define_instance_class(InstanceKlass* k, TRAPS) {
HandleMark hm(THREAD);
ClassLoaderData* loader_data = k->class_loader_data();
| Configuration | enabled | stackTrace |
|---|---|---|
| default | false | true |
| profiling | false | true |
| Field | Type | Description |
|---|---|---|
| definedClass | Class | Defined Class |
| definingClassLoader | ClassLoader | Defining Class Loader |
Examples 3
| definedClass | Class | |
|---|---|---|
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/time/ZonedDateTime
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/time
|
| definingClassLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 81
|
| lineNumber | int | 496
|
| method | Method | |
| descriptor | string | (Ljava/lang/String;Ljava/util/function/Function;)Ljava/lang/String;
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | getSimpleFormat
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 24
|
| name | string | jdk/internal/logger/SimpleConsoleLogger$Formatting
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/logger
|
| type | FrameType | Interpreted
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 411283974
|
| definedClass | Class | |
|---|---|---|
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 24
|
| name | string | jdk/internal/logger/SimpleConsoleLogger$Formatting
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/logger
|
| definingClassLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 3
|
| lineNumber | int | 62
|
| method | Method | |
| descriptor | string | (Ljava/util/function/Function;)Ljava/lang/String;
|
| hidden | boolean | false
|
| modifiers | int | 9
|
| name | string | getSimpleFormat
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | jdk/internal/logger/SurrogateLogger
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/logger
|
| type | FrameType | Interpreted
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 386748021
|
| definedClass | Class | |
|---|---|---|
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 0
|
| name | string | jdk/internal/loader/URLClassPath$JarLoader$1
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/loader
|
| definingClassLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 50
|
| lineNumber | int | 710
|
| method | Method | |
| descriptor | string | (Ljava/lang/String;Ljava/util/jar/JarEntry;)Ljdk/internal/loader/Resource;
|
| hidden | boolean | false
|
| modifiers | int | 0
|
| name | string | createResource
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | jdk/internal/loader/URLClassPath$JarLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/loader
|
| type | FrameType | Interpreted
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 393378867
|
ClassRedefinition
default profiling startTime 15 17 21 25 26 27
Category: Java Virtual Machine / Class Loading
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/prims/jvmtiRedefineClasses.cpp:
_timer_rsc_phase1.stop();
if (log_is_enabled(Info, redefine, class, timer)) {
_timer_rsc_phase2.start();
}
if (the_class->oop_map_cache() != NULL) {
// Flush references to any obsolete methods from the oop map cache
// so that obsolete methods are not pinned.
the_class->oop_map_cache()->flush_obsolete_entries();
}
increment_class_counter((InstanceKlass *)the_class, THREAD);
if (EventClassRedefinition::is_enabled()) {
EventClassRedefinition event;
event.set_classModificationCount(java_lang_Class::classRedefinedCount(the_class->java_mirror()));
event.set_redefinedClass(the_class);
event.set_redefinitionId(_id);
event.commit();
}
{
ResourceMark rm(THREAD);
// increment the classRedefinedCount field in the_class and in any
// direct and indirect subclasses of the_class
log_info(redefine, class, load)
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| redefinedClass | Class | Redefined Class |
| classModificationCount | int | Class Modification Count The number of times the class has changed |
| redefinitionId | ulong | Class Redefinition Id |
Examples 3
| classModificationCount | int | 2
|
|---|---|---|
| redefinedClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/util/ArrayList
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| redefinitionId | ulong | 2
|
| startTime | long: millis | 1213087022
|
| classModificationCount | int | 1
|
|---|---|---|
| redefinedClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/util/ArrayList
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| redefinitionId | ulong | 1
|
| startTime | long: millis | 1279014155
|
| classModificationCount | int | 2
|
|---|---|---|
| redefinedClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/util/ArrayList
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| redefinitionId | ulong | 2
|
| startTime | long: millis | 1459007109
|
RedefineClasses
default profiling startTime duration eventThread stackTrace 15 17 21 25 26 27
Category: Java Virtual Machine / Class Loading
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/prims/jvmtiEnv.cpp:
event.set_classCount(class_count);
event.set_redefinitionId(op.id());
event.commit();
}
return error;
} /* end RetransformClasses */
// class_count - pre-checked to be greater than or equal to 0
// class_definitions - pre-checked for NULL
jvmtiError
JvmtiEnv::RedefineClasses(jint class_count, const jvmtiClassDefinition* class_definitions) {
//TODO: add locking
EventRedefineClasses event;
VM_RedefineClasses op(class_count, class_definitions, jvmti_class_load_kind_redefine);
VMThread::execute(&op);
jvmtiError error = op.check_error();
if (error == JVMTI_ERROR_NONE) {
event.set_classCount(class_count);
event.set_redefinitionId(op.id());
event.commit();
}
return error;
} /* end RedefineClasses */
| Configuration | enabled | stackTrace | threshold |
|---|---|---|---|
| default | true | true | 0 ms |
| profiling | true | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| classCount | int | Class Count |
| redefinitionId | ulong | Class Redefinition Id |
Examples 3
| classCount | int | 1
|
|---|---|---|
| redefinitionId | ulong | 2
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | (J[Ljava/lang/instrument/ClassDefinition;)V
|
| hidden | boolean | false
|
| modifiers | int | 258
|
| name | string | redefineClasses0
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | sun/instrument/InstrumentationImpl
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.instrument
|
| name | string | java.instrument
|
| version | string | 25.0.3
|
| name | string | sun/instrument
|
| type | FrameType | Native
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 1285848137
|
| classCount | int | 1
|
|---|---|---|
| redefinitionId | ulong | 2
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | (J[Ljava/lang/instrument/ClassDefinition;)V
|
| hidden | boolean | false
|
| modifiers | int | 258
|
| name | string | redefineClasses0
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | sun/instrument/InstrumentationImpl
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.instrument
|
| name | string | java.instrument
|
| version | string | 25.0.3
|
| name | string | sun/instrument
|
| type | FrameType | Native
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 1451698506
|
| classCount | int | 1
|
|---|---|---|
| redefinitionId | ulong | 2
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | (J[Ljava/lang/instrument/ClassDefinition;)V
|
| hidden | boolean | false
|
| modifiers | int | 258
|
| name | string | redefineClasses0
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | sun/instrument/InstrumentationImpl
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.instrument
|
| name | string | java.instrument
|
| version | string | 25.0.3
|
| name | string | sun/instrument
|
| type | FrameType | Native
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 1210577187
|
RetransformClasses
default profiling startTime duration eventThread stackTrace 15 17 21 25 26 27
Category: Java Virtual Machine / Class Loading
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/prims/jvmtiEnv.cpp:
class_definitions[index].class_byte_count = (jint)reconstituter.class_file_size();
class_definitions[index].class_bytes = (unsigned char*)
reconstituter.class_file_bytes();
} else {
// it is cached, get it from the cache
class_definitions[index].class_byte_count = ik->get_cached_class_file_len();
class_definitions[index].class_bytes = ik->get_cached_class_file_bytes();
}
class_definitions[index].klass = jcls;
}
EventRetransformClasses event;
VM_RedefineClasses op(class_count, class_definitions, jvmti_class_load_kind_retransform);
VMThread::execute(&op);
jvmtiError error = op.check_error();
if (error == JVMTI_ERROR_NONE) {
event.set_classCount(class_count);
event.set_redefinitionId(op.id());
event.commit();
}
return error;
} /* end RetransformClasses */
| Configuration | enabled | stackTrace | threshold |
|---|---|---|---|
| default | true | true | 0 ms |
| profiling | true | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| classCount | int | Class Count |
| redefinitionId | ulong | Class Redefinition Id |
Examples 3
| classCount | int | 1
|
|---|---|---|
| redefinitionId | ulong | 1
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | (J[Ljava/lang/Class;)V
|
| hidden | boolean | false
|
| modifiers | int | 258
|
| name | string | retransformClasses0
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | sun/instrument/InstrumentationImpl
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.instrument
|
| name | string | java.instrument
|
| version | string | 25.0.3
|
| name | string | sun/instrument
|
| type | FrameType | Native
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 1274739605
|
| classCount | int | 1
|
|---|---|---|
| redefinitionId | ulong | 1
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | (J[Ljava/lang/Class;)V
|
| hidden | boolean | false
|
| modifiers | int | 258
|
| name | string | retransformClasses0
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | sun/instrument/InstrumentationImpl
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.instrument
|
| name | string | java.instrument
|
| version | string | 25.0.3
|
| name | string | sun/instrument
|
| type | FrameType | Native
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 1200860390
|
| classCount | int | 1
|
|---|---|---|
| redefinitionId | ulong | 1
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | (J[Ljava/lang/Class;)V
|
| hidden | boolean | false
|
| modifiers | int | 258
|
| name | string | retransformClasses0
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | sun/instrument/InstrumentationImpl
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.instrument
|
| name | string | java.instrument
|
| version | string | 25.0.3
|
| name | string | sun/instrument
|
| type | FrameType | Native
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 1439988593
|
ClassUnload
startTime eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / Class Loading
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/oops/instanceKlass.cpp:
if (Arguments::is_dumping_archive()) {
SystemDictionaryShared::remove_dumptime_info(ik);
}
if (log_is_enabled(Info, class, unload)) {
ResourceMark rm;
log_info(class, unload)("unloading class %s " INTPTR_FORMAT, ik->external_name(), p2i(ik));
}
Events::log_class_unloading(Thread::current(), ik);
#if INCLUDE_JFR
assert(ik != NULL, "invariant");
EventClassUnload event;
event.set_unloadedClass(ik);
event.set_definingClassLoader(ik->class_loader_data());
event.commit();
#endif
}
static void method_release_C_heap_structures(Method* m) {
m->release_C_heap_structures();
}
void InstanceKlass::release_C_heap_structures() {
| Configuration | enabled |
|---|---|
| default | false |
| profiling | false |
| Field | Type | Description |
|---|---|---|
| unloadedClass | Class | Unloaded Class |
| definingClassLoader | ClassLoader | Defining Class Loader |
Examples 3
| definingClassLoader | ClassLoader | null
|
|---|---|---|
| startTime | long: millis | 4623940426
|
| unloadedClass | Class | |
| classLoader | ClassLoader | null
|
| hidden | boolean | true
|
| modifiers | int | 16
|
| name | string | java.lang.invoke.LambdaForm$DMH/0x000000002429c800
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/lang/invoke
|
| definingClassLoader | ClassLoader | |
|---|---|---|
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | app
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/loader
|
| hidden | boolean | false
|
| modifiers | int | 0
|
| name | string | jfr_sample/Main$2
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | app
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/loader
|
| location | string | null
|
| name | string | null
|
| version | string | null
|
| name | string | jfr_sample
|
| startTime | long: millis | 1879511446
|
| unloadedClass | Class | |
| classLoader | ClassLoader | |
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | app
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/loader
|
| hidden | boolean | false
|
| modifiers | int | 0
|
| name | string | jfr_sample/Main$2
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | app
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/loader
|
| location | string | null
|
| name | string | null
|
| version | string | null
|
| name | string | jfr_sample
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | jfr_sample/Unloadable366294075247
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | app
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/loader
|
| hidden | boolean | false
|
| modifiers | int | 0
|
| name | string | jfr_sample/Main$2
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | app
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/loader
|
| location | string | null
|
| name | string | null
|
| version | string | null
|
| name | string | jfr_sample
|
| location | string | null
|
| name | string | null
|
| version | string | null
|
| name | string | jfr_sample
|
| definingClassLoader | ClassLoader | |
|---|---|---|
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| startTime | long: millis | 3941800152
|
| unloadedClass | Class | |
| classLoader | ClassLoader | |
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | scala/Tuple2$mcIZ$sp
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| location | string | null
|
| name | string | null
|
| version | string | null
|
| name | string | scala
|
JVM: Code Cache
CodeCacheFull
default profiling startTime eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / Code Cache
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/code/codeCache.cpp:
ttyLocker ttyl;
tty->print("%s", s.as_string());
}
if (heap->full_count() == 0) {
if (PrintCodeHeapAnalytics) {
CompileBroker::print_heapinfo(tty, "all", 4096); // details, may be a lot!
}
}
}
heap->report_full();
EventCodeCacheFull event;
if (event.should_commit()) {
event.set_codeBlobType((u1)code_blob_type);
event.set_startAddress((u8)heap->low_boundary());
event.set_commitedTopAddress((u8)heap->high());
event.set_reservedTopAddress((u8)heap->high_boundary());
event.set_entryCount(heap->blob_count());
event.set_methodCount(heap->nmethod_count());
event.set_adaptorCount(heap->adapter_count());
event.set_unallocatedCapacity(heap->unallocated_capacity());
event.set_fullCount(heap->full_count());
event.commit();
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| codeBlobType | CodeBlobType | Code Heap |
| startAddress | ulong: address | Start Address |
| commitedTopAddress | ulong: address | Commited Top |
| reservedTopAddress | ulong: address | Reserved Top |
| entryCount | int | Entries |
| methodCount | int | Methods |
| adaptorCount | int | Adaptors |
| unallocatedCapacity | ulong: bytes | Unallocated |
| fullCount | int | Full Count |
CodeCacheStatistics
default profiling startTime every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / Code Cache
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(CompilerConfiguration) {
EventCompilerConfiguration event;
event.set_threadCount(CICompilerCount);
event.set_tieredCompilation(TieredCompilation);
event.commit();
}
TRACE_REQUEST_FUNC(CodeCacheStatistics) {
// Emit stats for all available code heaps
for (int bt = 0; bt < CodeBlobType::NumTypes; ++bt) {
if (CodeCache::heap_available(bt)) {
EventCodeCacheStatistics event;
event.set_codeBlobType((u1)bt);
event.set_startAddress((u8)CodeCache::low_bound(bt));
event.set_reservedTopAddress((u8)CodeCache::high_bound(bt));
event.set_entryCount(CodeCache::blob_count(bt));
event.set_methodCount(CodeCache::nmethod_count(bt));
event.set_adaptorCount(CodeCache::adapter_count(bt));
event.set_unallocatedCapacity(CodeCache::unallocated_capacity(bt));
event.set_fullCount(CodeCache::get_codemem_full_count(bt));
event.commit();
}
}
| Configuration | enabled | period |
|---|---|---|
| default | true | everyChunk |
| profiling | true | everyChunk |
| Field | Type | Description |
|---|---|---|
| codeBlobType | CodeBlobType | Code Heap |
| startAddress | ulong: address | Start Address |
| reservedTopAddress | ulong: address | Reserved Top |
| entryCount | int | Entries |
| methodCount | int | Methods |
| adaptorCount | int | Adaptors |
| unallocatedCapacity | ulong: bytes | Unallocated |
| fullCount | int | Full Count |
Examples 3
| adaptorCount | int | 0
|
|---|---|---|
| codeBlobType | CodeBlobType | CodeHeap 'profiled nmethods'
|
| entryCount | int | 7691
|
| fullCount | int | 0
|
| methodCount | int | 7691
|
| reservedTopAddress | ulong: address | 140680974303232
|
| startAddress | ulong: address | 140680850571264
|
| startTime | long: millis | 63705129953
|
| unallocatedCapacity | ulong: bytes | 107774848
|
| adaptorCount | int | 0
|
|---|---|---|
| codeBlobType | CodeBlobType | CodeHeap 'non-profiled nmethods'
|
| entryCount | int | 899
|
| fullCount | int | 0
|
| methodCount | int | 899
|
| reservedTopAddress | ulong: address | 140142421475328
|
| startAddress | ulong: address | 140142297743360
|
| startTime | long: millis | 8304305497
|
| unallocatedCapacity | ulong: bytes | 122841856
|
| adaptorCount | int | 0
|
|---|---|---|
| codeBlobType | CodeBlobType | CodeHeap 'non-profiled nmethods'
|
| entryCount | int | 3820
|
| fullCount | int | 0
|
| methodCount | int | 3820
|
| reservedTopAddress | ulong: address | 140405286895616
|
| startAddress | ulong: address | 140405163163648
|
| startTime | long: millis | 106437296791
|
| unallocatedCapacity | ulong: bytes | 118959872
|
CodeCacheConfiguration
default profiling startTime end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / Code Cache
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_startAddress((u8)CodeCache::low_bound(bt));
event.set_reservedTopAddress((u8)CodeCache::high_bound(bt));
event.set_entryCount(CodeCache::blob_count(bt));
event.set_methodCount(CodeCache::nmethod_count(bt));
event.set_adaptorCount(CodeCache::adapter_count(bt));
event.set_unallocatedCapacity(CodeCache::unallocated_capacity(bt));
event.set_fullCount(CodeCache::get_codemem_full_count(bt));
event.commit();
}
}
}
TRACE_REQUEST_FUNC(CodeCacheConfiguration) {
EventCodeCacheConfiguration event;
event.set_initialSize(InitialCodeCacheSize);
event.set_reservedSize(ReservedCodeCacheSize);
event.set_nonNMethodSize(NonNMethodCodeHeapSize);
event.set_profiledSize(ProfiledCodeHeapSize);
event.set_nonProfiledSize(NonProfiledCodeHeapSize);
event.set_expansionSize(CodeCacheExpansionSize);
event.set_minBlockLength(CodeCacheMinBlockLength);
event.set_startAddress((u8)CodeCache::low_bound());
event.set_reservedTopAddress((u8)CodeCache::high_bound());
event.commit();
}
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| initialSize | ulong: bytes | Initial Size |
| reservedSize | ulong: bytes | Reserved Size |
| nonNMethodSize | ulong: bytes | Non-nmethod Size |
| profiledSize | ulong: bytes | Profiled Size |
| nonProfiledSize | ulong: bytes | Non-profiled Size |
| expansionSize | ulong: bytes | Expansion size |
| minBlockLength | ulong: bytes | Minimum Block Length |
| startAddress | ulong: address | Start Address |
| reservedTopAddress | ulong: address | Reserved Top |
Examples 3
| expansionSize | ulong: bytes | 65536
|
|---|---|---|
| initialSize | ulong: bytes | 2555904
|
| minBlockLength | ulong: bytes | 6
|
| nonNMethodSize | ulong: bytes | 6291456
|
| nonProfiledSize | ulong: bytes | 123731968
|
| profiledSize | ulong: bytes | 123731968
|
| reservedSize | ulong: bytes | 253755392
|
| reservedTopAddress | ulong: address | 140142421475328
|
| startAddress | ulong: address | 140142167719936
|
| startTime | long: millis | 25067038122
|
| expansionSize | ulong: bytes | 65536
|
|---|---|---|
| initialSize | ulong: bytes | 2555904
|
| minBlockLength | ulong: bytes | 6
|
| nonNMethodSize | ulong: bytes | 6291456
|
| nonProfiledSize | ulong: bytes | 123731968
|
| profiledSize | ulong: bytes | 123731968
|
| reservedSize | ulong: bytes | 253755392
|
| reservedTopAddress | ulong: address | 140681104326656
|
| startAddress | ulong: address | 140680850571264
|
| startTime | long: millis | 87038472697
|
| expansionSize | ulong: bytes | 65536
|
|---|---|---|
| initialSize | ulong: bytes | 2555904
|
| minBlockLength | ulong: bytes | 6
|
| nonNMethodSize | ulong: bytes | 6291456
|
| nonProfiledSize | ulong: bytes | 123731968
|
| profiledSize | ulong: bytes | 123731968
|
| reservedSize | ulong: bytes | 253755392
|
| reservedTopAddress | ulong: address | 140405286895616
|
| startAddress | ulong: address | 140405033140224
|
| startTime | long: millis | 66638320736
|
JVM: Code Sweeper
SweepCodeCache
default profiling startTime duration eventThread 11 17 until JDK 20
Category: Java Virtual Machine / Code Sweeper
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/sweeper.cpp:
sweep_code_cache();
// We are done with sweeping the code cache once.
_total_nof_code_cache_sweeps++;
if (_force_sweep) {
// Notify requester that forced sweep finished
MutexLocker mu(CodeSweeper_lock, Mutex::_no_safepoint_check_flag);
_force_sweep = false;
CodeSweeper_lock->notify();
}
}
static void post_sweep_event(EventSweepCodeCache* event,
const Ticks& start,
const Ticks& end,
s4 traversals,
int swept,
int flushed,
int zombified) {
assert(event != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_starttime(start);
event->set_endtime(end);
event->set_sweepId(traversals);
src/hotspot/share/runtime/sweeper.cpp:
const Ticks sweep_end_counter = Ticks::now();
const Tickspan sweep_time = sweep_end_counter - sweep_start_counter;
{
MutexLocker mu(NMethodSweeperStats_lock, Mutex::_no_safepoint_check_flag);
_total_time_sweeping += sweep_time;
_total_time_this_sweep += sweep_time;
_peak_sweep_fraction_time = MAX2(sweep_time, _peak_sweep_fraction_time);
_total_flushed_size += freed_memory;
_total_nof_methods_reclaimed += flushed_count;
_total_nof_c2_methods_reclaimed += flushed_c2_count;
_peak_sweep_time = MAX2(_peak_sweep_time, _total_time_this_sweep);
}
EventSweepCodeCache event(UNTIMED);
if (event.should_commit()) {
post_sweep_event(&event, sweep_start_counter, sweep_end_counter, (s4)_traversals, swept_count, flushed_count, zombified_count);
}
#ifdef ASSERT
if(PrintMethodFlushing) {
tty->print_cr("### sweeper: sweep time(" JLONG_FORMAT "): ", sweep_time.value());
}
#endif
Log(codecache, sweep) log;
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 100 ms |
| profiling | true | 100 ms |
| Field | Type | Description |
|---|---|---|
| sweepId | int | Sweep Identifier |
| sweptCount | uint | Methods Swept |
| flushedCount | uint | Methods Flushed |
| zombifiedCount | uint | Methods Zombified |
CodeSweeperStatistics
default profiling startTime every chunk 11 17 until JDK 20
Category: Java Virtual Machine / Code Sweeper
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_initialSize(InitialCodeCacheSize);
event.set_reservedSize(ReservedCodeCacheSize);
event.set_nonNMethodSize(NonNMethodCodeHeapSize);
event.set_profiledSize(ProfiledCodeHeapSize);
event.set_nonProfiledSize(NonProfiledCodeHeapSize);
event.set_expansionSize(CodeCacheExpansionSize);
event.set_minBlockLength(CodeCacheMinBlockLength);
event.set_startAddress((u8)CodeCache::low_bound());
event.set_reservedTopAddress((u8)CodeCache::high_bound());
event.commit();
}
TRACE_REQUEST_FUNC(CodeSweeperStatistics) {
EventCodeSweeperStatistics event;
event.set_sweepCount(NMethodSweeper::traversal_count());
event.set_methodReclaimedCount(NMethodSweeper::total_nof_methods_reclaimed());
event.set_totalSweepTime(NMethodSweeper::total_time_sweeping());
event.set_peakFractionTime(NMethodSweeper::peak_sweep_fraction_time());
event.set_peakSweepTime(NMethodSweeper::peak_sweep_time());
event.commit();
}
TRACE_REQUEST_FUNC(CodeSweeperConfiguration) {
EventCodeSweeperConfiguration event;
event.set_sweeperEnabled(MethodFlushing);
| Configuration | enabled | period |
|---|---|---|
| default | true | everyChunk |
| profiling | true | everyChunk |
| Field | Type | Description |
|---|---|---|
| sweepCount | int | Sweeps |
| methodReclaimedCount | int | Methods Reclaimed |
| totalSweepTime | Tickspan | Time Spent Sweeping |
| peakFractionTime | Tickspan | Peak Time Fraction Sweep |
| peakSweepTime | Tickspan | Peak Time Full Sweep |
CodeSweeperConfiguration
default profiling startTime end of every chunk 11 17 until JDK 20
Category: Java Virtual Machine / Code Sweeper
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(CodeSweeperStatistics) {
EventCodeSweeperStatistics event;
event.set_sweepCount(NMethodSweeper::traversal_count());
event.set_methodReclaimedCount(NMethodSweeper::total_nof_methods_reclaimed());
event.set_totalSweepTime(NMethodSweeper::total_time_sweeping());
event.set_peakFractionTime(NMethodSweeper::peak_sweep_fraction_time());
event.set_peakSweepTime(NMethodSweeper::peak_sweep_time());
event.commit();
}
TRACE_REQUEST_FUNC(CodeSweeperConfiguration) {
EventCodeSweeperConfiguration event;
event.set_sweeperEnabled(MethodFlushing);
event.set_flushingEnabled(UseCodeCacheFlushing);
event.set_sweepThreshold(NMethodSweeper::sweep_threshold_bytes());
event.commit();
}
TRACE_REQUEST_FUNC(ShenandoahHeapRegionInformation) {
#if INCLUDE_SHENANDOAHGC
if (UseShenandoahGC) {
VM_ShenandoahSendHeapRegionInfoEvents op;
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| sweeperEnabled | boolean | Code Sweeper Enabled |
| flushingEnabled | boolean | Code Cache Flushing Enabled |
| sweepThreshold | ulong: bytes 17 until JDK 20 | Sweep Threshold |
JVM: Compiler
Compilation
default profiling startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / Compiler
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/compiler/compilerEvent.cpp:
guarantee(phase_names->length() < 256, "exceeds maximum supported phases");
}
if (register_jfr_serializer) {
JfrSerializer::register_serializer(TYPE_COMPILERPHASETYPE, false, new CompilerPhaseTypeConstant());
} else if (Jfr::is_recording()) {
// serialize new_phases.
JfrCheckpointWriter writer;
writer.write_type(TYPE_COMPILERPHASETYPE);
write_phases(writer, idx, new_phases);
}
return idx;
}
void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_id, CompilerType compiler_type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) {
event.set_compileId(compile_id);
event.set_compiler(compiler_type);
event.set_method(method);
event.set_compileLevel((short)compile_level);
event.set_succeded(success);
event.set_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
event.commit();
}
src/hotspot/share/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
class CompilationEvent : AllStatic {
public:
static void post(EventCompilation& event, int compile_id, CompilerType type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) NOT_JFR_RETURN();
};
class CompilationFailureEvent : AllStatic {
public:
static void post(EventCompilationFailure& event, int compile_id, const char* reason) NOT_JFR_RETURN();
};
class PhaseEvent : AllStatic {
friend class CompilerPhaseTypeConstant;
public:
/**
src/hotspot/share/compiler/compileBroker.cpp:
} else if (AbortVMOnCompilationFailure) {
if (compilable == ciEnv::MethodCompilable_not_at_tier) {
fatal("Not compilable at tier %d: %s", task->comp_level(), failure_reason);
}
if (compilable == ciEnv::MethodCompilable_never) {
fatal("Never compilable: %s", failure_reason);
}
}
// simulate crash during compilation
assert(task->compile_id() != CICrashAt, "just as planned");
}
static void post_compilation_event(EventCompilation& event, CompileTask* task) {
assert(task != NULL, "invariant");
CompilerEvent::CompilationEvent::post(event,
task->compile_id(),
task->compiler()->type(),
task->method(),
task->comp_level(),
task->is_success(),
task->osr_bci() != CompileBroker::standard_entry_bci,
(task->code() == NULL) ? 0 : task->code()->total_size(),
task->num_inlined_bytecodes());
}
int DirectivesStack::_depth = 0;
src/hotspot/share/compiler/compileBroker.cpp:
// Allocate a new set of JNI handles.
push_jni_handle_block();
Method* target_handle = task->method();
int compilable = ciEnv::MethodCompilable;
const char* failure_reason = NULL;
bool failure_reason_on_C_heap = false;
const char* retry_message = NULL;
#if INCLUDE_JVMCI
if (UseJVMCICompiler && comp != NULL && comp->is_jvmci()) {
JVMCICompiler* jvmci = (JVMCICompiler*) comp;
TraceTime t1("compilation", &time);
EventCompilation event;
JVMCICompileState compile_state(task);
// Skip redefined methods
if (compile_state.target_method_is_old()) {
failure_reason = "redefined method";
retry_message = "not retryable";
compilable = ciEnv::MethodCompilable_never;
} else {
JVMCIEnv env(thread, &compile_state, __FILE__, __LINE__);
methodHandle method(thread, target_handle);
env.runtime()->compile_method(&env, jvmci, method, osr_bci);
src/hotspot/share/compiler/compileBroker.cpp:
bool method_is_old = ci_env.cache_jvmti_state();
// Skip redefined methods
if (method_is_old) {
ci_env.record_method_not_compilable("redefined method", true);
}
// Cache DTrace flags
ci_env.cache_dtrace_flags();
ciMethod* target = ci_env.get_method_from_handle(target_handle);
TraceTime t1("compilation", &time);
EventCompilation event;
if (comp == NULL) {
ci_env.record_method_not_compilable("no compiler", !TieredCompilation);
} else if (!ci_env.failing()) {
if (WhiteBoxAPI && WhiteBox::compilation_locked) {
MonitorLocker locker(Compilation_lock, Mutex::_no_safepoint_check_flag);
while (WhiteBox::compilation_locked) {
locker.wait();
}
}
comp->compile_method(&ci_env, target, osr_bci, directive);
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EmptyEventProvider.java:
package jdk.vm.ci.hotspot;
/**
* An empty implementation for {@link EventProvider}. This implementation is used when no logging is
* requested.
*/
final class EmptyEventProvider implements EventProvider {
static InternalError shouldNotReachHere() {
throw new InternalError("should not reach here");
}
@Override
public CompilationEvent newCompilationEvent() {
return new EmptyCompilationEvent();
}
static class EmptyCompilationEvent implements CompilationEvent {
@Override
public void commit() {
throw shouldNotReachHere();
}
@Override
public boolean shouldWrite() {
// Events of this class should never been written.
return false;
}
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EventProvider.java:
* Creates and returns an empty implementation for {@link EventProvider}. This implementation
* can be used when no logging is requested.
*/
static EventProvider createEmptyEventProvider() {
return new EmptyEventProvider();
}
/**
* Creates and returns an empty implementation for {@link CompilationEvent}.
*/
static CompilationEvent createEmptyCompilationEvent() {
return new EmptyCompilationEvent();
}
/**
* Creates and returns an empty implementation for {@link CompilationEvent}.
*/
static CompilerFailureEvent createEmptyCompilerFailureEvent() {
return new EmptyCompilerFailureEvent();
}
/**
* An instant event is an event that is not considered to have taken any time.
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EventProvider.java:
/**
* Ends the timing period for this event.
*/
void end();
}
/**
* Creates a new {@link CompilationEvent}.
*
* @return a compilation event
*/
CompilationEvent newCompilationEvent();
/**
* A compilation event.
*/
public interface CompilationEvent extends TimedEvent {
void setMethod(String method);
void setCompileId(int compileId);
void setCompileLevel(int compileLevel);
void setSucceeded(boolean succeeded);
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 1000 ms |
| profiling | true | 100 ms |
| Field | Type | Description |
|---|---|---|
| compileId | uint | Compilation Identifier |
| compiler | CompilerType 14+ | Compiler |
| method | Method | Method |
| compileLevel | ushort | Compilation Level |
| succeded | boolean | Succeeded |
| isOsr | boolean | On Stack Replacement |
| codeSize | ulong: bytes | Compiled Code Size |
| inlinedBytes | ulong: bytes | Inlined Code Size |
Examples 3
| codeSize | ulong: bytes | 1376
|
|---|---|---|
| compileId | uint | 1460
|
| compileLevel | ushort | 4
|
| compiler | CompilerType | c2
|
| inlinedBytes | ulong: bytes | 11
|
| isOsr | boolean | false
|
| method | Method | |
| descriptor | string | ([BII)[B
|
| hidden | boolean | false
|
| modifiers | int | 9
|
| name | string | copyOfRange
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/util/Arrays
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| startTime | long: millis | 407247917
|
| succeded | boolean | true
|
| codeSize | ulong: bytes | 1760
|
|---|---|---|
| compileId | uint | 1419
|
| compileLevel | ushort | 4
|
| compiler | CompilerType | c2
|
| inlinedBytes | ulong: bytes | 0
|
| isOsr | boolean | false
|
| method | Method | |
| descriptor | string | ()Ljava/util/HashMap$Node;
|
| hidden | boolean | false
|
| modifiers | int | 16
|
| name | string | nextNode
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1024
|
| name | string | java/util/HashMap$HashIterator
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| startTime | long: millis | 387919267
|
| succeded | boolean | true
|
| codeSize | ulong: bytes | 952
|
|---|---|---|
| compileId | uint | 1411
|
| compileLevel | ushort | 3
|
| compiler | CompilerType | c1
|
| inlinedBytes | ulong: bytes | 5
|
| isOsr | boolean | false
|
| method | Method | |
| descriptor | string | ()V
|
| hidden | boolean | false
|
| modifiers | int | 2
|
| name | string | reserveEventSizeField
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | jdk/jfr/internal/event/EventWriter
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/jdk.jfr
|
| name | string | jdk.jfr
|
| version | string | 25.0.3
|
| name | string | jdk/jfr/internal/event
|
| startTime | long: millis | 374872454
|
| succeded | boolean | true
|
CompilerPhase
default profiling startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / Compiler
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/opto/compile.cpp:
Node* n = macro_node(i);
if (n->is_Allocate()) {
if (i != allocates) {
Node* tmp = macro_node(allocates);
_macro_nodes->at_put(allocates, n);
_macro_nodes->at_put(i, tmp);
}
allocates++;
}
}
}
void Compile::print_method(CompilerPhaseType cpt, int level, int idx) {
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, cpt, C->_compile_id, level);
}
#ifndef PRODUCT
if (should_print(level)) {
char output[1024];
if (idx != 0) {
jio_snprintf(output, sizeof(output), "%s:%d", CompilerPhaseTypeHelper::to_string(cpt), idx);
} else {
jio_snprintf(output, sizeof(output), "%s", CompilerPhaseTypeHelper::to_string(cpt));
}
_printer->print_method(output, level);
}
#endif
C->_latest_stage_start_counter.stamp();
}
void Compile::end_method(int level) {
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, PHASE_END, C->_compile_id, level);
}
#ifndef PRODUCT
if (_printer && _printer->should_print(level)) {
_printer->end_method();
}
#endif
}
src/hotspot/share/compiler/compilerEvent.cpp:
event.set_succeded(success);
event.set_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
event.commit();
}
void CompilerEvent::CompilationFailureEvent::post(EventCompilationFailure& event, int compile_id, const char* reason) {
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) {
event.set_compileId(compile_id);
event.set_caller(caller);
event.set_callee(callee);
src/hotspot/share/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
class CompilationEvent : AllStatic {
public:
src/hotspot/share/compiler/compilerEvent.hpp:
class PhaseEvent : AllStatic {
friend class CompilerPhaseTypeConstant;
public:
/**
* Register compiler phases for JFR type CompilerPhaseType serialization purposes.
* This method is called during compiler creation or during compilation.
* Registration will serialize the passed in phase constants, supporting bulk and/or incremental registrations.
* This method returns start index of new list that just got appended to phase_names.
* Param new_phases may contain duplicates.
* Return value could be used for mapping purpose at caller site, or caller can assume explicit order of registration.
*/
static int register_phases(GrowableArray<const char*>* new_phases) NOT_JFR_RETURN_(-1);
static void post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) NOT_JFR_RETURN();
static void post(EventCompilerPhase& event, jlong start_time, int phase, int compile_id, int level) {
JFR_ONLY(post(event, Ticks(start_time), phase, compile_id, level);)
}
};
class InlineEvent : AllStatic {
static void post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
public:
static void post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
static void post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
};
};
src/hotspot/share/jvmci/jvmciCompilerToVM.cpp:
int len = JVMCIENV->get_length(phases);
GrowableArray<const char*>* jvmci_phase_names = new GrowableArray<const char*>(len);
for (int i = 0; i < len; i++) {
JVMCIObject phase = JVMCIENV->get_object_at(phases, i);
jvmci_phase_names->append(strdup(JVMCIENV->as_utf8_string(phase)));
}
return CompilerEvent::PhaseEvent::register_phases(jvmci_phase_names);
#else
return -1;
#endif // !INCLUDE_JFR
}
C2V_VMENTRY(void, notifyCompilerPhaseEvent, (JNIEnv* env, jobject, jlong startTime, jint phase, jint compileId, jint level))
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, startTime, phase, compileId, level);
}
}
C2V_VMENTRY(void, notifyCompilerInliningEvent, (JNIEnv* env, jobject, jint compileId, jobject caller, jobject callee, jboolean succeeded, jstring jmessage, jint bci))
EventCompilerInlining event;
if (event.should_commit()) {
Method* caller_method = JVMCIENV->asMethod(caller);
Method* callee_method = JVMCIENV->asMethod(callee);
JVMCIObject message = JVMCIENV->wrap(jmessage);
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/JFR.java:
/**
* @return current JFR time stamp
*/
public static long now() {
return compilerToVM().ticksNow();
}
}
/**
* Helper methods for managing JFR CompilerPhase events.
* The events are defined in {see @code src/share/jfr/metadata/metadata.xml}.
*/
public static final class CompilerPhaseEvent {
private static final ConcurrentHashMap<String, Integer> phaseToId = new ConcurrentHashMap<>();
private static int getPhaseToId(String phaseName) {
String[] phaseNames = { phaseName };
return phaseToId.computeIfAbsent(phaseName, k -> compilerToVM().registerCompilerPhases(phaseNames));
}
/**
* Registers new compiler phases with JFR. This should be called during compiler initialization.
*
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 60 s |
| profiling | true | 10 s |
| Field | Type | Description |
|---|---|---|
| phase | CompilerPhaseType | Compile Phase |
| compileId | uint | Compilation Identifier |
| phaseLevel | ushort | Phase Level |
Examples 3
| compileId | uint | 1380
|
|---|---|---|
| phase | CompilerPhaseType | After Macro Expansion Step
|
| phaseLevel | ushort | 5
|
| startTime | long: millis | 380278295
|
| compileId | uint | 1408
|
|---|---|---|
| phase | CompilerPhaseType | Merge multiple definitions
|
| phaseLevel | ushort | 4
|
| startTime | long: millis | 373974455
|
| compileId | uint | 1344
|
|---|---|---|
| phase | CompilerPhaseType | Before Iter GVN
|
| phaseLevel | ushort | 3
|
| startTime | long: millis | 358851486
|
CompilationFailure
profiling startTime eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / Compiler
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/compiler/compilerEvent.cpp:
void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_id, CompilerType compiler_type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) {
event.set_compileId(compile_id);
event.set_compiler(compiler_type);
event.set_method(method);
event.set_compileLevel((short)compile_level);
event.set_succeded(success);
event.set_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
event.commit();
}
void CompilerEvent::CompilationFailureEvent::post(EventCompilationFailure& event, int compile_id, const char* reason) {
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
src/hotspot/share/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
class CompilationEvent : AllStatic {
public:
static void post(EventCompilation& event, int compile_id, CompilerType type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) NOT_JFR_RETURN();
};
class CompilationFailureEvent : AllStatic {
public:
static void post(EventCompilationFailure& event, int compile_id, const char* reason) NOT_JFR_RETURN();
};
class PhaseEvent : AllStatic {
friend class CompilerPhaseTypeConstant;
public:
/**
* Register compiler phases for JFR type CompilerPhaseType serialization purposes.
* This method is called during compiler creation or during compilation.
* Registration will serialize the passed in phase constants, supporting bulk and/or incremental registrations.
* This method returns start index of new list that just got appended to phase_names.
* Param new_phases may contain duplicates.
src/hotspot/share/ci/ciEnv.cpp:
// ------------------------------------------------------------------
// ciEnv::record_failure()
void ciEnv::record_failure(const char* reason) {
if (_failure_reason == NULL) {
// Record the first failure reason.
_failure_reason = reason;
}
}
void ciEnv::report_failure(const char* reason) {
EventCompilationFailure event;
if (event.should_commit()) {
CompilerEvent::CompilationFailureEvent::post(event, compile_id(), reason);
}
}
// ------------------------------------------------------------------
// ciEnv::record_method_not_compilable()
void ciEnv::record_method_not_compilable(const char* reason, bool all_tiers) {
int new_compilable =
all_tiers ? MethodCompilable_never : MethodCompilable_not_at_tier ;
// Only note transitions to a worse state
if (new_compilable > _compilable) {
| Configuration | enabled |
|---|---|
| default | false |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| failureMessage | string | Failure Message |
| compileId | uint | Compilation Identifier |
Examples 3
CompilerInlining
startTime eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / Compiler / Optimization
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/c1/c1_GraphBuilder.cpp:
void GraphBuilder::print_inlining(ciMethod* callee, const char* msg, bool success) {
CompileLog* log = compilation()->log();
if (log != NULL) {
assert(msg != NULL, "inlining msg should not be null!");
if (success) {
log->inline_success(msg);
} else {
log->inline_fail(msg);
}
}
EventCompilerInlining event;
if (event.should_commit()) {
CompilerEvent::InlineEvent::post(event, compilation()->env()->task()->compile_id(), method()->get_Method(), callee, success, msg, bci());
}
CompileTask::print_inlining_ul(callee, scope()->level(), bci(), msg);
if (!compilation()->directive()->PrintInliningOption) {
return;
}
CompileTask::print_inlining_tty(callee, scope()->level(), bci(), msg);
if (success && CIPrintMethodCodes) {
src/hotspot/share/opto/bytecodeInfo.cpp:
CompileTask::print_inlining_ul(callee_method, inline_level(),
caller_bci, inline_msg);
if (C->print_inlining()) {
C->print_inlining(callee_method, inline_level(), caller_bci, inline_msg);
guarantee(callee_method != NULL, "would crash in CompilerEvent::InlineEvent::post");
if (Verbose) {
const InlineTree *top = this;
while (top->caller_tree() != NULL) { top = top->caller_tree(); }
//tty->print(" bcs: %d+%d invoked: %d", top->count_inline_bcs(), callee_method->code_size(), callee_method->interpreter_invocation_count());
}
}
EventCompilerInlining event;
if (event.should_commit()) {
CompilerEvent::InlineEvent::post(event, C->compile_id(), caller_method->get_Method(), callee_method, success, inline_msg, caller_bci);
}
}
//------------------------------ok_to_inline-----------------------------------
WarmCallInfo* InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms, ciCallProfile& profile, WarmCallInfo* initial_wci, bool& should_delay) {
assert(callee_method != NULL, "caller checks for optimized virtual!");
assert(!should_delay, "should be initialized to false");
#ifdef ASSERT
// Make sure the incoming jvms has the same information content as me.
src/hotspot/share/compiler/compilerEvent.cpp:
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) {
event.set_compileId(compile_id);
event.set_caller(caller);
event.set_callee(callee);
event.set_succeeded(success);
event.set_message(msg);
event.set_bci(bci);
event.commit();
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) {
JfrStructCalleeMethod callee_struct;
callee_struct.set_type(callee->klass_name()->as_utf8());
callee_struct.set_name(callee->name()->as_utf8());
callee_struct.set_descriptor(callee->signature()->as_utf8());
post(event, compile_id, caller, callee_struct, success, msg, bci);
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) {
JfrStructCalleeMethod callee_struct;
callee_struct.set_type(callee->holder()->name()->as_utf8());
callee_struct.set_name(callee->name()->as_utf8());
callee_struct.set_descriptor(callee->signature()->as_symbol()->as_utf8());
post(event, compile_id, caller, callee_struct, success, msg, bci);
}
src/hotspot/share/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
src/hotspot/share/compiler/compilerEvent.hpp:
* Param new_phases may contain duplicates.
* Return value could be used for mapping purpose at caller site, or caller can assume explicit order of registration.
*/
static int register_phases(GrowableArray<const char*>* new_phases) NOT_JFR_RETURN_(-1);
static void post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) NOT_JFR_RETURN();
static void post(EventCompilerPhase& event, jlong start_time, int phase, int compile_id, int level) {
JFR_ONLY(post(event, Ticks(start_time), phase, compile_id, level);)
}
};
class InlineEvent : AllStatic {
static void post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
public:
static void post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
static void post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
};
};
#endif // SHARE_COMPILER_COMPILEREVENT_HPP
src/hotspot/share/jvmci/jvmciCompilerToVM.cpp:
#else
return -1;
#endif // !INCLUDE_JFR
}
C2V_VMENTRY(void, notifyCompilerPhaseEvent, (JNIEnv* env, jobject, jlong startTime, jint phase, jint compileId, jint level))
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, startTime, phase, compileId, level);
}
}
C2V_VMENTRY(void, notifyCompilerInliningEvent, (JNIEnv* env, jobject, jint compileId, jobject caller, jobject callee, jboolean succeeded, jstring jmessage, jint bci))
EventCompilerInlining event;
if (event.should_commit()) {
Method* caller_method = JVMCIENV->asMethod(caller);
Method* callee_method = JVMCIENV->asMethod(callee);
JVMCIObject message = JVMCIENV->wrap(jmessage);
CompilerEvent::InlineEvent::post(event, compileId, caller_method, callee_method, succeeded, JVMCIENV->as_utf8_string(message), bci);
}
}
#define CC (char*) /*cast a literal from (const char*)*/
#define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f))
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/JFR.java:
* @param phaseName compiler phase name
* @param compileId current compilation unit id
* @param phaseLevel compiler phase nesting level
*/
public static void write(long startTime, String phaseName, int compileId, int phaseLevel) {
compilerToVM().notifyCompilerPhaseEvent(startTime, getPhaseToId(phaseName), compileId, phaseLevel);
}
}
/**
* Helper methods for managing JFR CompilerInlining events.
* The events are defined in {see @code src/share/jfr/metadata/metadata.xml}.
*/
public static final class CompilerInliningEvent {
/**
* Commits a CompilerInlining event.
*
* @param compileId current compilation unit id
* @param caller caller method
* @param callee callee method
* @param succeeded inlining succeeded or not
* @param message extra information on inlining
* @param bci invocation byte code index
*/
| Configuration | enabled |
|---|---|
| default | false |
| profiling | false |
| Field | Type | Description |
|---|---|---|
| compileId | uint | Compilation Identifier |
| caller | Method | Caller Method |
| callee | CalleeMethod struct | Callee Method |
| succeeded | boolean | Succeeded |
| message | string | Message |
| bci | int | Bytecode Index |
Examples 3
| bci | int | 25
|
|---|---|---|
| callee | CalleeMethod | |
| descriptor | string | (B)V
|
| name | string | putUncheckedByte
|
| type | string | jdk/jfr/internal/event/EventWriter
|
| caller | Method | |
| descriptor | string | (Ljava/lang/String;)V
|
| hidden | boolean | false
|
| modifiers | int | 2
|
| name | string | putStringValue
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | jdk/jfr/internal/event/EventWriter
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/jdk.jfr
|
| name | string | jdk.jfr
|
| version | string | 25.0.3
|
| name | string | jdk/jfr/internal/event
|
| compileId | uint | 1400
|
| message | string | callee uses too much stack
|
| startTime | long: millis | 359052854
|
| succeeded | boolean | false
|
| bci | int | 8
|
|---|---|---|
| callee | CalleeMethod | |
| descriptor | string | ()B
|
| name | string | byteValue
|
| type | string | jdk/jfr/internal/consumer/StringParser$Encoding
|
| caller | Method | |
| descriptor | string | (Ljava/lang/String;)V
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | putString
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | jdk/jfr/internal/event/EventWriter
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/jdk.jfr
|
| name | string | jdk.jfr
|
| version | string | 25.0.3
|
| name | string | jdk/jfr/internal/event
|
| compileId | uint | 1433
|
| message | string | inline
|
| startTime | long: millis | 383971082
|
| succeeded | boolean | true
|
| bci | int | 128
|
|---|---|---|
| callee | CalleeMethod | |
| descriptor | string | (B)V
|
| name | string | putUncheckedByte
|
| type | string | jdk/jfr/internal/event/EventWriter
|
| caller | Method | |
| descriptor | string | (J)V
|
| hidden | boolean | false
|
| modifiers | int | 2
|
| name | string | putUncheckedLong
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | jdk/jfr/internal/event/EventWriter
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/jdk.jfr
|
| name | string | jdk.jfr
|
| version | string | 25.0.3
|
| name | string | jdk/jfr/internal/event
|
| compileId | uint | 1391
|
| message | string | callee uses too much stack
|
| startTime | long: millis | 371242692
|
| succeeded | boolean | false
|
Deoptimization
default profiling startTime eventThread stackTrace 14 17 21 25 26 27
Category: Java Virtual Machine / Compiler
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/deoptimization.cpp:
JfrSerializer::register_serializer(TYPE_DEOPTIMIZATIONREASON, true, new DeoptReasonSerializer());
JfrSerializer::register_serializer(TYPE_DEOPTIMIZATIONACTION, true, new DeoptActionSerializer());
}
static void post_deoptimization_event(CompiledMethod* nm,
const Method* method,
int trap_bci,
int instruction,
Deoptimization::DeoptReason reason,
Deoptimization::DeoptAction action) {
assert(nm != NULL, "invariant");
assert(method != NULL, "invariant");
if (EventDeoptimization::is_enabled()) {
static bool serializers_registered = false;
if (!serializers_registered) {
register_serializers();
serializers_registered = true;
}
EventDeoptimization event;
event.set_compileId(nm->compile_id());
event.set_compiler(nm->compiler_type());
event.set_method(method);
event.set_lineNumber(method->line_number_from_bci(trap_bci));
event.set_bci(trap_bci);
event.set_instruction(instruction);
event.set_reason(reason);
event.set_action(action);
event.commit();
}
}
| Configuration | enabled | stackTrace |
|---|---|---|
| default | true | false |
| profiling | true | true |
| Field | Type | Description |
|---|---|---|
| compileId | uint | Compilation Identifier |
| compiler | CompilerType | Compiler |
| method | Method | Method |
| lineNumber | int | Line Number |
| bci | int | Bytecode Index |
| instruction | Bytecode | Instruction |
| reason | DeoptimizationReason | Reason |
| action | DeoptimizationAction | Action |
Examples 3
| action | DeoptimizationAction | reinterpret
|
|---|---|---|
| bci | int | 25
|
| compileId | uint | 2198
|
| compiler | CompilerType | c2
|
| instruction | Bytecode | ifne
|
| lineNumber | int | 62
|
| method | Method | |
| descriptor | string | ()Z
|
| hidden | boolean | false
|
| modifiers | int | 0
|
| name | string | sample
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 16
|
| name | string | jdk/jfr/internal/settings/ThrottlerWindow
|
| package | Package | |
| exported | boolean | false
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/jdk.jfr
|
| name | string | jdk.jfr
|
| version | string | 25.0.3
|
| name | string | jdk/jfr/internal/settings
|
| reason | DeoptimizationReason | unstable_if
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 25
|
| lineNumber | int | 62
|
| method | Method | |
| descriptor | string | ()Z
|
| hidden | boolean | false
|
| modifiers | int | 0
|
| name | string | sample
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 16
|
| name | string | jdk/jfr/internal/settings/ThrottlerWindow
|
| package | Package | |
| exported | boolean | false
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/jdk.jfr
|
| name | string | jdk.jfr
|
| version | string | 25.0.3
|
| name | string | jdk/jfr/internal/settings
|
| type | FrameType | Inlined
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 1397247426
|
| action | DeoptimizationAction | reinterpret
|
|---|---|---|
| bci | int | 99
|
| compileId | uint | 2133
|
| compiler | CompilerType | c2
|
| instruction | Bytecode | invokestatic
|
| lineNumber | int | 267
|
| method | Method | |
| descriptor | string | ()J
|
| hidden | boolean | false
|
| modifiers | int | 2
|
| name | string | getVmStartNanos
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | org/renaissance/harness/RenaissanceSuite$
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| location | string | null
|
| name | string | null
|
| version | string | null
|
| name | string | org/renaissance/harness
|
| reason | DeoptimizationReason | unloaded
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 99
|
| lineNumber | int | 267
|
| method | Method | |
| descriptor | string | ()J
|
| hidden | boolean | false
|
| modifiers | int | 2
|
| name | string | getVmStartNanos
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | org/renaissance/harness/RenaissanceSuite$
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| location | string | null
|
| name | string | null
|
| version | string | null
|
| name | string | org/renaissance/harness
|
| type | FrameType | JIT compiled
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 799020713
|
| action | DeoptimizationAction | reinterpret
|
|---|---|---|
| bci | int | 148
|
| compileId | uint | 1720
|
| compiler | CompilerType | c2
|
| instruction | Bytecode | if_acmpeq
|
| lineNumber | int | 1036
|
| method | Method | |
| descriptor | string | (Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
|
| hidden | boolean | false
|
| modifiers | int | 16
|
| name | string | putVal
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/util/concurrent/ConcurrentHashMap
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util/concurrent
|
| reason | DeoptimizationReason | unstable_if
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 148
|
| lineNumber | int | 1036
|
| method | Method | |
| descriptor | string | (Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
|
| hidden | boolean | false
|
| modifiers | int | 16
|
| name | string | putVal
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/util/concurrent/ConcurrentHashMap
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util/concurrent
|
| type | FrameType | JIT compiled
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 830238377
|
CompilerStatistics
default profiling startTime every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / Compiler
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(LoaderConstraintsTableStatistics) {
TableStatistics statistics = SystemDictionary::loader_constraints_statistics();
emit_table_statistics<EventLoaderConstraintsTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(ProtectionDomainCacheTableStatistics) {
TableStatistics statistics = SystemDictionary::protection_domain_cache_statistics();
emit_table_statistics<EventProtectionDomainCacheTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(CompilerStatistics) {
EventCompilerStatistics event;
event.set_compileCount(CompileBroker::get_total_compile_count());
event.set_bailoutCount(CompileBroker::get_total_bailout_count());
event.set_invalidatedCount(CompileBroker::get_total_invalidated_count());
event.set_osrCompileCount(CompileBroker::get_total_osr_compile_count());
event.set_standardCompileCount(CompileBroker::get_total_standard_compile_count());
event.set_osrBytesCompiled(CompileBroker::get_sum_osr_bytes_compiled());
event.set_standardBytesCompiled(CompileBroker::get_sum_standard_bytes_compiled());
event.set_nmethodsSize(CompileBroker::get_sum_nmethod_size());
event.set_nmethodCodeSize(CompileBroker::get_sum_nmethod_code_size());
event.set_peakTimeSpent(CompileBroker::get_peak_compilation_time());
event.set_totalTimeSpent(CompileBroker::get_total_compilation_time());
| Configuration | enabled | period |
|---|---|---|
| default | true | 1000 ms |
| profiling | true | 1000 ms |
| Field | Type | Description |
|---|---|---|
| compileCount | int | Compiled Methods |
| bailoutCount | int | Bailouts |
| invalidatedCount | int | Invalidated Compilations |
| osrCompileCount | int | OSR Compilations |
| standardCompileCount | int | Standard Compilations |
| osrBytesCompiled | ulong: bytes | OSR Bytes Compiled |
| standardBytesCompiled | ulong: bytes | Standard Bytes Compiled |
| nmethodsSize | ulong: bytes | Compilation Resulting Size |
| nmethodCodeSize | ulong: bytes | Compilation Resulting Code Size |
| peakTimeSpent | long: millis | Peak Time |
| totalTimeSpent | long: millis | Total time |
Examples 3
| bailoutCount | int | 1
|
|---|---|---|
| compileCount | int | 14816
|
| invalidatedCount | int | 0
|
| nmethodCodeSize | ulong: bytes | 21362264
|
| nmethodsSize | ulong: bytes | 31161208
|
| osrBytesCompiled | ulong: bytes | 0
|
| osrCompileCount | int | 200
|
| peakTimeSpent | long: millis | 471
|
| standardBytesCompiled | ulong: bytes | 0
|
| standardCompileCount | int | 14616
|
| startTime | long: millis | 40302242761
|
| totalTimeSpent | long: millis | 40088
|
| bailoutCount | int | 7
|
|---|---|---|
| compileCount | int | 2704
|
| invalidatedCount | int | 0
|
| nmethodCodeSize | ulong: bytes | 3599032
|
| nmethodsSize | ulong: bytes | 4856832
|
| osrBytesCompiled | ulong: bytes | 0
|
| osrCompileCount | int | 19
|
| peakTimeSpent | long: millis | 199
|
| standardBytesCompiled | ulong: bytes | 0
|
| standardCompileCount | int | 2685
|
| startTime | long: millis | 4465087621
|
| totalTimeSpent | long: millis | 2438
|
| bailoutCount | int | 1
|
|---|---|---|
| compileCount | int | 7068
|
| invalidatedCount | int | 0
|
| nmethodCodeSize | ulong: bytes | 10630088
|
| nmethodsSize | ulong: bytes | 14997192
|
| osrBytesCompiled | ulong: bytes | 0
|
| osrCompileCount | int | 74
|
| peakTimeSpent | long: millis | 496
|
| standardBytesCompiled | ulong: bytes | 0
|
| standardCompileCount | int | 6994
|
| startTime | long: millis | 19575041649
|
| totalTimeSpent | long: millis | 21696
|
CompilerConfiguration
default profiling startTime end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / Compiler
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_invalidatedCount(CompileBroker::get_total_invalidated_count());
event.set_osrCompileCount(CompileBroker::get_total_osr_compile_count());
event.set_standardCompileCount(CompileBroker::get_total_standard_compile_count());
event.set_osrBytesCompiled(CompileBroker::get_sum_osr_bytes_compiled());
event.set_standardBytesCompiled(CompileBroker::get_sum_standard_bytes_compiled());
event.set_nmethodsSize(CompileBroker::get_sum_nmethod_size());
event.set_nmethodCodeSize(CompileBroker::get_sum_nmethod_code_size());
event.set_peakTimeSpent(CompileBroker::get_peak_compilation_time());
event.set_totalTimeSpent(CompileBroker::get_total_compilation_time());
event.commit();
}
TRACE_REQUEST_FUNC(CompilerConfiguration) {
EventCompilerConfiguration event;
event.set_threadCount(CICompilerCount);
event.set_tieredCompilation(TieredCompilation);
event.commit();
}
TRACE_REQUEST_FUNC(CodeCacheStatistics) {
// Emit stats for all available code heaps
for (int bt = 0; bt < CodeBlobType::NumTypes; ++bt) {
if (CodeCache::heap_available(bt)) {
EventCodeCacheStatistics event;
event.set_codeBlobType((u1)bt);
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| threadCount | int | Thread Count |
| tieredCompilation | boolean | Tiered Compilation |
Examples 3
JVM: Diagnostics
HeapDump
default profiling startTime duration eventThread stackTrace 15 17 21 25 26 27
Category: Java Virtual Machine / Diagnostics
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/services/heapDumper.cpp:
// dump the heap to given path.
int HeapDumper::dump(const char* path, outputStream* out, int compression) {
assert(path != NULL && strlen(path) > 0, "path missing");
// print message in interactive case
if (out != NULL) {
out->print_cr("Dumping heap to %s ...", path);
timer()->start();
}
// create JFR event
EventHeapDump event;
AbstractCompressor* compressor = NULL;
if (compression > 0) {
compressor = new (std::nothrow) GZipCompressor(compression);
if (compressor == NULL) {
set_error("Could not allocate gzip compressor");
return -1;
}
}
| Configuration | enabled | stackTrace | threshold |
|---|---|---|---|
| default | true | true | 0 ns |
| profiling | true | true | 0 ns |
| Field | Type | Description |
|---|---|---|
| destination | string | Destination |
| size | long | Size |
| gcBeforeDump | boolean | GC Before Dump |
| onOutOfMemoryError | boolean | On Out of Memory Error |
Examples 3
| destination | string | /tmp/jfr_sample_heap_365919713268.hprof
|
|---|---|---|
| gcBeforeDump | boolean | true
|
| onOutOfMemoryError | boolean | false
|
| size | long | 14269007
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | (Ljava/lang/String;Z)V
|
| hidden | boolean | false
|
| modifiers | int | 258
|
| name | string | dumpHeap0
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | com/sun/management/internal/HotSpotDiagnostic
|
| package | Package | |
| exported | boolean | false
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/jdk.management
|
| name | string | jdk.management
|
| version | string | 25.0.3
|
| name | string | com/sun/management/internal
|
| type | FrameType | Native
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 1477224818
|
| destination | string | /tmp/jfr_sample_heap_277286644011.hprof
|
|---|---|---|
| gcBeforeDump | boolean | true
|
| onOutOfMemoryError | boolean | false
|
| size | long | 14267337
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | (Ljava/lang/String;Z)V
|
| hidden | boolean | false
|
| modifiers | int | 258
|
| name | string | dumpHeap0
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | com/sun/management/internal/HotSpotDiagnostic
|
| package | Package | |
| exported | boolean | false
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/jdk.management
|
| name | string | jdk.management
|
| version | string | 25.0.3
|
| name | string | com/sun/management/internal
|
| type | FrameType | Native
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 1226005000
|
| destination | string | /tmp/jfr_sample_heap_332752774776.hprof
|
|---|---|---|
| gcBeforeDump | boolean | true
|
| onOutOfMemoryError | boolean | false
|
| size | long | 15848980
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | (Ljava/lang/String;Z)V
|
| hidden | boolean | false
|
| modifiers | int | 258
|
| name | string | dumpHeap0
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | com/sun/management/internal/HotSpotDiagnostic
|
| package | Package | |
| exported | boolean | false
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/jdk.management
|
| name | string | jdk.management
|
| version | string | 25.0.3
|
| name | string | com/sun/management/internal
|
| type | FrameType | Native
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 1300675382
|
JVM: Flag
IntFlagChanged
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlag.cpp:
JVMFlag::Error JVMFlag::intAt(const JVMFlag* flag, int* value) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_int()) return JVMFlag::WRONG_FORMAT;
*value = flag->get_int();
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlag::intAtPut(JVMFlag* flag, int* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_int()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_int(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
int old_value = flag->get_int();
trace_flag_changed<EventIntFlagChanged, s4>(flag, old_value, *value, origin);
flag->set_int(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::intAtPut(JVMFlagsEnum flag, int value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_int(), "wrong flag type");
return JVMFlag::intAtPut(faddr, &value, origin);
}
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| oldValue | int | Old Value |
| newValue | int | New Value |
| origin | FlagValueOrigin | Origin |
Examples 3
UnsignedIntFlagChanged
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlag.cpp:
JVMFlag::Error JVMFlag::uintAt(const JVMFlag* flag, uint* value) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_uint()) return JVMFlag::WRONG_FORMAT;
*value = flag->get_uint();
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlag::uintAtPut(JVMFlag* flag, uint* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_uint()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_uint(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
uint old_value = flag->get_uint();
trace_flag_changed<EventUnsignedIntFlagChanged, u4>(flag, old_value, *value, origin);
flag->set_uint(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::uintAtPut(JVMFlagsEnum flag, uint value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_uint(), "wrong flag type");
return JVMFlag::uintAtPut(faddr, &value, origin);
}
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| oldValue | uint | Old Value |
| newValue | uint | New Value |
| origin | FlagValueOrigin | Origin |
Examples 3
LongFlagChanged
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlag.cpp:
if (constraint != NULL) {
status = constraint->apply_intx(new_value, verbose);
}
}
return status;
}
JVMFlag::Error JVMFlag::intxAtPut(JVMFlag* flag, intx* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_intx()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_intx(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
intx old_value = flag->get_intx();
trace_flag_changed<EventLongFlagChanged, intx>(flag, old_value, *value, origin);
flag->set_intx(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::intxAtPut(JVMFlagsEnum flag, intx value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_intx(), "wrong flag type");
return JVMFlag::intxAtPut(faddr, &value, origin);
}
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| oldValue | long | Old Value |
| newValue | long | New Value |
| origin | FlagValueOrigin | Origin |
UnsignedLongFlagChanged
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlag.cpp:
if (constraint != NULL) {
status = constraint->apply_uintx(new_value, verbose);
}
}
return status;
}
JVMFlag::Error JVMFlag::uintxAtPut(JVMFlag* flag, uintx* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_uintx()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_uintx(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
uintx old_value = flag->get_uintx();
trace_flag_changed<EventUnsignedLongFlagChanged, u8>(flag, old_value, *value, origin);
flag->set_uintx(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::uintxAtPut(JVMFlagsEnum flag, uintx value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_uintx(), "wrong flag type");
return JVMFlag::uintxAtPut(faddr, &value, origin);
}
src/hotspot/share/runtime/flags/jvmFlag.cpp:
if (constraint != NULL) {
status = constraint->apply_uint64_t(new_value, verbose);
}
}
return status;
}
JVMFlag::Error JVMFlag::uint64_tAtPut(JVMFlag* flag, uint64_t* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_uint64_t()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_uint64_t(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
uint64_t old_value = flag->get_uint64_t();
trace_flag_changed<EventUnsignedLongFlagChanged, u8>(flag, old_value, *value, origin);
flag->set_uint64_t(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::uint64_tAtPut(JVMFlagsEnum flag, uint64_t value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_uint64_t(), "wrong flag type");
return JVMFlag::uint64_tAtPut(faddr, &value, origin);
}
src/hotspot/share/runtime/flags/jvmFlag.cpp:
status = constraint->apply_size_t(new_value, verbose);
}
}
return status;
}
JVMFlag::Error JVMFlag::size_tAtPut(JVMFlag* flag, size_t* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_size_t()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_size_t(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
size_t old_value = flag->get_size_t();
trace_flag_changed<EventUnsignedLongFlagChanged, u8>(flag, old_value, *value, origin);
flag->set_size_t(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::size_tAtPut(JVMFlagsEnum flag, size_t value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_size_t(), "wrong flag type");
return JVMFlag::size_tAtPut(faddr, &value, origin);
}
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| oldValue | ulong | Old Value |
| newValue | ulong | New Value |
| origin | FlagValueOrigin | Origin |
Examples 3
DoubleFlagChanged
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlag.cpp:
if (constraint != NULL) {
status = constraint->apply_double(new_value, verbose);
}
}
return status;
}
JVMFlag::Error JVMFlag::doubleAtPut(JVMFlag* flag, double* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_double()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_double(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
double old_value = flag->get_double();
trace_flag_changed<EventDoubleFlagChanged, double>(flag, old_value, *value, origin);
flag->set_double(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::doubleAtPut(JVMFlagsEnum flag, double value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_double(), "wrong flag type");
return JVMFlag::doubleAtPut(faddr, &value, origin);
}
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| oldValue | double | Old Value |
| newValue | double | New Value |
| origin | FlagValueOrigin | Origin |
Examples 3
BooleanFlagChanged
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlag.cpp:
JVMFlag::Error JVMFlag::boolAt(const JVMFlag* flag, bool* value) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_bool()) return JVMFlag::WRONG_FORMAT;
*value = flag->get_bool();
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlag::boolAtPut(JVMFlag* flag, bool* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_bool()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_bool(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
bool old_value = flag->get_bool();
trace_flag_changed<EventBooleanFlagChanged, bool>(flag, old_value, *value, origin);
flag->set_bool(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::boolAtPut(JVMFlagsEnum flag, bool value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_bool(), "wrong flag type");
return JVMFlag::boolAtPut(faddr, &value, origin);
}
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| oldValue | boolean | Old Value |
| newValue | boolean | New Value |
| origin | FlagValueOrigin | Origin |
Examples 3
StringFlagChanged
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlag.cpp:
JVMFlag::Error JVMFlag::ccstrAt(const JVMFlag* flag, ccstr* value) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_ccstr()) return JVMFlag::WRONG_FORMAT;
*value = flag->get_ccstr();
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlag::ccstrAtPut(JVMFlag* flag, ccstr* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_ccstr()) return JVMFlag::WRONG_FORMAT;
ccstr old_value = flag->get_ccstr();
trace_flag_changed<EventStringFlagChanged, const char*>(flag, old_value, *value, origin);
char* new_value = NULL;
if (*value != NULL) {
new_value = os::strdup_check_oom(*value);
}
flag->set_ccstr(new_value);
if (flag->is_default() && old_value != NULL) {
// Prior value is NOT heap allocated, but was a literal constant.
old_value = os::strdup_check_oom(old_value);
}
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::ccstrAtPut(JVMFlagsEnum flag, ccstr value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type");
ccstr old_value = faddr->get_ccstr();
trace_flag_changed<EventStringFlagChanged, const char*>(faddr, old_value, value, origin);
char* new_value = os::strdup_check_oom(value);
faddr->set_ccstr(new_value);
if (!faddr->is_default() && old_value != NULL) {
// Prior value is heap allocated so free it.
FREE_C_HEAP_ARRAY(char, old_value);
}
faddr->set_origin(origin);
return JVMFlag::SUCCESS;
}
extern "C" {
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| oldValue | string | Old Value |
| newValue | string | New Value |
| origin | FlagValueOrigin | Origin |
Examples 3
IntFlag
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| value | int | Value |
| origin | FlagValueOrigin | Origin |
Examples 3
| name | string | MaxStringPrintSize
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 360236855
|
| value | int | 256
|
| name | string | ThreadPriorityPolicy
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 9176487589
|
| value | int | 0
|
| name | string | VMThreadPriority
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 373486246
|
| value | int | -1
|
UnsignedIntFlag
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| value | uint | Value |
| origin | FlagValueOrigin | Origin |
Examples 3
| name | string | ZYoungGCThreads
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 8304362944
|
| value | uint | 0
|
| name | string | PausePadding
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 360261902
|
| value | uint | 1
|
| name | string | StressBailoutMean
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 384713268
|
| value | uint | 100000
|
LongFlag
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| value | long | Value |
| origin | FlagValueOrigin | Origin |
Examples 3
| name | string | Tier4InvocationThreshold
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 373550495
|
| value | long | 5000
|
| name | string | OptoPrologueNops
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 360269784
|
| value | long | 0
|
| name | string | C1MaxInlineLevel
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 384727444
|
| value | long | 9
|
UnsignedLongFlag
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| value | ulong | Value |
| origin | FlagValueOrigin | Origin |
Examples 3
| name | string | VitalsShortTermTableHours
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 360303645
|
| value | ulong | 1
|
| name | string | MinSurvivorRatio
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 384770895
|
| value | ulong | 3
|
| name | string | MinHeapDeltaBytes
|
|---|---|---|
| origin | FlagValueOrigin | Ergonomic
|
| startTime | long: millis | 373582926
|
| value | ulong | 2097152
|
DoubleFlag
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| value | double | Value |
| origin | FlagValueOrigin | Origin |
Examples 3
| name | string | MinRAMPercentage
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 52784429490
|
| value | double | 50.0
|
| name | string | MaxRAMPercentage
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 47684839024
|
| value | double | 25.0
|
| name | string | SweeperThreshold
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 8304421574
|
| value | double | 15.0
|
BooleanFlag
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| value | boolean | Value |
| origin | FlagValueOrigin | Origin |
Examples 3
| name | string | PrintCFG
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 360338357
|
| value | boolean | false
|
| name | string | UseLocalValueNumbering
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 384797064
|
| value | boolean | true
|
| name | string | InlineMethodsWithExceptionHandlers
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 373614555
|
| value | boolean | true
|
StringFlag
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / Flag
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| value | string | Value |
| origin | FlagValueOrigin | Origin |
Examples 3
| name | string | LogFile
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 8304529686
|
| value | string | null
|
| name | string | ArchiveHeapTestClass
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 17207293496
|
| value | string | null
|
| name | string | PrintIdealGraphFile
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 17433428675
|
| value | string | null
|
JVM: GC: Collector
GarbageCollection
default profiling startTime duration 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Collector
Garbage collection performed by the JVM
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
// All GC dependencies against the trace framework is contained within this file.
typedef uintptr_t TraceAddress;
void GCTracer::send_garbage_collection_event() const {
EventGarbageCollection event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_name(_shared_gc_info.name());
event.set_cause((u2) _shared_gc_info.cause());
event.set_sumOfPauses(_shared_gc_info.sum_of_pauses());
event.set_longestPause(_shared_gc_info.longest_pause());
event.set_starttime(_shared_gc_info.start_timestamp());
event.set_endtime(_shared_gc_info.end_timestamp());
event.commit();
}
}
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| name | GCName | Name The name of the Garbage Collector |
| cause | GCCause | Cause The reason for triggering this Garbage Collection |
| sumOfPauses | Tickspan | Sum of Pauses Sum of all the times in which Java execution was paused during the garbage collection |
| longestPause | Tickspan | Longest Pause Longest individual pause during the garbage collection |
Examples 3
ParallelOldGarbageCollection
default profiling startTime duration 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Collector
Appearing in: linux_ParallelGC
Missing in: linux_G1GC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Extra information specific to Parallel Old Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_smallChunksTotalSize(summary.small_chunks_size_in_bytes());
e.set_mediumChunks(summary.num_medium_chunks());
e.set_mediumChunksTotalSize(summary.medium_chunks_size_in_bytes());
e.set_humongousChunks(summary.num_humongous_chunks());
e.set_humongousChunksTotalSize(summary.humongous_chunks_size_in_bytes());
e.commit();
}
}
void ParallelOldTracer::send_parallel_old_event() const {
EventParallelOldGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_densePrefix((TraceAddress)_parallel_old_gc_info.dense_prefix());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void YoungGCTracer::send_young_gc_event() const {
EventYoungGarbageCollection e(UNTIMED);
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| densePrefix | ulong: address | Dense Prefix The address of the dense prefix, used when compacting |
Examples 2
YoungGarbageCollection
default profiling startTime duration 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Collector
Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC
Missing in: linux_ShenandoahGC, linux_ZGC
Extra information specific to Young Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
void ParallelOldTracer::send_parallel_old_event() const {
EventParallelOldGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_densePrefix((TraceAddress)_parallel_old_gc_info.dense_prefix());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void YoungGCTracer::send_young_gc_event() const {
EventYoungGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_tenuringThreshold(_tenuring_threshold);
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
bool YoungGCTracer::should_send_promotion_in_new_plab_event() const {
return EventPromoteObjectInNewPLAB::is_enabled();
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| tenuringThreshold | uint | Tenuring Threshold |
Examples 3
OldGarbageCollection
default profiling startTime duration 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Collector
Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC
Missing in: linux_ShenandoahGC, linux_ZGC
Extra information specific to Old Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
EventPromoteObjectOutsidePLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.commit();
}
}
void OldGCTracer::send_old_gc_event() const {
EventOldGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
static JfrStructCopyFailed to_struct(const CopyFailedInfo& cf_info) {
JfrStructCopyFailed failed_info;
failed_info.set_objectCount(cf_info.failed_count());
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
Examples 3
G1GarbageCollection
default profiling startTime duration 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Collector
Appearing in: linux_G1GC
Missing in: linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Extra information specific to G1 Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
double predicted_allocation_rate,
double predicted_marking_length,
bool prediction_active) {
send_adaptive_ihop_statistics(threshold,
internal_target_occupancy,
additional_buffer_size,
current_occupancy,
predicted_allocation_rate,
predicted_marking_length,
prediction_active);
}
void G1NewTracer::send_g1_young_gc_event() {
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type(_g1_young_gc_info.type());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void G1NewTracer::send_evacuation_info_event(G1EvacuationInfo* info) {
EventEvacuationInformation e;
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| type | G1YCType | Type |
Examples 2
JVM: GC: Configuration
GCConfiguration
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Configuration
The configuration of the garbage collector
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(G1HeapRegionInformation) {
G1GC_ONLY(G1HeapRegionEventSender::send_events());
}
// Java Mission Control (JMC) uses (Java) Long.MIN_VALUE to describe that a
// long value is undefined.
static jlong jmc_undefined_long = min_jlong;
TRACE_REQUEST_FUNC(GCConfiguration) {
GCConfiguration conf;
jlong pause_target = conf.has_pause_target_default_value() ? jmc_undefined_long : conf.pause_target();
EventGCConfiguration event;
event.set_youngCollector(conf.young_collector());
event.set_oldCollector(conf.old_collector());
event.set_parallelGCThreads(conf.num_parallel_gc_threads());
event.set_concurrentGCThreads(conf.num_concurrent_gc_threads());
event.set_usesDynamicGCThreads(conf.uses_dynamic_gc_threads());
event.set_isExplicitGCConcurrent(conf.is_explicit_gc_concurrent());
event.set_isExplicitGCDisabled(conf.is_explicit_gc_disabled());
event.set_gcTimeRatio(conf.gc_time_ratio());
event.set_pauseTarget((s8)pause_target);
event.commit();
}
| Configuration | enabled | period |
|---|---|---|
| default | true | everyChunk |
| profiling | true | everyChunk |
| Field | Type | Description |
|---|---|---|
| youngCollector | GCName | Young Garbage Collector The garbage collector used for the young generation |
| oldCollector | GCName | Old Garbage Collector The garbage collector used for the old generation |
| parallelGCThreads | uint | Parallel GC Threads Number of parallel threads to use for garbage collection |
| concurrentGCThreads | uint | Concurrent GC Threads Number of concurrent threads to use for garbage collection |
| usesDynamicGCThreads | boolean | Uses Dynamic GC Threads Whether a dynamic number of GC threads are used or not |
| isExplicitGCConcurrent | boolean | Concurrent Explicit GC Whether System.gc() is concurrent or not |
| isExplicitGCDisabled | boolean | Disabled Explicit GC Whether System.gc() will cause a garbage collection or not |
| pauseTarget | long: millis | Pause Target Target for GC pauses |
| gcTimeRatio | uint | GC Time Ratio Target for runtime vs garbage collection time |
Examples 3
| concurrentGCThreads | uint | 0
|
|---|---|---|
| gcTimeRatio | uint | 99
|
| isExplicitGCConcurrent | boolean | false
|
| isExplicitGCDisabled | boolean | false
|
| oldCollector | GCName | ParallelOld
|
| parallelGCThreads | uint | 4
|
| pauseTarget | long: millis | -9223372036854775808
|
| startTime | long: millis | 8978068957
|
| usesDynamicGCThreads | boolean | true
|
| youngCollector | GCName | ParallelScavenge
|
| concurrentGCThreads | uint | 1
|
|---|---|---|
| gcTimeRatio | uint | 12
|
| isExplicitGCConcurrent | boolean | false
|
| isExplicitGCDisabled | boolean | false
|
| oldCollector | GCName | G1Old
|
| parallelGCThreads | uint | 4
|
| pauseTarget | long: millis | -9223372036854775808
|
| startTime | long: millis | 118580045769
|
| usesDynamicGCThreads | boolean | true
|
| youngCollector | GCName | G1New
|
| concurrentGCThreads | uint | 1
|
|---|---|---|
| gcTimeRatio | uint | 12
|
| isExplicitGCConcurrent | boolean | false
|
| isExplicitGCDisabled | boolean | false
|
| oldCollector | GCName | G1Old
|
| parallelGCThreads | uint | 4
|
| pauseTarget | long: millis | -9223372036854775808
|
| startTime | long: millis | 25089879886
|
| usesDynamicGCThreads | boolean | true
|
| youngCollector | GCName | G1New
|
GCSurvivorConfiguration
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Configuration
The configuration of the survivors of garbage collection
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(GCTLABConfiguration) {
GCTLABConfiguration conf;
EventGCTLABConfiguration event;
event.set_usesTLABs(conf.uses_tlabs());
event.set_minTLABSize(conf.min_tlab_size());
event.set_tlabRefillWasteLimit(conf.tlab_refill_waste_limit());
event.commit();
}
TRACE_REQUEST_FUNC(GCSurvivorConfiguration) {
GCSurvivorConfiguration conf;
EventGCSurvivorConfiguration event;
event.set_maxTenuringThreshold(conf.max_tenuring_threshold());
event.set_initialTenuringThreshold(conf.initial_tenuring_threshold());
event.commit();
}
TRACE_REQUEST_FUNC(GCHeapConfiguration) {
GCHeapConfiguration conf;
EventGCHeapConfiguration event;
event.set_minSize(conf.min_size());
event.set_maxSize(conf.max_size());
event.set_initialSize(conf.initial_size());
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| maxTenuringThreshold | ubyte | Maximum Tenuring Threshold Upper limit for the age of how old objects to keep in the survivor area |
| initialTenuringThreshold | ubyte | Initial Tenuring Threshold Initial age limit for how old objects to keep in survivor area |
Examples 3
GCTLABConfiguration
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Configuration
The configuration of the Thread Local Allocation Buffers (TLABs)
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_oldCollector(conf.old_collector());
event.set_parallelGCThreads(conf.num_parallel_gc_threads());
event.set_concurrentGCThreads(conf.num_concurrent_gc_threads());
event.set_usesDynamicGCThreads(conf.uses_dynamic_gc_threads());
event.set_isExplicitGCConcurrent(conf.is_explicit_gc_concurrent());
event.set_isExplicitGCDisabled(conf.is_explicit_gc_disabled());
event.set_gcTimeRatio(conf.gc_time_ratio());
event.set_pauseTarget((s8)pause_target);
event.commit();
}
TRACE_REQUEST_FUNC(GCTLABConfiguration) {
GCTLABConfiguration conf;
EventGCTLABConfiguration event;
event.set_usesTLABs(conf.uses_tlabs());
event.set_minTLABSize(conf.min_tlab_size());
event.set_tlabRefillWasteLimit(conf.tlab_refill_waste_limit());
event.commit();
}
TRACE_REQUEST_FUNC(GCSurvivorConfiguration) {
GCSurvivorConfiguration conf;
EventGCSurvivorConfiguration event;
event.set_maxTenuringThreshold(conf.max_tenuring_threshold());
event.set_initialTenuringThreshold(conf.initial_tenuring_threshold());
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| usesTLABs | boolean | TLABs Used If Thread Local Allocation Buffers (TLABs) are in use |
| minTLABSize | ulong: bytes | Minimum TLAB Size |
| tlabRefillWasteLimit | ulong: bytes | TLAB Refill Waste Limit |
Examples 3
GCHeapConfiguration
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Configuration
The configuration of the garbage collected heap
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.commit();
}
TRACE_REQUEST_FUNC(GCSurvivorConfiguration) {
GCSurvivorConfiguration conf;
EventGCSurvivorConfiguration event;
event.set_maxTenuringThreshold(conf.max_tenuring_threshold());
event.set_initialTenuringThreshold(conf.initial_tenuring_threshold());
event.commit();
}
TRACE_REQUEST_FUNC(GCHeapConfiguration) {
GCHeapConfiguration conf;
EventGCHeapConfiguration event;
event.set_minSize(conf.min_size());
event.set_maxSize(conf.max_size());
event.set_initialSize(conf.initial_size());
event.set_usesCompressedOops(conf.uses_compressed_oops());
event.set_compressedOopsMode(conf.narrow_oop_mode());
event.set_objectAlignment(conf.object_alignment_in_bytes());
event.set_heapAddressBits(conf.heap_address_size_in_bits());
event.commit();
}
TRACE_REQUEST_FUNC(YoungGenerationConfiguration) {
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| minSize | ulong: bytes | Minimum Heap Size |
| maxSize | ulong: bytes | Maximum Heap Size |
| initialSize | ulong: bytes | Initial Heap Size |
| usesCompressedOops | boolean | If Compressed Oops Are Used If compressed Oops (Ordinary Object Pointers) are enabled |
| compressedOopsMode | NarrowOopMode | Compressed Oops Mode The kind of compressed oops being used |
| objectAlignment | ulong: bytes | Object Alignment Object alignment (in bytes) on the heap |
| heapAddressBits | ubyte | Heap Address Size Heap Address Size (in bits) |
Examples 3
YoungGenerationConfiguration
default profiling startTime duration end of every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Configuration
The configuration of the young generation of the garbage collected heap
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_minSize(conf.min_size());
event.set_maxSize(conf.max_size());
event.set_initialSize(conf.initial_size());
event.set_usesCompressedOops(conf.uses_compressed_oops());
event.set_compressedOopsMode(conf.narrow_oop_mode());
event.set_objectAlignment(conf.object_alignment_in_bytes());
event.set_heapAddressBits(conf.heap_address_size_in_bits());
event.commit();
}
TRACE_REQUEST_FUNC(YoungGenerationConfiguration) {
GCYoungGenerationConfiguration conf;
jlong max_size = conf.has_max_size_default_value() ? jmc_undefined_long : conf.max_size();
EventYoungGenerationConfiguration event;
event.set_maxSize((u8)max_size);
event.set_minSize(conf.min_size());
event.set_newRatio(conf.new_ratio());
event.commit();
}
TRACE_REQUEST_FUNC(InitialSystemProperty) {
SystemProperty* p = Arguments::system_properties();
JfrTicks time_stamp = JfrTicks::now();
while (p != NULL) {
if (!p->internal()) {
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| minSize | ulong: bytes | Minimum Young Generation Size |
| maxSize | ulong: bytes | Maximum Young Generation Size |
| newRatio | uint | New Ratio The size of the young generation relative to the tenured generation |
Examples 3
JVM: GC: Detailed
G1MMU
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC
Missing in: linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
void G1OldTracer::report_gc_start_impl(GCCause::Cause cause, const Ticks& timestamp) {
_shared_gc_info.set_start_timestamp(timestamp);
}
void G1OldTracer::set_gc_cause(GCCause::Cause cause) {
_shared_gc_info.set_cause(cause);
}
void G1MMUTracer::report_mmu(double time_slice_sec, double gc_time_sec, double max_time_sec) {
send_g1_mmu_event(time_slice_sec * MILLIUNITS,
gc_time_sec * MILLIUNITS,
max_time_sec * MILLIUNITS);
}
void G1MMUTracer::send_g1_mmu_event(double time_slice_ms, double gc_time_ms, double max_time_ms) {
EventG1MMU e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_timeSlice(time_slice_ms);
e.set_gcTime(gc_time_ms);
e.set_pauseTarget(max_time_ms);
e.commit();
}
}
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| timeSlice | long: millis | Time Slice Time slice used to calculate MMU |
| gcTime | long: millis | GC Time Time stopped because of GC during last time slice |
| pauseTarget | long: millis | Pause Target Max time allowed to be spent on GC during last time slice |
Examples 2
EvacuationInformation
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC
Missing in: linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
void G1NewTracer::send_g1_young_gc_event() {
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type(_g1_young_gc_info.type());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void G1NewTracer::send_evacuation_info_event(G1EvacuationInfo* info) {
EventEvacuationInformation e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_cSetRegions(info->collectionset_regions());
e.set_cSetUsedBefore(info->collectionset_used_before());
e.set_cSetUsedAfter(info->collectionset_used_after());
e.set_allocationRegions(info->allocation_regions());
e.set_allocationRegionsUsedBefore(info->alloc_regions_used_before());
e.set_allocationRegionsUsedAfter(info->alloc_regions_used_before() + info->bytes_used());
e.set_bytesCopied(info->bytes_used());
e.set_regionsFreed(info->regions_freed());
e.commit();
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| cSetRegions | uint | Collection Set Regions |
| cSetUsedBefore | ulong: bytes | Collection Set Before Memory usage before GC in the collection set regions |
| cSetUsedAfter | ulong: bytes | Collection Set After Memory usage after GC in the collection set regions |
| allocationRegions | uint | Allocation Regions Regions chosen as allocation regions during evacuation (includes survivors and old space regions) |
| allocationRegionsUsedBefore | ulong: bytes | Allocation Regions Before Memory usage before GC in allocation regions |
| allocationRegionsUsedAfter | ulong: bytes | Allocation Regions After Memory usage after GC in allocation regions |
| bytesCopied | ulong: bytes | Bytes Copied |
| regionsFreed | uint | Regions Freed |
Examples 2
| allocationRegions | uint | 37
|
|---|---|---|
| allocationRegionsUsedAfter | ulong: bytes | 76546048
|
| allocationRegionsUsedBefore | ulong: bytes | 0
|
| bytesCopied | ulong: bytes | 76546048
|
| cSetRegions | uint | 219
|
| cSetUsedAfter | ulong: bytes | 0
|
| cSetUsedBefore | ulong: bytes | 459276288
|
| gcId | uint | 80
|
| regionsFreed | uint | 219
|
| startTime | long: millis | 12814379274
|
| allocationRegions | uint | 2
|
|---|---|---|
| allocationRegionsUsedAfter | ulong: bytes | 2627600
|
| allocationRegionsUsedBefore | ulong: bytes | 0
|
| bytesCopied | ulong: bytes | 2627600
|
| cSetRegions | uint | 4
|
| cSetUsedAfter | ulong: bytes | 0
|
| cSetUsedBefore | ulong: bytes | 8385240
|
| gcId | uint | 157
|
| regionsFreed | uint | 4
|
| startTime | long: millis | 3078139678
|
ObjectCountAfterGC
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC
Missing in: linux_ShenandoahGC, linux_ZGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/objectCountEventSender.cpp:
#if INCLUDE_SERVICES
bool ObjectCountEventSender::should_send_event() {
#if INCLUDE_JFR
return _should_send_requestable_event || EventObjectCountAfterGC::is_enabled();
#else
return false;
#endif // INCLUDE_JFR
}
bool ObjectCountEventSender::_should_send_requestable_event = false;
void ObjectCountEventSender::enable_requestable_event() {
_should_send_requestable_event = true;
}
src/hotspot/share/gc/shared/objectCountEventSender.cpp:
template <typename T>
void ObjectCountEventSender::send_event_if_enabled(Klass* klass, jlong count, julong size, const Ticks& timestamp) {
T event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_count(count);
event.set_totalSize(size);
event.set_endtime(timestamp);
event.commit();
}
}
void ObjectCountEventSender::send(const KlassInfoEntry* entry, const Ticks& timestamp) {
Klass* klass = entry->klass();
jlong count = entry->count();
julong total_size = entry->words() * BytesPerWord;
send_event_if_enabled<EventObjectCount>(klass, count, total_size, timestamp);
send_event_if_enabled<EventObjectCountAfterGC>(klass, count, total_size, timestamp);
}
#endif // INCLUDE_SERVICES
| Configuration | enabled |
|---|---|
| default | false |
| profiling | false |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| objectClass | Class | Object Class |
| count | long | Count |
| totalSize | ulong: bytes | Total Size |
Examples 3
| count | long | 9564
|
|---|---|---|
| gcId | uint | 12
|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | java/util/concurrent/ConcurrentHashMap$Node
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util/concurrent
|
| startTime | long: millis | 3964639364
|
| totalSize | ulong: bytes | 229536
|
| count | long | 6134
|
|---|---|---|
| gcId | uint | 7
|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | java/util/stream/ReferencePipeline$Head
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util/stream
|
| startTime | long: millis | 1088194000
|
| totalSize | ulong: bytes | 294432
|
| count | long | 926
|
|---|---|---|
| gcId | uint | 0
|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/util/ArrayList
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| startTime | long: millis | 379054085
|
| totalSize | ulong: bytes | 22224
|
G1EvacuationYoungStatistics
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC
Missing in: linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Memory related evacuation statistics during GC for the young generation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
s.set_allocated(summary.allocated() * HeapWordSize);
s.set_wasted(summary.wasted() * HeapWordSize);
s.set_used(summary.used() * HeapWordSize);
s.set_undoWaste(summary.undo_wasted() * HeapWordSize);
s.set_regionEndWaste(summary.region_end_waste() * HeapWordSize);
s.set_regionsRefilled(summary.regions_filled());
s.set_directAllocated(summary.direct_allocated() * HeapWordSize);
s.set_failureUsed(summary.failure_used() * HeapWordSize);
s.set_failureWaste(summary.failure_waste() * HeapWordSize);
return s;
}
void G1NewTracer::send_young_evacuation_statistics(const G1EvacSummary& summary) const {
EventG1EvacuationYoungStatistics surv_evt;
if (surv_evt.should_commit()) {
surv_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
surv_evt.commit();
}
}
void G1NewTracer::send_old_evacuation_statistics(const G1EvacSummary& summary) const {
EventG1EvacuationOldStatistics old_evt;
if (old_evt.should_commit()) {
old_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
old_evt.commit();
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| statistics | G1EvacuationStatistics struct | Evacuation Statistics |
Examples 2
| startTime | long: millis | 3133152040
|
|---|---|---|
| statistics | G1EvacuationStatistics | |
| allocated | ulong: bytes | 2097152
|
| directAllocated | ulong: bytes | 0
|
| failureUsed | ulong: bytes | 0
|
| failureWaste | ulong: bytes | 0
|
| gcId | uint | 160
|
| regionEndWaste | ulong: bytes | 0
|
| regionsRefilled | uint: bytes | 1
|
| undoWaste | ulong: bytes | 0
|
| used | ulong: bytes | 2080752
|
| wasted | ulong: bytes | 16400
|
| startTime | long: millis | 1673655225
|
|---|---|---|
| statistics | G1EvacuationStatistics | |
| allocated | ulong: bytes | 9961456
|
| directAllocated | ulong: bytes | 524304
|
| failureUsed | ulong: bytes | 0
|
| failureWaste | ulong: bytes | 0
|
| gcId | uint | 18
|
| regionEndWaste | ulong: bytes | 0
|
| regionsRefilled | uint: bytes | 5
|
| undoWaste | ulong: bytes | 0
|
| used | ulong: bytes | 9001536
|
| wasted | ulong: bytes | 248
|
G1EvacuationOldStatistics
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC
Missing in: linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Memory related evacuation statistics during GC for the old generation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
s.set_failureWaste(summary.failure_waste() * HeapWordSize);
return s;
}
void G1NewTracer::send_young_evacuation_statistics(const G1EvacSummary& summary) const {
EventG1EvacuationYoungStatistics surv_evt;
if (surv_evt.should_commit()) {
surv_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
surv_evt.commit();
}
}
void G1NewTracer::send_old_evacuation_statistics(const G1EvacSummary& summary) const {
EventG1EvacuationOldStatistics old_evt;
if (old_evt.should_commit()) {
old_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
old_evt.commit();
}
}
void G1NewTracer::send_basic_ihop_statistics(size_t threshold,
size_t target_occupancy,
size_t current_occupancy,
size_t last_allocation_size,
double last_allocation_duration,
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| statistics | G1EvacuationStatistics struct | Evacuation Statistics |
Examples 2
| startTime | long: millis | 19312354562
|
|---|---|---|
| statistics | G1EvacuationStatistics | |
| allocated | ulong: bytes | 51380224
|
| directAllocated | ulong: bytes | 0
|
| failureUsed | ulong: bytes | 0
|
| failureWaste | ulong: bytes | 0
|
| gcId | uint | 99
|
| regionEndWaste | ulong: bytes | 0
|
| regionsRefilled | uint: bytes | 25
|
| undoWaste | ulong: bytes | 0
|
| used | ulong: bytes | 49475272
|
| wasted | ulong: bytes | 792
|
| startTime | long: millis | 2612449298
|
|---|---|---|
| statistics | G1EvacuationStatistics | |
| allocated | ulong: bytes | 2048
|
| directAllocated | ulong: bytes | 3935184
|
| failureUsed | ulong: bytes | 0
|
| failureWaste | ulong: bytes | 0
|
| gcId | uint | 115
|
| regionEndWaste | ulong: bytes | 32
|
| regionsRefilled | uint: bytes | 2
|
| undoWaste | ulong: bytes | 0
|
| used | ulong: bytes | 32
|
| wasted | ulong: bytes | 0
|
G1BasicIHOP
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC
Missing in: linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Basic statistics related to current IHOP calculation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
EventG1EvacuationOldStatistics old_evt;
if (old_evt.should_commit()) {
old_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
old_evt.commit();
}
}
void G1NewTracer::send_basic_ihop_statistics(size_t threshold,
size_t target_occupancy,
size_t current_occupancy,
size_t last_allocation_size,
double last_allocation_duration,
double last_marking_length) {
EventG1BasicIHOP evt;
if (evt.should_commit()) {
evt.set_gcId(GCId::current());
evt.set_threshold(threshold);
evt.set_targetOccupancy(target_occupancy);
evt.set_thresholdPercentage(target_occupancy > 0 ? ((double)threshold / target_occupancy) : 0.0);
evt.set_currentOccupancy(current_occupancy);
evt.set_recentMutatorAllocationSize(last_allocation_size);
evt.set_recentMutatorDuration(last_allocation_duration * MILLIUNITS);
evt.set_recentAllocationRate(last_allocation_duration != 0.0 ? last_allocation_size / last_allocation_duration : 0.0);
evt.set_lastMarkingDuration(last_marking_length * MILLIUNITS);
evt.commit();
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| threshold | ulong: bytes | Current IHOP Threshold Current IHOP threshold |
| thresholdPercentage | float: percentage | Current IHOP Threshold Current IHOP threshold in percent of old generation |
| targetOccupancy | ulong: bytes | Target Occupancy Target old generation occupancy to reach at the start of mixed GC |
| currentOccupancy | ulong: bytes | Current Occupancy Current old generation occupancy |
| recentMutatorAllocationSize | ulong: bytes | Recent Mutator Allocation Size Mutator allocation during mutator operation in the most recent interval |
| recentMutatorDuration | long: millis | Recent Mutator Duration Time the mutator ran in the most recent interval |
| recentAllocationRate | double: bytes-per-second | Recent Allocation Rate Allocation rate of the mutator in the most recent interval in bytes/second |
| lastMarkingDuration | long: millis | Last Marking Duration Last time from the end of the last initial mark to the first mixed GC |
Examples 2
| currentOccupancy | ulong: bytes | 44272808
|
|---|---|---|
| gcId | uint | 112
|
| lastMarkingDuration | long: millis | 2518
|
| recentAllocationRate | double: bytes-per-second | 1705658.4981764439
|
| recentMutatorAllocationSize | ulong: bytes | 2076096
|
| recentMutatorDuration | long: millis | 1217
|
| startTime | long: millis | 26068430530
|
| targetOccupancy | ulong: bytes | 161480704
|
| threshold | ulong: bytes | 0
|
| thresholdPercentage | float: percentage | 0.0
|
| currentOccupancy | ulong: bytes | 10739912
|
|---|---|---|
| gcId | uint | 131
|
| lastMarkingDuration | long: millis | 40
|
| recentAllocationRate | double: bytes-per-second | 9589367.50515863
|
| recentMutatorAllocationSize | ulong: bytes | 51392
|
| recentMutatorDuration | long: millis | 5
|
| startTime | long: millis | 2807981227
|
| targetOccupancy | ulong: bytes | 35651584
|
| threshold | ulong: bytes | 16043212
|
| thresholdPercentage | float: percentage | 0.45
|
G1AdaptiveIHOP
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC
Missing in: linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Statistics related to current adaptive IHOP calculation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
evt.set_recentAllocationRate(last_allocation_duration != 0.0 ? last_allocation_size / last_allocation_duration : 0.0);
evt.set_lastMarkingDuration(last_marking_length * MILLIUNITS);
evt.commit();
}
}
void G1NewTracer::send_adaptive_ihop_statistics(size_t threshold,
size_t internal_target_occupancy,
size_t current_occupancy,
size_t additional_buffer_size,
double predicted_allocation_rate,
double predicted_marking_length,
bool prediction_active) {
EventG1AdaptiveIHOP evt;
if (evt.should_commit()) {
evt.set_gcId(GCId::current());
evt.set_threshold(threshold);
evt.set_thresholdPercentage(internal_target_occupancy > 0 ? ((double)threshold / internal_target_occupancy) : 0.0);
evt.set_ihopTargetOccupancy(internal_target_occupancy);
evt.set_currentOccupancy(current_occupancy);
evt.set_additionalBufferSize(additional_buffer_size);
evt.set_predictedAllocationRate(predicted_allocation_rate);
evt.set_predictedMarkingDuration(predicted_marking_length * MILLIUNITS);
evt.set_predictionActive(prediction_active);
evt.commit();
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| threshold | ulong: bytes | Threshold Current IHOP Threshold |
| thresholdPercentage | float: percentage | Threshold Current IHOP threshold in percent of the internal target occupancy |
| ihopTargetOccupancy | ulong: bytes | IHOP Target Occupancy Internal target old generation occupancy to reach at the start of mixed GC |
| currentOccupancy | ulong: bytes | Current Occupancy Current old generation occupancy |
| additionalBufferSize | ulong: bytes | Additional Buffer Additional buffer size |
| predictedAllocationRate | double: bytes-per-second | Predicted Allocation Rate Current predicted allocation rate for the mutator in bytes/second |
| predictedMarkingDuration | long: millis | Predicted Marking Duration Current predicted time from the end of the last initial mark to the first mixed GC |
| predictionActive | boolean | Prediction Active Indicates whether the adaptive IHOP prediction is active |
Examples 2
| additionalBufferSize | ulong: bytes | 10485760
|
|---|---|---|
| currentOccupancy | ulong: bytes | 10758256
|
| gcId | uint | 87
|
| ihopTargetOccupancy | ulong: bytes | 39845888
|
| predictedAllocationRate | double: bytes-per-second | 1.1972035722670982E9
|
| predictedMarkingDuration | long: millis | 81
|
| predictionActive | boolean | false
|
| startTime | long: millis | 2340056777
|
| threshold | ulong: bytes | 18874368
|
| thresholdPercentage | float: percentage | 0.47368422
|
| additionalBufferSize | ulong: bytes | 490733568
|
|---|---|---|
| currentOccupancy | ulong: bytes | 489684824
|
| gcId | uint | 106
|
| ihopTargetOccupancy | ulong: bytes | 1024039321
|
| predictedAllocationRate | double: bytes-per-second | 3.220338388863218E8
|
| predictedMarkingDuration | long: millis | 736
|
| predictionActive | boolean | true
|
| startTime | long: millis | 21849903642
|
| threshold | ulong: bytes | 296144072
|
| thresholdPercentage | float: percentage | 0.28919208
|
PromoteObjectInNewPLAB
profiling startTime eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC, linux_ParallelGC
Missing in: linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Object survived scavenge and was copied to a new Promotion Local Allocation Buffer (PLAB). Supported GCs are Parallel Scavange, G1 and CMS with Parallel New. Due to promotion being done in parallel an object might be reported multiple times as the GC threads race to copy all objects.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
void YoungGCTracer::send_young_gc_event() const {
EventYoungGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_tenuringThreshold(_tenuring_threshold);
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
bool YoungGCTracer::should_send_promotion_in_new_plab_event() const {
return EventPromoteObjectInNewPLAB::is_enabled();
}
bool YoungGCTracer::should_send_promotion_outside_plab_event() const {
return EventPromoteObjectOutsidePLAB::is_enabled();
}
void YoungGCTracer::send_promotion_in_new_plab_event(Klass* klass, size_t obj_size,
uint age, bool tenured,
size_t plab_size) const {
EventPromoteObjectInNewPLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.set_plabSize(plab_size);
event.commit();
}
}
| Configuration | enabled |
|---|---|
| default | false |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier Identifier signifying GC during which the object was promoted |
| objectClass | Class | Object Class Class of promoted object |
| objectSize | ulong: bytes | Object Size Size of promoted object |
| tenuringAge | uint | Object Tenuring Age Tenuring age of a surviving object before being copied. The tenuring age of an object is a value between 0-15 and is incremented each scavange the object survives. Newly allocated objects have tenuring age 0. |
| tenured | boolean | Tenured True if object was promoted to Old space, otherwise the object was aged and copied to a Survivor space |
| plabSize | ulong: bytes | PLAB Size Size of the allocated PLAB to which the object was copied |
Examples 3
| gcId | uint | 8
|
|---|---|---|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/lang/String
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/lang
|
| objectSize | ulong: bytes | 24
|
| plabSize | ulong: bytes | 180352
|
| startTime | long: millis | 1159761845
|
| tenured | boolean | true
|
| tenuringAge | uint | 0
|
| gcId | uint | 1
|
|---|---|---|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/lang/String
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/lang
|
| objectSize | ulong: bytes | 24
|
| plabSize | ulong: bytes | 8184
|
| startTime | long: millis | 1058449823
|
| tenured | boolean | true
|
| tenuringAge | uint | 0
|
| gcId | uint | 2
|
|---|---|---|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | java/util/concurrent/ConcurrentHashMap$Node
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util/concurrent
|
| objectSize | ulong: bytes | 24
|
| plabSize | ulong: bytes | 4096
|
| startTime | long: millis | 577783893
|
| tenured | boolean | true
|
| tenuringAge | uint | 1
|
PromoteObjectOutsidePLAB
profiling startTime eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC, linux_ParallelGC
Missing in: linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Object survived scavenge and was copied directly to the heap. Supported GCs are Parallel Scavange, G1 and CMS with Parallel New. Due to promotion being done in parallel an object might be reported multiple times as the GC threads race to copy all objects.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_gcId(GCId::current());
e.set_tenuringThreshold(_tenuring_threshold);
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
bool YoungGCTracer::should_send_promotion_in_new_plab_event() const {
return EventPromoteObjectInNewPLAB::is_enabled();
}
bool YoungGCTracer::should_send_promotion_outside_plab_event() const {
return EventPromoteObjectOutsidePLAB::is_enabled();
}
void YoungGCTracer::send_promotion_in_new_plab_event(Klass* klass, size_t obj_size,
uint age, bool tenured,
size_t plab_size) const {
EventPromoteObjectInNewPLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.set_plabSize(plab_size);
event.commit();
}
}
void YoungGCTracer::send_promotion_outside_plab_event(Klass* klass, size_t obj_size,
uint age, bool tenured) const {
EventPromoteObjectOutsidePLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.commit();
}
}
void OldGCTracer::send_old_gc_event() const {
| Configuration | enabled |
|---|---|
| default | false |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier Identifier signifying GC during which the object was promoted |
| objectClass | Class | Object Class Class of promoted object |
| objectSize | ulong: bytes | Object Size Size of promoted object |
| tenuringAge | uint | Object Tenuring Age Tenuring age of a surviving object before being copied. The tenuring age of an object is a value between 0-15 and is incremented each scavange the object survives. Newly allocated objects have tenuring age 0. |
| tenured | boolean | Tenured True if object was promoted to Old space, otherwise the object was aged and copied to a Survivor space |
Examples 3
| gcId | uint | 120
|
|---|---|---|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1041
|
| name | string | [Ljava/lang/Object;
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/lang
|
| objectSize | ulong: bytes | 230816
|
| startTime | long: millis | 26791236432
|
| tenured | boolean | false
|
| tenuringAge | uint | 0
|
PromotionFailed
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Promotion of an object failed
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
static JfrStructCopyFailed to_struct(const CopyFailedInfo& cf_info) {
JfrStructCopyFailed failed_info;
failed_info.set_objectCount(cf_info.failed_count());
failed_info.set_firstSize(cf_info.first_size());
failed_info.set_smallestSize(cf_info.smallest_size());
failed_info.set_totalSize(cf_info.total_size());
return failed_info;
}
void YoungGCTracer::send_promotion_failed_event(const PromotionFailedInfo& pf_info) const {
EventPromotionFailed e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_promotionFailed(to_struct(pf_info));
e.set_thread(pf_info.thread_trace_id());
e.commit();
}
}
// G1
void OldGCTracer::send_concurrent_mode_failure_event() {
EventConcurrentModeFailure e;
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| promotionFailed | CopyFailed struct | Promotion Failed Data |
| thread | Thread | Running thread |
EvacuationFailed
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Evacuation of an object failed
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
e.set_cSetRegions(info->collectionset_regions());
e.set_cSetUsedBefore(info->collectionset_used_before());
e.set_cSetUsedAfter(info->collectionset_used_after());
e.set_allocationRegions(info->allocation_regions());
e.set_allocationRegionsUsedBefore(info->alloc_regions_used_before());
e.set_allocationRegionsUsedAfter(info->alloc_regions_used_before() + info->bytes_used());
e.set_bytesCopied(info->bytes_used());
e.set_regionsFreed(info->regions_freed());
e.commit();
}
}
void G1NewTracer::send_evacuation_failed_event(const EvacuationFailedInfo& ef_info) const {
EventEvacuationFailed e;
if (e.should_commit()) {
// Create JFR structured failure data
JfrStructCopyFailed evac_failed;
evac_failed.set_objectCount(ef_info.failed_count());
evac_failed.set_firstSize(ef_info.first_size());
evac_failed.set_smallestSize(ef_info.smallest_size());
evac_failed.set_totalSize(ef_info.total_size());
// Add to the event
e.set_gcId(GCId::current());
e.set_evacuationFailed(evac_failed);
e.commit();
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| evacuationFailed | CopyFailed struct | Evacuation Failed Data |
ConcurrentModeFailure
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC
Missing in: linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Concurrent Mode failed
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
void YoungGCTracer::send_promotion_failed_event(const PromotionFailedInfo& pf_info) const {
EventPromotionFailed e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_promotionFailed(to_struct(pf_info));
e.set_thread(pf_info.thread_trace_id());
e.commit();
}
}
// G1
void OldGCTracer::send_concurrent_mode_failure_event() {
EventConcurrentModeFailure e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.commit();
}
}
static JfrStructVirtualSpace to_struct(const VirtualSpaceSummary& summary) {
JfrStructVirtualSpace space;
space.set_start((TraceAddress)summary.start());
space.set_committedEnd((TraceAddress)summary.committed_end());
space.set_committedSize(summary.committed_size());
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
Examples 2
AllocationRequiringGC
startTime eventThread stackTrace 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC
Missing in: linux_ShenandoahGC, linux_ZGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/allocTracer.cpp:
event.set_allocationSize(alloc_size);
event.commit();
}
}
void AllocTracer::send_allocation_in_new_tlab(Klass* klass, HeapWord* obj, size_t tlab_size, size_t alloc_size, Thread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(obj, alloc_size, thread);)
EventObjectAllocationInNewTLAB event;
if (event.should_commit()) {
event.set_objectClass(klass);
event.set_allocationSize(alloc_size);
event.set_tlabSize(tlab_size);
event.commit();
}
}
void AllocTracer::send_allocation_requiring_gc_event(size_t size, uint gcId) {
EventAllocationRequiringGC event;
if (event.should_commit()) {
event.set_gcId(gcId);
event.set_size(size);
event.commit();
}
}
| Configuration | enabled | stackTrace |
|---|---|---|
| default | false | true |
| profiling | false | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | Pending GC Identifier |
| size | ulong: bytes | Allocation Size |
Examples 3
| gcId | uint | 36
|
|---|---|---|
| size | ulong: bytes | 32
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | 230
|
| method | Method | |
| descriptor | string | (DDD)Lio/jenetics/DoubleGene;
|
| hidden | boolean | false
|
| modifiers | int | 9
|
| name | string | of
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | io/jenetics/DoubleGene
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| location | string | null
|
| name | string | null
|
| version | string | null
|
| name | string | io/jenetics
|
| type | FrameType | Inlined
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 5606390812
|
| gcId | uint | 97
|
|---|---|---|
| size | ulong: bytes | 524304
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 45
|
| lineNumber | int | 496
|
| method | Method | |
| descriptor | string | ()V
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | allocateAndGC
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | app
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/loader
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | jfr_sample/Main
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | app
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/loader
|
| location | string | null
|
| name | string | null
|
| version | string | null
|
| name | string | jfr_sample
|
| type | FrameType | JIT compiled
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 2431897394
|
| gcId | uint | 32
|
|---|---|---|
| size | ulong: bytes | 25280
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 6
|
| lineNumber | int | 3478
|
| method | Method | |
| descriptor | string | ([Ljava/lang/Object;I)[Ljava/lang/Object;
|
| hidden | boolean | false
|
| modifiers | int | 9
|
| name | string | copyOf
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/util/Arrays
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| type | FrameType | Inlined
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 24536903069
|
TenuringDistribution
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC, linux_SerialGC
Missing in: linux_ParallelGC, linux_ShenandoahGC, linux_ZGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/ageTableTracer.cpp:
void AgeTableTracer::send_tenuring_distribution_event(uint age, size_t size) {
EventTenuringDistribution e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_age(age);
e.set_size(size);
e.commit();
}
}
bool AgeTableTracer::is_tenuring_distribution_event_enabled() {
return EventTenuringDistribution::is_enabled();
}
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| age | uint | Age |
| size | ulong: bytes | Size |
Examples 3
G1HeapRegionTypeChange
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC
Missing in: linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Information about a G1 heap region type change
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/heapRegionTracer.cpp:
void HeapRegionTracer::send_region_type_change(uint index,
G1HeapRegionTraceType::Type from,
G1HeapRegionTraceType::Type to,
uintptr_t start,
size_t used) {
EventG1HeapRegionTypeChange e;
if (e.should_commit()) {
e.set_index(index);
e.set_from(from);
e.set_to(to);
e.set_start(start);
e.set_used(used);
e.commit();
}
}
| Configuration | enabled |
|---|---|
| default | false |
| profiling | false |
| Field | Type | Description |
|---|---|---|
| index | uint | Index |
| from | G1HeapRegionType | From |
| to | G1HeapRegionType | To |
| start | ulong: address | Start |
| used | ulong: bytes | Used |
Examples 2
| from | G1HeapRegionType | Free
|
|---|---|---|
| index | uint | 9
|
| start | ulong: address | 30186405888
|
| startTime | long: millis | 611500730
|
| to | G1HeapRegionType | Eden
|
| used | ulong: bytes | 0
|
| from | G1HeapRegionType | Eden
|
|---|---|---|
| index | uint | 10
|
| start | ulong: address | 30188503040
|
| startTime | long: millis | 604958208
|
| to | G1HeapRegionType | Free
|
| used | ulong: bytes | 0
|
ObjectCount
startTime every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC
Missing in: linux_ShenandoahGC, linux_ZGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/objectCountEventSender.cpp:
template <typename T>
void ObjectCountEventSender::send_event_if_enabled(Klass* klass, jlong count, julong size, const Ticks& timestamp) {
T event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_count(count);
event.set_totalSize(size);
event.set_endtime(timestamp);
event.commit();
}
}
void ObjectCountEventSender::send(const KlassInfoEntry* entry, const Ticks& timestamp) {
Klass* klass = entry->klass();
jlong count = entry->count();
julong total_size = entry->words() * BytesPerWord;
send_event_if_enabled<EventObjectCount>(klass, count, total_size, timestamp);
send_event_if_enabled<EventObjectCountAfterGC>(klass, count, total_size, timestamp);
}
#endif // INCLUDE_SERVICES
| Configuration | enabled | period |
|---|---|---|
| default | false | everyChunk |
| profiling | false | everyChunk |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| objectClass | Class | Object Class |
| count | long | Count |
| totalSize | ulong: bytes | Total Size |
Examples 3
| count | long | 58561
|
|---|---|---|
| gcId | uint | 16
|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | akka/dispatch/NodeMessageQueue
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| location | string | null
|
| name | string | null
|
| version | string | null
|
| name | string | akka/dispatch
|
| startTime | long: millis | 8832793279
|
| totalSize | ulong: bytes | 936976
|
| count | long | 6961
|
|---|---|---|
| gcId | uint | 11
|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1040
|
| name | string | [Ljava/util/regex/Pattern$GroupHead;
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util/regex
|
| startTime | long: millis | 1313125642
|
| totalSize | ulong: bytes | 389816
|
G1HeapRegionInformation
startTime duration every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_G1GC
Missing in: linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Information about a specific heap region in the G1 GC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1HeapRegionEventSender.cpp:
class DumpEventInfoClosure : public HeapRegionClosure {
public:
bool do_heap_region(HeapRegion* r) {
EventG1HeapRegionInformation evt;
evt.set_index(r->hrm_index());
evt.set_type(r->get_trace_type());
evt.set_start((uintptr_t)r->bottom());
evt.set_used(r->used());
evt.commit();
return false;
}
};
class VM_G1SendHeapRegionInfoEvents : public VM_Operation {
virtual void doit() {
DumpEventInfoClosure c;
G1CollectedHeap::heap()->heap_region_iterate(&c);
| Configuration | enabled | period |
|---|---|---|
| default | false | everyChunk |
| profiling | false | everyChunk |
| Field | Type | Description |
|---|---|---|
| index | uint | Index |
| type | G1HeapRegionType | Type |
| start | ulong: address | Start |
| used | ulong: bytes | Used |
Examples 2
ZAllocationStall
default profiling startTime duration eventThread 15 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_ZGC
Missing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC
Time spent waiting for memory to become available
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zPageAllocator.cpp:
// Success
return true;
}
static void check_out_of_memory_during_initialization() {
if (!is_init_completed()) {
vm_exit_during_initialization("java.lang.OutOfMemoryError", "Java heap too small");
}
}
bool ZPageAllocator::alloc_page_stall(ZPageAllocation* allocation) {
ZStatTimer timer(ZCriticalPhaseAllocationStall);
EventZAllocationStall event;
ZPageAllocationStall result;
// We can only block if the VM is fully initialized
check_out_of_memory_during_initialization();
do {
// Start asynchronous GC
ZCollectedHeap::heap()->collect(GCCause::_z_allocation_stall);
// Wait for allocation to complete, fail or request a GC
result = allocation->wait();
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| type | ZPageTypeType | Type |
| size | ulong: bytes | Size |
Examples 1
| size | ulong: bytes | 2097152
|
|---|---|---|
| startTime | long: millis | 19517485616
|
| type | ZPageTypeType | Small
|
ZPageAllocation
default profiling startTime duration eventThread stackTrace 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_ZGC
Missing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC
Allocation of a ZPage
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zPageAllocator.cpp:
free_page_inner(page, false /* reclaimed */);
}
// Adjust capacity and used to reflect the failed capacity increase
const size_t remaining = allocation->size() - freed;
decrease_used(remaining, false /* reclaimed */);
decrease_capacity(remaining, true /* set_max_capacity */);
// Try satisfy stalled allocations
satisfy_stalled();
}
ZPage* ZPageAllocator::alloc_page(uint8_t type, size_t size, ZAllocationFlags flags) {
EventZPageAllocation event;
retry:
ZPageAllocation allocation(type, size, flags);
// Allocate one or more pages from the page cache. If the allocation
// succeeds but the returned pages don't cover the complete allocation,
// then finalize phase is allowed to allocate the remaining memory
// directly from the physical memory manager. Note that this call might
// block in a safepoint if the non-blocking flag is not set.
if (!alloc_page_or_stall(&allocation)) {
// Out of memory
| Configuration | enabled | stackTrace | threshold |
|---|---|---|---|
| default | true | true 15+ | 1 ms |
| profiling | true | true 15+ | 1 ms |
| Field | Type | Description |
|---|---|---|
| type | ZPageTypeType 15+ | Type |
| size | ulong: bytes 15+ | Size |
| flushed | ulong: bytes 17 21 until JDK 25 | Flushed |
| committed | ulong: bytes 15+ | Committed |
| segments | uint 17 21 until JDK 25 | Segments |
| nonBlocking | boolean | Non-blocking |
| noReserve | boolean 11 until JDK 16 | No Reserve |
Examples 2
| committed | ulong: bytes | 0
|
|---|---|---|
| nonBlocking | boolean | false
|
| size | ulong: bytes | 2097152
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 31
|
| lineNumber | int | 1079
|
| method | Method | |
| descriptor | string | (I)Ljava/util/LinkedHashMap;
|
| hidden | boolean | false
|
| modifiers | int | 9
|
| name | string | newLinkedHashMap
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/util/LinkedHashMap
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/util
|
| type | FrameType | JIT compiled
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 835226890
|
| type | ZPageTypeType | Small
|
| committed | ulong: bytes | 0
|
|---|---|---|
| nonBlocking | boolean | false
|
| size | ulong: bytes | 2097152
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 24
|
| lineNumber | int | 494
|
| method | Method | |
| descriptor | string | ()V
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | allocateAndGC
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | app
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/loader
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | jfr_sample/Main
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | app
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | jdk/internal/loader
|
| location | string | null
|
| name | string | null
|
| version | string | null
|
| name | string | jfr_sample
|
| type | FrameType | Interpreted
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 727147913
|
| type | ZPageTypeType | Small
|
ZRelocationSet
default profiling startTime duration eventThread 15 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_ZGC
Missing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zRelocationSetSelector.cpp:
_medium.register_garbage_page(page);
} else {
_large.register_garbage_page(page);
}
}
void ZRelocationSetSelector::select(ZRelocationSet* relocation_set) {
// Select pages to relocate. The resulting relocation set will be
// sorted such that medium pages comes first, followed by small
// pages. Pages within each page group will be semi-sorted by live
// bytes in ascending order. Relocating pages in this order allows
// us to start reclaiming memory more quickly.
EventZRelocationSet event;
// Select pages from each group
_large.select();
_medium.select();
_small.select();
// Populate relocation set
relocation_set->populate(_medium.selected(), _medium.nselected(),
_small.selected(), _small.nselected());
// Send event
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| total | ulong: bytes | Total |
| empty | ulong: bytes | Empty |
| compactingFrom | ulong: bytes until JDK 16 | Compacting From |
| compactingTo | ulong: bytes until JDK 16 | Compacting To |
Examples 2
ZRelocationSetGroup
default profiling startTime duration eventThread 15 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_ZGC
Missing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zRelocationSetSelector.cpp:
// Update statistics
_stats._compacting_from = selected_from * _page_size;
_stats._compacting_to = selected_to * _page_size;
log_trace(gc, reloc)("Relocation Set (%s Pages): " SIZE_FORMAT "->" SIZE_FORMAT ", " SIZE_FORMAT " skipped",
_name, selected_from, selected_to, npages - _nselected);
}
void ZRelocationSetSelectorGroup::select() {
if (is_disabled()) {
return;
}
EventZRelocationSetGroup event;
if (is_selectable()) {
select_inner();
}
// Send event
event.commit(_page_type, _stats.npages(), _stats.total(), _stats.empty(),
_stats.compacting_from(), _stats.compacting_to());
}
ZRelocationSetSelector::ZRelocationSetSelector() :
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| type | ZPageTypeType | Type |
| pages | ulong 17 until JDK 21 | Pages |
| total | ulong: bytes | Total |
| empty | ulong: bytes | Empty |
| compactingFrom | ulong: bytes until JDK 16 | Compacting From |
| compactingTo | ulong: bytes until JDK 16 | Compacting To |
Examples 2
ZStatisticsCounter
experimental startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_ZGC
Missing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zTracer.cpp:
ZTracer::ZTracer() :
GCTracer(Z) {}
void ZTracer::initialize() {
assert(_tracer == NULL, "Already initialized");
_tracer = new (ResourceObj::C_HEAP, mtGC) ZTracer();
JFR_ONLY(register_jfr_type_serializers());
}
void ZTracer::send_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
NoSafepointVerifier nsv;
EventZStatisticsCounter e;
if (e.should_commit()) {
e.set_id(counter.id());
e.set_increment(increment);
e.set_value(value);
e.commit();
}
}
void ZTracer::send_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
NoSafepointVerifier nsv;
src/hotspot/share/gc/z/zTracer.inline.hpp:
#ifndef SHARE_GC_Z_ZTRACER_INLINE_HPP
#define SHARE_GC_Z_ZTRACER_INLINE_HPP
#include "gc/z/zStat.hpp"
#include "gc/z/zTracer.hpp"
#include "jfr/jfrEvents.hpp"
inline ZTracer* ZTracer::tracer() {
return _tracer;
}
inline void ZTracer::report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void ZTracer::report_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
| Configuration | enabled | threshold |
|---|---|---|
| default | false | 0 ms |
| profiling | false | 0 ms |
| Field | Type | Description |
|---|---|---|
| id | ZStatisticsCounterType | Id |
| increment | ulong | Increment |
| value | ulong | Value |
Examples 2
| id | ZStatisticsCounterType | Allocation Rate
|
|---|---|---|
| increment | ulong | 2097152
|
| startTime | long: millis | 540231164
|
| value | ulong | 6291456
|
| id | ZStatisticsCounterType | Allocation Rate
|
|---|---|---|
| increment | ulong | 2097152
|
| startTime | long: millis | 657712661
|
| value | ulong | 12582912
|
ZStatisticsSampler
experimental startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_ZGC
Missing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zTracer.cpp:
EventZStatisticsCounter e;
if (e.should_commit()) {
e.set_id(counter.id());
e.set_increment(increment);
e.set_value(value);
e.commit();
}
}
void ZTracer::send_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
NoSafepointVerifier nsv;
EventZStatisticsSampler e;
if (e.should_commit()) {
e.set_id(sampler.id());
e.set_value(value);
e.commit();
}
}
void ZTracer::send_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
NoSafepointVerifier nsv;
EventZThreadPhase e(UNTIMED);
src/hotspot/share/gc/z/zTracer.inline.hpp:
inline ZTracer* ZTracer::tracer() {
return _tracer;
}
inline void ZTracer::report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void ZTracer::report_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadPhase::is_enabled()) {
send_thread_phase(name, start, end);
}
}
inline ZTraceThreadPhase::ZTraceThreadPhase(const char* name) :
| Configuration | enabled | threshold |
|---|---|---|
| default | false | 0 ms |
| profiling | false | 0 ms |
| Field | Type | Description |
|---|---|---|
| id | ZStatisticsSamplerType | Id |
| value | ulong | Value |
Examples 2
| id | ZStatisticsSamplerType | Concurrent Roots JavaThreads
|
|---|---|---|
| startTime | long: millis | 384497046
|
| value | ulong | 1702
|
| id | ZStatisticsSamplerType | Concurrent Weak Roots OopStorageSet
|
|---|---|---|
| startTime | long: millis | 428813592
|
| value | ulong | 44377
|
ZThreadPhase
experimental startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_ZGC
Missing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zTracer.cpp:
void ZTracer::send_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
NoSafepointVerifier nsv;
EventZStatisticsSampler e;
if (e.should_commit()) {
e.set_id(sampler.id());
e.set_value(value);
e.commit();
}
}
void ZTracer::send_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
NoSafepointVerifier nsv;
EventZThreadPhase e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current_or_undefined());
e.set_name(name);
e.set_starttime(start);
e.set_endtime(end);
e.commit();
}
}
src/hotspot/share/gc/z/zTracer.inline.hpp:
inline void ZTracer::report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void ZTracer::report_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadPhase::is_enabled()) {
send_thread_phase(name, start, end);
}
}
inline ZTraceThreadPhase::ZTraceThreadPhase(const char* name) :
_start(Ticks::now()),
_name(name) {}
inline ZTraceThreadPhase::~ZTraceThreadPhase() {
ZTracer::tracer()->report_thread_phase(_name, _start, Ticks::now());
}
| Configuration | enabled | threshold |
|---|---|---|
| default | false | 0 ms |
| profiling | false | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| name | string | Name |
Examples 2
ZUncommit
default profiling startTime duration eventThread 15 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Uncommitting of memory
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zUncommitter.cpp:
bool ZUncommitter::should_continue() const {
ZLocker<ZConditionLock> locker(&_lock);
return !_stop;
}
void ZUncommitter::run_service() {
uint64_t timeout = 0;
while (wait(timeout)) {
EventZUncommit event;
size_t uncommitted = 0;
while (should_continue()) {
// Uncommit chunk
const size_t flushed = _page_allocator->uncommit(&timeout);
if (flushed == 0) {
// Done
break;
}
uncommitted += flushed;
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| uncommitted | ulong: bytes | Uncommitted |
ZUnmap
default profiling startTime duration eventThread 17 21 until JDK 25
Category: Java Virtual Machine / GC / Detailed
Unmapping of memory
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zUnmapper.cpp:
ZPage* const page = _queue.remove_first();
if (page != NULL) {
return page;
}
_lock.wait();
}
}
void ZUnmapper::do_unmap_and_destroy_page(ZPage* page) const {
EventZUnmap event;
const size_t unmapped = page->size();
// Unmap and destroy
_page_allocator->unmap_page(page);
_page_allocator->destroy_page(page);
// Send event
event.commit(unmapped);
}
void ZUnmapper::unmap_and_destroy_page(ZPage* page) {
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| unmapped | ulong: bytes | Unmapped |
ShenandoahHeapRegionStateChange
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_ShenandoahGC
Missing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ZGC
Information about a Shenandoah heap region state change
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp:
void ShenandoahHeapRegion::do_uncommit() {
ShenandoahHeap* heap = ShenandoahHeap::heap();
if (!heap->is_heap_region_special() && !os::uncommit_memory((char *) bottom(), RegionSizeBytes)) {
report_java_out_of_memory("Unable to uncommit region");
}
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((unsigned) index());
evt.set_start((uintptr_t)bottom());
evt.set_used(used());
evt.set_from(_state);
evt.set_to(to);
evt.commit();
}
_state = to;
}
| Configuration | enabled |
|---|---|
| default | false |
| profiling | false |
| Field | Type | Description |
|---|---|---|
| index | uint | Index |
| from | ShenandoahHeapRegionState | From |
| to | ShenandoahHeapRegionState | To |
| start | ulong: address | Start |
| used | ulong: bytes | Used |
Examples 2
| from | ShenandoahHeapRegionState | Empty Uncommitted
|
|---|---|---|
| index | uint | 3506
|
| start | ulong: address | 33843838976
|
| startTime | long: millis | 12914532571
|
| to | ShenandoahHeapRegionState | Regular
|
| used | ulong: bytes | 0
|
| from | ShenandoahHeapRegionState | Empty Uncommitted
|
|---|---|---|
| index | uint | 3618
|
| start | ulong: address | 33961279488
|
| startTime | long: millis | 689434499
|
| to | ShenandoahHeapRegionState | Regular
|
| used | ulong: bytes | 0
|
ShenandoahHeapRegionInformation
startTime duration every chunk 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Appearing in: linux_ShenandoahGC
Missing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ZGC
Information about a specific heap region in the Shenandoah GC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shenandoah/shenandoahJfrSupport.cpp:
void ShenandoahJFRSupport::register_jfr_type_serializers() {
JfrSerializer::register_serializer(TYPE_SHENANDOAHHEAPREGIONSTATE,
true,
new ShenandoahHeapRegionStateConstant());
}
#endif
class ShenandoahDumpHeapRegionInfoClosure : public ShenandoahHeapRegionClosure {
public:
virtual void heap_region_do(ShenandoahHeapRegion* r) {
EventShenandoahHeapRegionInformation evt;
evt.set_index((unsigned) r->index());
evt.set_state((u8)r->state());
evt.set_start((uintptr_t)r->bottom());
evt.set_used(r->used());
evt.commit();
}
};
void VM_ShenandoahSendHeapRegionInfoEvents::doit() {
ShenandoahDumpHeapRegionInfoClosure c;
ShenandoahHeap::heap()->heap_region_iterate(&c);
| Configuration | enabled | period |
|---|---|---|
| default | false | everyChunk |
| profiling | false | everyChunk |
| Field | Type | Description |
|---|---|---|
| index | uint | Index |
| state | ShenandoahHeapRegionState | State |
| start | ulong: address | Start |
| used | ulong: bytes | Used |
Examples 2
JVM: GC: Heap
GCHeapSummary
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Heap
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
space.set_used(summary.used());
space.set_size(summary.size());
return space;
}
class GCHeapSummaryEventSender : public GCHeapSummaryVisitor {
GCWhen::Type _when;
public:
GCHeapSummaryEventSender(GCWhen::Type when) : _when(when) {}
void visit(const GCHeapSummary* heap_summary) const {
const VirtualSpaceSummary& heap_space = heap_summary->heap();
EventGCHeapSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when((u1)_when);
e.set_heapSpace(to_struct(heap_space));
e.set_heapUsed(heap_summary->used());
e.commit();
}
}
void visit(const G1HeapSummary* g1_heap_summary) const {
visit((GCHeapSummary*)g1_heap_summary);
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| when | GCWhen | When |
| heapSpace | VirtualSpace struct | Heap Space |
| heapUsed | ulong: bytes | Heap Used Bytes allocated by objects in the heap |
Examples 3
| gcId | uint | 34
|
|---|---|---|
| heapSpace | VirtualSpace | |
| committedEnd | ulong: address | 31788630016
|
| committedSize | ulong: bytes | 1621098496
|
| reservedEnd | ulong: address | 34359738368
|
| reservedSize | ulong: bytes | 4192206848
|
| start | ulong: address | 30167531520
|
| heapUsed | ulong: bytes | 1072228624
|
| startTime | long: millis | 25144454967
|
| when | GCWhen | Before GC
|
| gcId | uint | 34
|
|---|---|---|
| heapSpace | VirtualSpace | |
| committedEnd | ulong: address | 30266097664
|
| committedSize | ulong: bytes | 98566144
|
| reservedEnd | ulong: address | 34359738368
|
| reservedSize | ulong: bytes | 4192206848
|
| start | ulong: address | 30167531520
|
| heapUsed | ulong: bytes | 28736072
|
| startTime | long: millis | 5441504625
|
| when | GCWhen | After GC
|
| gcId | uint | 5
|
|---|---|---|
| heapSpace | VirtualSpace | |
| committedEnd | ulong: address | 30314332160
|
| committedSize | ulong: bytes | 146800640
|
| reservedEnd | ulong: address | 34359738368
|
| reservedSize | ulong: bytes | 4192206848
|
| start | ulong: address | 30167531520
|
| heapUsed | ulong: bytes | 13457928
|
| startTime | long: millis | 585474754
|
| when | GCWhen | After GC
|
MetaspaceSummary
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Heap
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
static JfrStructMetaspaceSizes to_struct(const MetaspaceSizes& sizes) {
JfrStructMetaspaceSizes meta_sizes;
meta_sizes.set_committed(sizes.committed());
meta_sizes.set_used(sizes.used());
meta_sizes.set_reserved(sizes.reserved());
return meta_sizes;
}
void GCTracer::send_meta_space_summary_event(GCWhen::Type when, const MetaspaceSummary& meta_space_summary) const {
EventMetaspaceSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when((u1) when);
e.set_gcThreshold(meta_space_summary.capacity_until_GC());
e.set_metaspace(to_struct(meta_space_summary.meta_space()));
e.set_dataSpace(to_struct(meta_space_summary.data_space()));
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| when | GCWhen | When |
| gcThreshold | ulong: bytes | GC Threshold |
| metaspace | MetaspaceSizes struct | Total |
| dataSpace | MetaspaceSizes struct | Data |
| classSpace | MetaspaceSizes struct | Class |
Examples 3
| classSpace | MetaspaceSizes | |
|---|---|---|
| committed | ulong: bytes | 8519680
|
| reserved | ulong: bytes | 1073741824
|
| used | ulong: bytes | 8380968
|
| dataSpace | MetaspaceSizes | |
| committed | ulong: bytes | 35651584
|
| reserved | ulong: bytes | 67108864
|
| used | ulong: bytes | 35405048
|
| gcId | uint | 27
|
| gcThreshold | ulong: bytes | 73662464
|
| metaspace | MetaspaceSizes | |
| committed | ulong: bytes | 44171264
|
| reserved | ulong: bytes | 1140850688
|
| used | ulong: bytes | 43786016
|
| startTime | long: millis | 18182108955
|
| when | GCWhen | After GC
|
| classSpace | MetaspaceSizes | |
|---|---|---|
| committed | ulong: bytes | 3014656
|
| reserved | ulong: bytes | 1073741824
|
| used | ulong: bytes | 2853344
|
| dataSpace | MetaspaceSizes | |
| committed | ulong: bytes | 11993088
|
| reserved | ulong: bytes | 67108864
|
| used | ulong: bytes | 11870896
|
| gcId | uint | 34
|
| gcThreshold | ulong: bytes | 25034752
|
| metaspace | MetaspaceSizes | |
| committed | ulong: bytes | 15007744
|
| reserved | ulong: bytes | 1140850688
|
| used | ulong: bytes | 14724240
|
| startTime | long: millis | 1676484477
|
| when | GCWhen | After GC
|
| classSpace | MetaspaceSizes | |
|---|---|---|
| committed | ulong: bytes | 2621440
|
| reserved | ulong: bytes | 1073741824
|
| used | ulong: bytes | 2565776
|
| dataSpace | MetaspaceSizes | |
| committed | ulong: bytes | 11337728
|
| reserved | ulong: bytes | 67108864
|
| used | ulong: bytes | 11240328
|
| gcId | uint | 22
|
| gcThreshold | ulong: bytes | 22872064
|
| metaspace | MetaspaceSizes | |
| committed | ulong: bytes | 13959168
|
| reserved | ulong: bytes | 1140850688
|
| used | ulong: bytes | 13806104
|
| startTime | long: millis | 2106225082
|
| when | GCWhen | After GC
|
PSHeapSummary
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Heap
Appearing in: linux_ParallelGC
Missing in: linux_G1GC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
void visit(const PSHeapSummary* ps_heap_summary) const {
visit((GCHeapSummary*)ps_heap_summary);
const VirtualSpaceSummary& old_summary = ps_heap_summary->old();
const SpaceSummary& old_space = ps_heap_summary->old_space();
const VirtualSpaceSummary& young_summary = ps_heap_summary->young();
const SpaceSummary& eden_space = ps_heap_summary->eden();
const SpaceSummary& from_space = ps_heap_summary->from();
const SpaceSummary& to_space = ps_heap_summary->to();
EventPSHeapSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when((u1)_when);
e.set_oldSpace(to_struct(ps_heap_summary->old()));
e.set_oldObjectSpace(to_struct(ps_heap_summary->old_space()));
e.set_youngSpace(to_struct(ps_heap_summary->young()));
e.set_edenSpace(to_struct(ps_heap_summary->eden()));
e.set_fromSpace(to_struct(ps_heap_summary->from()));
e.set_toSpace(to_struct(ps_heap_summary->to()));
e.commit();
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| when | GCWhen | When |
| oldSpace | VirtualSpace struct | Old Space |
| oldObjectSpace | ObjectSpace struct | Old Object Space |
| youngSpace | VirtualSpace struct | Young Space |
| edenSpace | ObjectSpace struct | Eden Space |
| fromSpace | ObjectSpace struct | From Space |
| toSpace | ObjectSpace struct | To Space |
Examples 2
| edenSpace | ObjectSpace | |
|---|---|---|
| end | ulong: address | 34208743424
|
| size | ulong: bytes | 1245708288
|
| start | ulong: address | 32963035136
|
| used | ulong: bytes | 0
|
| fromSpace | ObjectSpace | |
| end | ulong: address | 34342961152
|
| size | ulong: bytes | 33554432
|
| start | ulong: address | 34309406720
|
| used | ulong: bytes | 33521792
|
| gcId | uint | 18
|
| oldObjectSpace | ObjectSpace | |
| end | ulong: address | 30429675520
|
| size | ulong: bytes | 262144000
|
| start | ulong: address | 30167531520
|
| used | ulong: bytes | 261678104
|
| oldSpace | VirtualSpace | |
| committedEnd | ulong: address | 30429675520
|
| committedSize | ulong: bytes | 262144000
|
| reservedEnd | ulong: address | 32963035136
|
| reservedSize | ulong: bytes | 2795503616
|
| start | ulong: address | 30167531520
|
| startTime | long: millis | 10848802371
|
| toSpace | ObjectSpace | |
| end | ulong: address | 34284240896
|
| size | ulong: bytes | 75497472
|
| start | ulong: address | 34208743424
|
| used | ulong: bytes | 0
|
| when | GCWhen | After GC
|
| youngSpace | VirtualSpace | |
| committedEnd | ulong: address | 34359738368
|
| committedSize | ulong: bytes | 1396703232
|
| reservedEnd | ulong: address | 34359738368
|
| reservedSize | ulong: bytes | 1396703232
|
| start | ulong: address | 32963035136
|
| edenSpace | ObjectSpace | |
|---|---|---|
| end | ulong: address | 33478934528
|
| size | ulong: bytes | 515899392
|
| start | ulong: address | 32963035136
|
| used | ulong: bytes | 0
|
| fromSpace | ObjectSpace | |
| end | ulong: address | 33491517440
|
| size | ulong: bytes | 6291456
|
| start | ulong: address | 33485225984
|
| used | ulong: bytes | 0
|
| gcId | uint | 36
|
| oldObjectSpace | ObjectSpace | |
| end | ulong: address | 30343692288
|
| size | ulong: bytes | 176160768
|
| start | ulong: address | 30167531520
|
| used | ulong: bytes | 6529440
|
| oldSpace | VirtualSpace | |
| committedEnd | ulong: address | 30343692288
|
| committedSize | ulong: bytes | 176160768
|
| reservedEnd | ulong: address | 32963035136
|
| reservedSize | ulong: bytes | 2795503616
|
| start | ulong: address | 30167531520
|
| startTime | long: millis | 1742130049
|
| toSpace | ObjectSpace | |
| end | ulong: address | 33485225984
|
| size | ulong: bytes | 6291456
|
| start | ulong: address | 33478934528
|
| used | ulong: bytes | 0
|
| when | GCWhen | After GC
|
| youngSpace | VirtualSpace | |
| committedEnd | ulong: address | 33491517440
|
| committedSize | ulong: bytes | 528482304
|
| reservedEnd | ulong: address | 34359738368
|
| reservedSize | ulong: bytes | 1396703232
|
| start | ulong: address | 32963035136
|
G1HeapSummary
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Heap
Appearing in: linux_G1GC
Missing in: linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
EventGCHeapSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when((u1)_when);
e.set_heapSpace(to_struct(heap_space));
e.set_heapUsed(heap_summary->used());
e.commit();
}
}
void visit(const G1HeapSummary* g1_heap_summary) const {
visit((GCHeapSummary*)g1_heap_summary);
EventG1HeapSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when((u1)_when);
e.set_edenUsedSize(g1_heap_summary->edenUsed());
e.set_edenTotalSize(g1_heap_summary->edenCapacity());
e.set_survivorUsedSize(g1_heap_summary->survivorUsed());
e.set_numberOfRegions(g1_heap_summary->numberOfRegions());
e.commit();
}
}
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| when | GCWhen | When |
| edenUsedSize | ulong: bytes | Eden Used Size |
| edenTotalSize | ulong: bytes | Eden Total Size |
| survivorUsedSize | ulong: bytes | Survivor Used Size |
| numberOfRegions | uint | Number of Regions |
Examples 2
JVM: GC: Metaspace
MetaspaceGCThreshold
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Metaspace
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/memory/metaspaceTracer.cpp:
void MetaspaceTracer::report_gc_threshold(size_t old_val,
size_t new_val,
MetaspaceGCThresholdUpdater::Type updater) const {
EventMetaspaceGCThreshold event;
if (event.should_commit()) {
event.set_oldValue(old_val);
event.set_newValue(new_val);
event.set_updater((u1)updater);
event.commit();
}
}
void MetaspaceTracer::report_metaspace_allocation_failure(ClassLoaderData *cld,
size_t word_size,
MetaspaceObj::Type objtype,
Metaspace::MetadataType mdtype) const {
send_allocation_failure_event<EventMetaspaceAllocationFailure>(cld, word_size, objtype, mdtype);
}
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| oldValue | ulong: bytes | Old Value |
| newValue | ulong: bytes | New Value |
| updater | GCThresholdUpdater | Updater |
Examples 3
MetaspaceAllocationFailure
default profiling startTime stackTrace 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Metaspace
Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ZGC
Missing in: linux_ShenandoahGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/memory/metaspaceTracer.cpp:
EventMetaspaceGCThreshold event;
if (event.should_commit()) {
event.set_oldValue(old_val);
event.set_newValue(new_val);
event.set_updater((u1)updater);
event.commit();
}
}
void MetaspaceTracer::report_metaspace_allocation_failure(ClassLoaderData *cld,
size_t word_size,
MetaspaceObj::Type objtype,
Metaspace::MetadataType mdtype) const {
send_allocation_failure_event<EventMetaspaceAllocationFailure>(cld, word_size, objtype, mdtype);
}
void MetaspaceTracer::report_metadata_oom(ClassLoaderData *cld,
size_t word_size,
MetaspaceObj::Type objtype,
Metaspace::MetadataType mdtype) const {
send_allocation_failure_event<EventMetaspaceOOM>(cld, word_size, objtype, mdtype);
}
template <typename E>
void MetaspaceTracer::send_allocation_failure_event(ClassLoaderData *cld,
| Configuration | enabled | stackTrace |
|---|---|---|
| default | true | true |
| profiling | true | true |
| Field | Type | Description |
|---|---|---|
| classLoader | ClassLoader | Class Loader |
| hiddenClassLoader | boolean 15+ | Hidden Class Loader |
| size | ulong: bytes | Size |
| metadataType | MetadataType | Metadata Type |
| metaspaceObjectType | MetaspaceObjectType | Metaspace Object Type |
Examples 3
| classLoader | ClassLoader | |
|---|---|---|
| name | string | bootstrap
|
| type | Class | null
|
| hiddenClassLoader | boolean | false
|
| metadataType | MetadataType | Metadata
|
| metaspaceObjectType | MetaspaceObjectType | ConstMethod
|
| size | ulong: bytes | 96
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 33
|
| lineNumber | int | 68
|
| method | Method | |
| descriptor | string | (Z)V
|
| hidden | boolean | false
|
| modifiers | int | 2
|
| name | string | <init>
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | jdk/xml/internal/JdkXmlConfig
|
| package | Package | |
| exported | boolean | false
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.xml
|
| name | string | java.xml
|
| version | string | 25.0.3
|
| name | string | jdk/xml/internal
|
| type | FrameType | Interpreted
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 4493123753
|
| classLoader | ClassLoader | |
|---|---|---|
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| hiddenClassLoader | boolean | false
|
| metadataType | MetadataType | Metadata
|
| metaspaceObjectType | MetaspaceObjectType | TypeArrayU8
|
| size | ulong: bytes | 88
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | (Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class;
|
| hidden | boolean | false
|
| modifiers | int | 264
|
| name | string | defineClass1
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1025
|
| name | string | java/lang/ClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/lang
|
| type | FrameType | Native
|
| … | ||
| truncated | boolean | true
|
| startTime | long: millis | 4063697112
|
| classLoader | ClassLoader | |
|---|---|---|
| name | string | null
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | java/net/URLClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/net
|
| hiddenClassLoader | boolean | false
|
| metadataType | MetadataType | Metadata
|
| metaspaceObjectType | MetaspaceObjectType | ConstantPool
|
| size | ulong: bytes | 7928
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | (Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class;
|
| hidden | boolean | false
|
| modifiers | int | 264
|
| name | string | defineClass1
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1025
|
| name | string | java/lang/ClassLoader
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.base
|
| name | string | java.base
|
| version | string | 25.0.3
|
| name | string | java/lang
|
| type | FrameType | Native
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 32124132844
|
MetaspaceOOM
default profiling startTime stackTrace 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Metaspace
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/memory/metaspaceTracer.cpp:
void MetaspaceTracer::report_metaspace_allocation_failure(ClassLoaderData *cld,
size_t word_size,
MetaspaceObj::Type objtype,
Metaspace::MetadataType mdtype) const {
send_allocation_failure_event<EventMetaspaceAllocationFailure>(cld, word_size, objtype, mdtype);
}
void MetaspaceTracer::report_metadata_oom(ClassLoaderData *cld,
size_t word_size,
MetaspaceObj::Type objtype,
Metaspace::MetadataType mdtype) const {
send_allocation_failure_event<EventMetaspaceOOM>(cld, word_size, objtype, mdtype);
}
template <typename E>
void MetaspaceTracer::send_allocation_failure_event(ClassLoaderData *cld,
size_t word_size,
MetaspaceObj::Type objtype,
Metaspace::MetadataType mdtype) const {
E event;
if (event.should_commit()) {
event.set_classLoader(cld);
event.set_hiddenClassLoader(cld->has_class_mirror_holder());
| Configuration | enabled | stackTrace |
|---|---|---|
| default | true | true |
| profiling | true | true |
| Field | Type | Description |
|---|---|---|
| classLoader | ClassLoader | Class Loader |
| hiddenClassLoader | boolean 15+ | Hidden Class Loader |
| size | ulong: bytes | Size |
| metadataType | MetadataType | Metadata Type |
| metaspaceObjectType | MetaspaceObjectType | Metaspace Object Type |
MetaspaceChunkFreeListSummary
default profiling startTime 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Metaspace
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
void GCTracer::send_reference_stats_event(ReferenceType type, size_t count) const {
EventGCReferenceStatistics e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type((u1)type);
e.set_count(count);
e.commit();
}
}
void GCTracer::send_metaspace_chunk_free_list_summary(GCWhen::Type when, Metaspace::MetadataType mdtype,
const MetaspaceChunkFreeListSummary& summary) const {
EventMetaspaceChunkFreeListSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when(when);
e.set_metadataType(mdtype);
e.set_specializedChunks(summary.num_specialized_chunks());
e.set_specializedChunksTotalSize(summary.specialized_chunks_size_in_bytes());
e.set_smallChunks(summary.num_small_chunks());
e.set_smallChunksTotalSize(summary.small_chunks_size_in_bytes());
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| when | GCWhen | When |
| metadataType | MetadataType | Metadata Type |
| specializedChunks | ulong | Specialized Chunks |
| specializedChunksTotalSize | ulong: bytes | Specialized Chunks Total Size |
| smallChunks | ulong | Small Chunks |
| smallChunksTotalSize | ulong: bytes | Small Chunks Total Size |
| mediumChunks | ulong | Medium Chunks |
| mediumChunksTotalSize | ulong: bytes | Medium Chunks Total Size |
| humongousChunks | ulong | Humongous Chunks |
| humongousChunksTotalSize | ulong: bytes | Humongous Chunks Total Size |
Examples 3
| gcId | uint | 22
|
|---|---|---|
| humongousChunks | ulong | 0
|
| humongousChunksTotalSize | ulong: bytes | 0
|
| mediumChunks | ulong | 0
|
| mediumChunksTotalSize | ulong: bytes | 0
|
| metadataType | MetadataType | Metadata
|
| smallChunks | ulong | 0
|
| smallChunksTotalSize | ulong: bytes | 0
|
| specializedChunks | ulong | 0
|
| specializedChunksTotalSize | ulong: bytes | 0
|
| startTime | long: millis | 1409616568
|
| when | GCWhen | Before GC
|
| gcId | uint | 21
|
|---|---|---|
| humongousChunks | ulong | 0
|
| humongousChunksTotalSize | ulong: bytes | 0
|
| mediumChunks | ulong | 0
|
| mediumChunksTotalSize | ulong: bytes | 0
|
| metadataType | MetadataType | Metadata
|
| smallChunks | ulong | 0
|
| smallChunksTotalSize | ulong: bytes | 0
|
| specializedChunks | ulong | 0
|
| specializedChunksTotalSize | ulong: bytes | 0
|
| startTime | long: millis | 14269983870
|
| when | GCWhen | After GC
|
| gcId | uint | 12
|
|---|---|---|
| humongousChunks | ulong | 0
|
| humongousChunksTotalSize | ulong: bytes | 0
|
| mediumChunks | ulong | 0
|
| mediumChunksTotalSize | ulong: bytes | 0
|
| metadataType | MetadataType | Metadata
|
| smallChunks | ulong | 0
|
| smallChunksTotalSize | ulong: bytes | 0
|
| specializedChunks | ulong | 0
|
| specializedChunksTotalSize | ulong: bytes | 0
|
| startTime | long: millis | 1400006822
|
| when | GCWhen | Before GC
|
JVM: GC: Phases
GCPhasePause
default profiling startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Phases
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_gcThreshold(meta_space_summary.capacity_until_GC());
e.set_metaspace(to_struct(meta_space_summary.meta_space()));
e.set_dataSpace(to_struct(meta_space_summary.data_space()));
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels for ConcurrentPhase");
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| name | string | Name |
Examples 3
GCPhasePauseLevel1
default profiling startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Phases
Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC
Missing in: linux_ZGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_metaspace(to_struct(meta_space_summary.meta_space()));
e.set_dataSpace(to_struct(meta_space_summary.data_space()));
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| name | string | Name |
Examples 3
GCPhasePauseLevel2
default profiling startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Phases
Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC
Missing in: linux_ShenandoahGC, linux_ZGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_dataSpace(to_struct(meta_space_summary.data_space()));
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| name | string | Name |
Examples 3
GCPhasePauseLevel3
startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Phases
Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC
Missing in: linux_ShenandoahGC, linux_ZGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
| Configuration | enabled | threshold |
|---|---|---|
| default | false | 0 ms |
| profiling | false | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| name | string | Name |
Examples 3
GCPhasePauseLevel4
startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Phases
Appearing in: linux_G1GC, linux_ParallelGC
Missing in: linux_SerialGC, linux_ShenandoahGC, linux_ZGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
default: /* Ignore sending this phase */ break;
| Configuration | enabled | threshold |
|---|---|---|
| default | false | 0 ms |
| profiling | false | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| name | string | Name |
Examples 2
GCPhaseConcurrent
default profiling startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / GC / Phases
Appearing in: linux_G1GC, linux_ShenandoahGC, linux_ZGC
Missing in: linux_ParallelGC, linux_SerialGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shenandoah/shenandoahUtils.hpp:
ShenandoahWorkerSession(uint worker_id);
~ShenandoahWorkerSession();
public:
static inline uint worker_id() {
Thread* thr = Thread::current();
uint id = ShenandoahThreadLocalData::worker_id(thr);
assert(id != ShenandoahThreadLocalData::INVALID_WORKER_ID, "Worker session has not been created");
return id;
}
};
class ShenandoahConcurrentWorkerSession : public ShenandoahWorkerSession {
private:
EventGCPhaseConcurrent _event;
public:
ShenandoahConcurrentWorkerSession(uint worker_id) : ShenandoahWorkerSession(worker_id) { }
~ShenandoahConcurrentWorkerSession();
};
class ShenandoahParallelWorkerSession : public ShenandoahWorkerSession {
private:
EventGCPhaseParallel _event;
public:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
public:
template<typename T>
void send_phase(GCPhase* phase) {
T event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| name | string | Name |