Introduction
The following are the events for OpenJDK 27 (jdk-27+24, 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:
if (_jt != nullptr) {
assert(_jt->thread_state() == _thread_in_vm, "invariant");
_jt->set_thread_state(_thread_in_native);
}
}
};
static void post_events(bool exception_handler, bool oom, Thread * thread) {
if (exception_handler) {
EventShutdown e;
e.set_reason(oom ? "CrashOnOutOfMemoryError" : "VM Error");
e.commit();
}
EventDumpReason event;
event.set_reason(exception_handler && oom ? "CrashOnOutOfMemoryError" : exception_handler ? "Crash" : "Out of Memory");
event.set_recordingId(-1);
event.commit();
}
static volatile traceid _jfr_shutdown_tid = 0;
static bool guard_reentrancy() {
const traceid shutdown_tid = AtomicAccess::load(&_jfr_shutdown_tid);
if (shutdown_tid == max_julong) {
// Someone tried but did not have a proper thread for the purpose.
| 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 != nullptr, "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 != nullptr, "invariant");
const size_t unflushed_size = buffer->unflushed_size();
buffer->reinitialize();
src/hotspot/share/jfr/jni/jfrJniMethod.cpp:
JVM_ENTRY_NO_ENV(jlong, jfr_host_memory_usage(JNIEnv* env, jclass jvm))
physical_memory_size_type memory_usage = 0;
if (!os::Machine::used_memory(memory_usage)) {
// Return -1 to signal failure to get memory usage.
return static_cast<jlong>(-1);
}
return static_cast<jlong>(memory_usage);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_emit_data_loss(JNIEnv* env, jclass jvm, jlong bytes))
EventDataLoss::commit(bytes, min_jlong);
JVM_END
JVM_ENTRY_NO_ENV(jlong, jfr_register_stack_filter(JNIEnv* env, jclass jvm, jobjectArray classes, jobjectArray methods))
return JfrStackFilterRegistry::add(classes, methods, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_unregister_stack_filter(JNIEnv* env, jclass jvm, jlong id))
JfrStackFilterRegistry::remove(id);
JVM_END
NO_TRANSITION(jlong, jfr_nanos_now(JNIEnv* env, jclass jvm))
| 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/internal/PlatformRecorder.java:
// and check for missing files. This will emit more error logs that can be seen in subsequent recordings.
for (PlatformRecording r : getRecordings()) {
r.removeNonExistantPaths();
}
}
}
// Decrease initial reference count
chunk.release();
FilePurger.purge();
}
private void writeMetaEvents() {
long timestamp = JVM.counterTime();
if (ActiveRecordingEvent.enabled()) {
for (PlatformRecording r : getRecordings()) {
if (r.getState() == RecordingState.RUNNING && r.shouldWriteMetadataEvent()) {
WriteablePath path = r.getDestination();
Duration age = r.getMaxAge();
Duration flush = r.getFlushInterval();
Long size = r.getMaxSize();
Instant rStart = r.getStartTime();
Duration rDuration = r.getDuration();
ActiveRecordingEvent.commit(
timestamp,
r.getId(),
r.getName(),
path == null ? null : path.getRealPathText(),
r.isToDisk(),
age == null ? Long.MAX_VALUE : age.toMillis(),
flush == null ? Long.MAX_VALUE : flush.toMillis(),
size == null ? Long.MAX_VALUE : size,
rStart == null ? Long.MAX_VALUE : rStart.toEpochMilli(),
rDuration == null ? Long.MAX_VALUE : rDuration.toMillis()
);
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
public final class JDKEvents {
private static final Class<?>[] eventClasses = {
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
// jdk.internal.event.* classes need their mirror
// event class to be listed in the MirrorEvents class.
jdk.internal.event.DeserializationEvent.class,
jdk.internal.event.ErrorThrownEvent.class,
jdk.internal.event.ExceptionStatisticsEvent.class,
jdk.internal.event.ExceptionThrownEvent.class,
jdk.internal.event.FileForceEvent.class,
jdk.internal.event.FileReadEvent.class,
jdk.internal.event.FileWriteEvent.class,
jdk.internal.event.ProcessStartEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
src/jdk.jfr/share/classes/jdk/jfr/events/ActiveRecordingEvent.java:
@Name(Type.EVENT_NAME_PREFIX + "ActiveRecording")
@Label("Flight Recording")
@Category("Flight Recorder")
@RemoveFields({"duration", "eventThread", "stackTrace"})
public final class ActiveRecordingEvent extends AbstractJDKEvent {
// The order of these fields must be the same as the parameters in
// commit(... , long, String, String, long, long, long, long, long)
@Label("Id")
public long id;
@Label("Name")
public String name;
@Label("Destination")
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| id | long | Id |
| name | string | Name |
| destination | string | Destination |
| disk | boolean 21+ | To Disk |
| 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
|
|---|---|---|
| disk | boolean | true
|
| 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 | 110939023946
|
| destination | string | /home/runner/work/jfrevents/jfrevents/jfr/sample_linux_UseG1GC_events.jfr
|
|---|---|---|
| disk | boolean | true
|
| 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
|
|---|---|---|
| disk | boolean | true
|
| 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 | 106733675676
|
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/internal/PlatformRecorder.java:
r.getId(),
r.getName(),
path == null ? null : path.getRealPathText(),
r.isToDisk(),
age == null ? Long.MAX_VALUE : age.toMillis(),
flush == null ? Long.MAX_VALUE : flush.toMillis(),
size == null ? Long.MAX_VALUE : size,
rStart == null ? Long.MAX_VALUE : rStart.toEpochMilli(),
rDuration == null ? Long.MAX_VALUE : rDuration.toMillis()
);
}
}
}
if (ActiveSettingEvent.enabled()) {
for (EventControl ec : MetadataRepository.getInstance().getEventControls()) {
ec.writeActiveSettingEvent(timestamp);
}
}
}
private void periodicTask() {
if (!JVMSupport.hasJFR()) {
return;
}
while (true) {
src/jdk.jfr/share/classes/jdk/jfr/internal/EventControl.java:
void writeActiveSettingEvent(long timestamp) {
if (!type.isRegistered()) {
return;
}
for (NamedControl nc : namedControls) {
if (nc.control.isVisible(type.hasEventHook()) && type.isVisible()) {
String value = nc.control.getLastValue();
if (value == null) {
value = nc.control.getDefaultValue();
}
if (ActiveSettingEvent.enabled()) {
ActiveSettingEvent.commit(timestamp, type.getId(), nc.name(), value);
}
}
}
}
public ArrayList<NamedControl> getNamedControls() {
return namedControls;
}
public PlatformEventType getEventType() {
return type;
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
public final class JDKEvents {
private static final Class<?>[] eventClasses = {
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
// jdk.internal.event.* classes need their mirror
// event class to be listed in the MirrorEvents class.
jdk.internal.event.DeserializationEvent.class,
jdk.internal.event.ErrorThrownEvent.class,
jdk.internal.event.ExceptionStatisticsEvent.class,
jdk.internal.event.ExceptionThrownEvent.class,
jdk.internal.event.FileForceEvent.class,
jdk.internal.event.FileReadEvent.class,
jdk.internal.event.FileWriteEvent.class,
jdk.internal.event.ProcessStartEvent.class,
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.internal.RemoveFields;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "ActiveSetting")
@Label("Recording Setting")
@Category("Flight Recorder")
@RemoveFields({"duration", "eventThread", "stackTrace"})
public final class ActiveSettingEvent extends AbstractJDKEvent {
// The order of these fields must be the same as the parameters in
// commit(... , long, String, String)
@Label("Event Id")
public long id;
@Label("Setting Name")
public String name;
@Label("Setting Value")
| 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:
PeriodicType JfrPeriodicEventSet::type(void) {
return _type;
}
TRACE_REQUEST_FUNC(ResidentSetSize) {
os::jfr_report_memory_info();
}
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/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 | 16515859756
|
| 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 | 126448777996
|
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(static_cast<unsigned int>(conf.new_ratio()));
event.commit();
}
TRACE_REQUEST_FUNC(InitialSystemProperty) {
SystemProperty* p = Arguments::system_properties();
JfrTicks time_stamp = JfrTicks::now();
while (p != nullptr) {
if (!p->internal()) {
EventInitialSystemProperty event(UNTIMED);
event.set_key(p->key());
event.set_value(p->value());
event.set_starttime(time_stamp);
event.set_endtime(time_stamp);
event.commit();
}
p = p->next();
}
}
TRACE_REQUEST_FUNC(ThreadAllocationStatistics) {
| 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/cds/lambdaProxyClassDictionary.cpp:
assert(shared_nest_host->is_same_class_package(lambda_ik),
"lambda proxy class and its nest host must be in the same package");
// The lambda proxy class and its nest host have the same class loader and class loader data,
// as verified in add_lambda_proxy_class()
assert(shared_nest_host->class_loader() == class_loader(), "mismatched class loader");
assert(shared_nest_host->class_loader_data() == ClassLoaderData::class_loader_data(class_loader()), "mismatched class loader data");
lambda_ik->set_nest_host(shared_nest_host);
// 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_event;
// Add to class hierarchy, and do possible deoptimizations.
lambda_ik->add_to_hierarchy(THREAD);
// But, do not add to dictionary.
lambda_ik->link_class(CHECK_NULL);
// notify jvmti
if (JvmtiExport::should_post_class_load()) {
JvmtiExport::post_class_load(THREAD, lambda_ik);
}
if (class_load_event.should_commit()) {
src/hotspot/share/classfile/systemDictionary.hpp:
// readers (we must ensure write ordering)
//
// Note that placeholders are deleted at any time, as they are removed
// when a class is completely loaded. Therefore, readers as well as writers
// of placeholders must hold the SystemDictionary_lock.
//
class BootstrapInfo;
class ClassFileStream;
class ClassLoadInfo;
class Dictionary;
class PackageEntry;
class GCTimer;
class EventClassLoad;
class Symbol;
template <class E> class GrowableArray;
class SystemDictionary : AllStatic {
friend class AOTLinkedClassBulkLoader;
friend class BootstrapInfo;
friend class LambdaProxyClassDictionary;
friend class vmClasses;
public:
src/hotspot/share/classfile/systemDictionary.hpp:
static bool add_loader_constraint(Symbol* name, Klass* klass_being_linked, Handle loader1,
Handle loader2);
static InstanceKlass* load_shared_class(InstanceKlass* ik,
Handle class_loader,
Handle protection_domain,
const ClassFileStream *cfs,
PackageEntry* pkg_entry,
TRAPS);
static void preload_class(Handle class_loader, InstanceKlass* ik, TRAPS);
static Handle get_loader_lock_or_null(Handle class_loader);
static InstanceKlass* find_or_define_instance_class(Symbol* class_name,
Handle class_loader,
InstanceKlass* k, TRAPS);
JFR_ONLY(static void post_class_load_event(EventClassLoad* event,
const InstanceKlass* k,
const ClassLoaderData* init_cld);)
public:
static bool is_system_class_loader(oop class_loader);
static bool is_platform_class_loader(oop class_loader);
static bool is_boot_class_loader(oop class_loader) { return class_loader == nullptr; }
static bool is_builtin_class_loader(oop class_loader) {
return is_boot_class_loader(class_loader) ||
is_platform_class_loader(class_loader) ||
is_system_class_loader(class_loader);
src/hotspot/share/classfile/vmClasses.cpp:
InstanceStackChunkKlass::init_offset_of_stack();
}
#if INCLUDE_CDS
void vmClasses::resolve_shared_class(InstanceKlass* klass, ClassLoaderData* loader_data, Handle domain, TRAPS) {
assert(!Universe::is_fully_initialized(), "We can make short cuts only during VM initialization");
assert(klass->in_aot_cache(), "Must be shared class");
if (klass->class_loader_data() != nullptr) {
return;
}
EventClassLoad class_load_event;
// add super and interfaces first
InstanceKlass* super = klass->super();
if (super != nullptr && super->class_loader_data() == nullptr) {
assert(super->is_instance_klass(), "Super should be instance klass");
resolve_shared_class(super, loader_data, domain, CHECK);
}
Array<InstanceKlass*>* ifs = klass->local_interfaces();
for (int i = 0; i < ifs->length(); i++) {
InstanceKlass* ik = ifs->at(i);
src/hotspot/share/classfile/systemDictionary.cpp:
// SystemDictionary::resolve_instance_class_or_null is the main function for class name resolution.
// After checking if the InstanceKlass already exists, it checks for ClassCircularityError and
// whether the thread must wait for loading in parallel. It eventually calls load_instance_class,
// which will load the class via the bootstrap loader or call ClassLoader.loadClass().
// This can return null, an exception or an InstanceKlass.
InstanceKlass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
Handle class_loader,
TRAPS) {
// name must be in the form of "java/lang/Object" -- cannot be "Ljava/lang/Object;"
DEBUG_ONLY(ResourceMark rm(THREAD));
assert(name != nullptr && !Signature::is_array(name) &&
!Signature::has_envelope(name), "invalid class name: %s", name == nullptr ? "nullptr" : name->as_C_string());
EventClassLoad class_load_event;
HandleMark hm(THREAD);
ClassLoaderData* loader_data = register_loader(class_loader);
Dictionary* dictionary = loader_data->dictionary();
// Do lookup to see if class already exists.
InstanceKlass* probe = dictionary->find_class(THREAD, name);
if (probe != nullptr) return probe;
// Non-bootstrap class loaders will call out to class loader and
src/hotspot/share/classfile/systemDictionary.cpp:
// Note: this method is much like resolve_class_from_stream, but
// does not publish the classes in the SystemDictionary.
// Handles Lookup.defineClass hidden.
InstanceKlass* SystemDictionary::resolve_hidden_class_from_stream(
ClassFileStream* st,
Symbol* class_name,
Handle class_loader,
const ClassLoadInfo& cl_info,
TRAPS) {
EventClassLoad class_load_event;
ClassLoaderData* loader_data;
// - 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.
assert (cl_info.is_hidden(), "only used for hidden classes");
bool create_mirror_cld = !cl_info.is_strong_hidden();
loader_data = register_loader(class_loader, create_mirror_cld);
assert(st != nullptr, "invariant");
src/hotspot/share/classfile/systemDictionary.cpp:
// preload_class() must be called in the correct order -- all super types must have
// already been loaded.
if (ik->java_super() != nullptr) {
assert(ik->java_super()->is_loaded(), "must be");
}
Array<InstanceKlass*>* interfaces = ik->local_interfaces();
int num_interfaces = interfaces->length();
for (int index = 0; index < num_interfaces; index++) {
assert(interfaces->at(index)->is_loaded(), "must be");
}
#endif
EventClassLoad class_load_event;
ClassLoaderData* loader_data = ClassLoaderData::class_loader_data(class_loader());
oop java_mirror = ik->archived_java_mirror();
precond(java_mirror != nullptr);
assert(java_lang_Class::module(java_mirror) != nullptr, "must have been archived");
Handle pd(THREAD, java_lang_Class::protection_domain(java_mirror));
PackageEntry* pkg_entry = ik->package();
assert(pkg_entry != nullptr || ClassLoader::package_from_class_name(ik->name()) == nullptr,
"non-empty packages must have been archived");
src/hotspot/share/classfile/systemDictionary.cpp:
update_dictionary(THREAD, ik, loader_data);
}
if (class_load_event.should_commit()) {
JFR_ONLY(post_class_load_event(&class_load_event, ik, loader_data);)
}
assert(ik->is_loaded(), "Must be in at least loaded state");
}
#endif // INCLUDE_CDS
#if INCLUDE_JFR
void SystemDictionary::post_class_load_event(EventClassLoad* event, const InstanceKlass* k, const ClassLoaderData* init_cld) {
assert(event != nullptr, "invariant");
assert(k != nullptr, "invariant");
event->set_loadedClass(k);
event->set_definingClassLoader(k->class_loader_data());
event->set_initiatingClassLoader(init_cld);
event->commit();
}
#endif // INCLUDE_JFR
InstanceKlass* SystemDictionary::load_instance_class_impl(Symbol* class_name, Handle class_loader, TRAPS) {
| 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 | 8
|
| name | string | java/util/Formatter$DateTime
|
| 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 | 24
|
| lineNumber | int | 3376
|
| method | Method | |
| descriptor | string | ()V
|
| hidden | boolean | false
|
| modifiers | int | 2
|
| name | string | checkDateTime
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | java/util/Formatter$FormatSpecifier
|
| 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 | 411885749
|
| 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 | 1537
|
| name | string | java/security/cert/CertStoreParameters
|
| 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/security/cert
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 143
|
| lineNumber | int | 1425
|
| method | Method | |
| descriptor | string | ()V
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | <clinit>
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1025
|
| name | string | java/security/Provider
|
| 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/security
|
| type | FrameType | Interpreted
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 398265803
|
| definingClassLoader | 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
|
| initiatingClassLoader | 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
|
| loadedClass | 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 | 26
|
| name | string | org/renaissance/core/Launcher$LaunchException
|
| 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 | org/renaissance/core
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | (Z)[Ljava/lang/reflect/Method;
|
| hidden | boolean | false
|
| modifiers | int | 258
|
| name | string | getDeclaredMethods0
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/lang/Class
|
| 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 | 384435441
|
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/jfr/support/jfrClassDefineEvent.cpp:
static traceid get_source(const InstanceKlass* ik, JavaThread* jt) {
traceid source_id = 0;
if (is_jdk_module(ik, jt)) {
source_id = module_path(ik, jt);
} else if (ik->class_loader_data()->is_the_null_class_loader_data()) {
source_id = caller_path(ik, jt);
} else {
source_id = class_loader_path(ik, jt);
}
return source_id;
}
static inline void send_event(const InstanceKlass* ik, traceid source_id) {
EventClassDefine event;
event.set_definedClass(ik);
event.set_definingClassLoader(ik->class_loader_data());
event.set_source(source_id);
event.commit();
}
void JfrClassDefineEvent::on_creation(const InstanceKlass* ik, const ClassFileParser& parser, JavaThread* jt) {
assert(ik != nullptr, "invariant");
assert(ik->trace_id() != 0, "invariant");
assert(!parser.is_internal(), "invariant");
assert(jt != nullptr, "invariant");
if (EventClassDefine::is_enabled() && is_not_retransforming(ik, jt)) {
ResourceMark rm(jt);
traceid source_id = 0;
const ClassFileStream& stream = parser.stream();
if (stream.source() != nullptr) {
if (stream.from_boot_loader_modules_image()) {
assert(is_jdk_module(ik, jt), "invariant");
source_id = module_path(ik, jt);
} else {
source_id = JfrSymbolTable::add(stream.source());
}
} else {
src/hotspot/share/jfr/support/jfrClassDefineEvent.cpp:
const char* file_type = cl->file_type_string();
assert(file_type != nullptr, "invariant");
len += strlen(file_type) + 3; // ":/" + null
char* const url = NEW_RESOURCE_ARRAY_IN_THREAD(jt, char, len);
jio_snprintf(url, len, "%s%s%s", file_type, ":/", path);
return JfrSymbolTable::add(url);
}
void JfrClassDefineEvent::on_restoration(const InstanceKlass* ik, JavaThread* jt) {
assert(ik != nullptr, "invariant");
assert(ik->trace_id() != 0, "invariant");
assert(jt != nullptr, "invariant");
if (EventClassDefine::is_enabled()) {
ResourceMark rm(jt);
assert(is_not_retransforming(ik, jt), "invariant");
const int index = ik->shared_classpath_index();
assert(index >= 0, "invariant");
const AOTClassLocation* const cl = AOTClassLocationConfig::runtime()->class_location_at(index);
assert(cl != nullptr, "invariant");
send_event(ik, cl->is_modules_image() ? module_path(ik, jt) : get_source(cl, jt));
}
}
#endif
| Configuration | enabled | stackTrace |
|---|---|---|
| default | false | true |
| profiling | false | true |
| Field | Type | Description |
|---|---|---|
| definedClass | Class | Defined Class |
| definingClassLoader | ClassLoader | Defining Class Loader |
| source | Symbol 26+ | Source |
Examples 3
| definedClass | Class | |
|---|---|---|
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | sun/security/provider/SecureRandom
|
| 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 | sun/security/provider
|
| definingClassLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 25
|
| lineNumber | int | 402
|
| method | Method | |
| descriptor | string | ()Lsun/security/provider/SecureRandom;
|
| hidden | boolean | false
|
| modifiers | int | 2
|
| name | string | getMixRandom
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | sun/security/provider/NativePRNG$RandomIO
|
| 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 | sun/security/provider
|
| type | FrameType | Interpreted
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 406926947
|
| definedClass | Class | |
|---|---|---|
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 0
|
| name | string | java/time/temporal/TemporalQueries$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 | java/time/temporal
|
| definingClassLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | 344
|
| method | Method | |
| descriptor | string | ()V
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | <clinit>
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/time/temporal/TemporalQueries
|
| 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/temporal
|
| type | FrameType | Interpreted
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 412082847
|
| definedClass | 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
|
| definingClassLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 10
|
| lineNumber | int | 66
|
| method | Method | |
| descriptor | string | ()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/logging/SimpleFormatter
|
| package | Package | |
| exported | boolean | true
|
| module | Module | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| location | string | jrt:/java.logging
|
| name | string | java.logging
|
| version | string | 25.0.3
|
| name | string | java/util/logging
|
| type | FrameType | Interpreted
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 386293006
|
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() != nullptr) {
// 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(the_class);
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(current);
// increment the classRedefinedCount field in the_class and in any
// direct and indirect subclasses of the_class
physical_memory_size_type avail_mem = 0;
| 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:
ClassLoadingService::notify_class_unloaded(ik);
SystemDictionaryShared::handle_class_unloading(ik);
if (log_is_enabled(Info, class, unload)) {
ResourceMark rm;
log_info(class, unload)("unloading class %s " PTR_FORMAT, ik->external_name(), p2i(ik));
}
Events::log_class_unloading(Thread::current(), ik);
#if INCLUDE_JFR
assert(ik != nullptr, "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();
}
// Called also by InstanceKlass::deallocate_contents, with false for release_sub_metadata.
| Configuration | enabled |
|---|---|
| default | false |
| profiling | false |
| Field | Type | Description |
|---|---|---|
| unloadedClass | Class | Unloaded Class |
| definingClassLoader | ClassLoader | Defining Class Loader |
Examples 3
| 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 | 2773734997
|
| 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/Unloadable367188239360
|
| 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 | 5096450521
|
| 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$mcJI$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
|
| 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 | 3941769636
|
| 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 | true
|
| modifiers | int | 4112
|
| name | string | org.renaissance.jdk.streams.JavaScrabble$$Lambda/0x000000002d298800
|
| 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/jdk/streams
|
JVM: Code Cache
CodeCacheFull
default profiling startTime eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / Code Cache
A code heap is full, this leads to disabling the 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/code/codeCache.cpp:
{
ttyLocker ttyl;
tty->print("%s", s.freeze());
}
if (full_count == 1) {
if (PrintCodeHeapAnalytics) {
CompileBroker::print_heapinfo(tty, "all", 4096); // details, may be a lot!
}
}
}
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.set_codeCacheMaxCapacity(CodeCache::max_capacity());
| 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 |
| codeCacheMaxCapacity | ulong: bytes 17+ | Code Cache Maximum Capacity |
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(static_cast<s4>(CICompilerCount));
event.set_tieredCompilation(TieredCompilation);
event.set_dynamicCompilerThreadCount(UseDynamicNumberOfCompilerThreads);
event.commit();
}
TRACE_REQUEST_FUNC(CodeCacheStatistics) {
// Emit stats for all available code heaps
for (int bt_index = 0; bt_index < static_cast<int>(CodeBlobType::NumTypes); ++bt_index) {
const CodeBlobType bt = static_cast<CodeBlobType>(bt_index);
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 | 5296
|
| fullCount | int | 0
|
| methodCount | int | 5296
|
| reservedTopAddress | ulong: address | 140405156872192
|
| startAddress | ulong: address | 140405033140224
|
| startTime | long: millis | 106734460056
|
| unallocatedCapacity | ulong: bytes | 113456512
|
| adaptorCount | int | 0
|
|---|---|---|
| codeBlobType | CodeBlobType | CodeHeap 'profiled nmethods'
|
| entryCount | int | 3553
|
| fullCount | int | 0
|
| methodCount | int | 3553
|
| reservedTopAddress | ulong: address | 140680974303232
|
| startAddress | ulong: address | 140680850571264
|
| startTime | long: millis | 118483871748
|
| unallocatedCapacity | ulong: bytes | 116168064
|
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 | 57841298640
|
| 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 | 79134494547
|
JVM: Compiler
JITRestart
default profiling startTime eventThread 17 21 25 26 27
Category: Java Virtual Machine / Compiler
Restart of the JIT compilers after they were stopped
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:
delete curr;
curr = next;
}
_exception_cache_purge_list = nullptr;
}
// Restart compiler if possible and required..
void CodeCache::maybe_restart_compiler(size_t freed_memory) {
// Try to start the compiler again if we freed any memory
if (!CompileBroker::should_compile_new_jobs() && freed_memory != 0) {
CompileBroker::set_should_compile_new_jobs(CompileBroker::run_compilation);
log_info(codecache)("Restarting compiler");
EventJITRestart event;
event.set_freedMemory(freed_memory);
event.set_codeCacheMaxCapacity(CodeCache::max_capacity());
event.commit();
}
}
uint8_t CodeCache::_unloading_cycle = 1;
void CodeCache::increment_unloading_cycle() {
// 2-bit value (see IsUnloadingState in nmethod.cpp for details)
// 0 is reserved for new methods.
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| freedMemory | ulong: bytes | Freed Memory |
| codeCacheMaxCapacity | ulong: bytes | Code Cache Maximum Capacity |
Compilation
default profiling startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / Compiler
Results of method compilation attempts
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:
template <typename EventType>
static inline void commit(EventType& event) {
JavaThread* thread = JavaThread::current();
JavaThreadState state = thread->thread_state();
if (state == _thread_in_native) {
ThreadInVMfromNative transition(thread);
event.commit();
} else {
assert(state == _thread_in_vm, "coming from wrong thread state %d", state);
event.commit();
}
}
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, size_t arenaBytes) {
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.set_arenaBytes(arenaBytes);
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, size_t arenaBytes) 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;
src/hotspot/share/compiler/compileBroker.cpp:
void CompileBroker::handle_compile_error(CompilerThread* thread, CompileTask* task, ciEnv* ci_env,
int compilable, const char* failure_reason) {
if (!AbortVMOnCompilationFailure) {
return;
}
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);
}
}
static void post_compilation_event(EventCompilation& event, CompileTask* task) {
assert(task != nullptr, "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->nm_total_size(),
task->num_inlined_bytecodes(),
task->arena_bytes());
}
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 == nullptr) {
ci_env.record_method_not_compilable("no compiler");
} else if (!ci_env.failing()) {
if (WhiteBoxAPI && WhiteBox::compilation_locked) {
whitebox_lock_compilation();
}
comp->compile_method(&ci_env, target, osr_bci, true, directive);
/* Repeat compilation without installing code for profiling purposes */
int repeat_compilation_count = directive->RepeatCompilationOption;
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 1000 ms |
| profiling | true | 100 ms |
| Field | Type | Description |
|---|---|---|
| compileId | int | 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 |
| arenaBytes | ulong: bytes 23+ | Arena Usage |
Examples 3
| arenaBytes | ulong: bytes | 0
|
|---|---|---|
| codeSize | ulong: bytes | 368
|
| compileId | int | 1469
|
| compileLevel | ushort | 3
|
| compiler | CompilerType | c1
|
| inlinedBytes | ulong: bytes | 0
|
| isOsr | boolean | false
|
| method | Method | |
| descriptor | string | (Ljava/lang/invoke/MemberName;)Ljava/lang/invoke/LambdaForm;
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | preparedLambdaForm
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 0
|
| name | string | java/lang/invoke/DirectMethodHandle
|
| 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
|
| startTime | long: millis | 404394740
|
| succeded | boolean | true
|
| arenaBytes | ulong: bytes | 0
|
|---|---|---|
| codeSize | ulong: bytes | 2360
|
| compileId | int | 1430
|
| compileLevel | ushort | 3
|
| compiler | CompilerType | c1
|
| inlinedBytes | ulong: bytes | 21
|
| isOsr | boolean | false
|
| method | Method | |
| descriptor | string | (Ljava/lang/classfile/ClassElement;)Ljava/lang/classfile/ClassBuilder;
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | with
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | jdk/internal/classfile/impl/DirectClassBuilder
|
| package | Package | |
| exported | boolean | false
|
| 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/classfile/impl
|
| startTime | long: millis | 398435252
|
| succeded | boolean | true
|
| arenaBytes | ulong: bytes | 0
|
|---|---|---|
| codeSize | ulong: bytes | 7008
|
| compileId | int | 1492
|
| compileLevel | ushort | 3
|
| compiler | CompilerType | c1
|
| inlinedBytes | ulong: bytes | 46
|
| isOsr | boolean | false
|
| method | Method | |
| descriptor | string | (Ljava/lang/String;Ljava/lang/constant/MethodTypeDesc;ZLjdk/internal/classfile/impl/StackMapGenerator$Type;)V
|
| hidden | boolean | false
|
| modifiers | int | 0
|
| name | string | setLocalsFromArg
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 18
|
| name | string | jdk/internal/classfile/impl/StackMapGenerator$Frame
|
| package | Package | |
| exported | boolean | false
|
| 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/classfile/impl
|
| startTime | long: millis | 423917014
|
| succeded | boolean | true
|
CompilerPhase
default profiling startTime duration eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / Compiler
Describes various phases of the compilation process like inlining or string optimization related 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/opto/compile.cpp:
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 compile_phase, int level, Node* n) {
if (failing_internal()) { return; } // failing_internal to not stress bailouts from printing code.
EventCompilerPhase event(UNTIMED);
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, compile_phase, C->_compile_id, level);
}
#ifndef PRODUCT
ResourceMark rm;
stringStream ss;
ss.print_raw(CompilerPhaseTypeHelper::to_description(compile_phase));
int iter = ++_igv_phase_iter[compile_phase];
if (iter > 1) {
ss.print(" %d", iter);
}
src/hotspot/share/opto/compile.cpp:
// Only used from CompileWrapper
void Compile::begin_method() {
#ifndef PRODUCT
if (_method != nullptr && should_print_igv(1)) {
_igv_printer->begin_method();
}
#endif
C->_latest_stage_start_counter.stamp();
}
// Only used from CompileWrapper
void Compile::end_method() {
EventCompilerPhase event(UNTIMED);
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, PHASE_END, C->_compile_id, 1);
}
#ifndef PRODUCT
if (_method != nullptr && should_print_igv(1)) {
_igv_printer->end_method();
}
#endif
}
src/hotspot/share/compiler/compilerEvent.cpp:
event.set_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
event.set_arenaBytes(arenaBytes);
commit(event);
}
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:
// Gets a unique identifier for `phase_name`, computing and registering it first if necessary.
// If `may_exist` is true, then current registrations are searched first. If false, then
// there must not be an existing registration for `phase_name`.
// If `use_strdup` is true, then `phase_name` is strdup'ed before registration.
// If `sync` is true, then access to the registration table is synchronized.
static int get_phase_id(const char* phase_name, bool may_exist, bool use_strdup, bool sync) 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();
};
};
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 60 s |
| profiling | true | 10 s |
| Field | Type | Description |
|---|---|---|
| phase | CompilerPhaseType | Compile Phase |
| compileId | int | Compilation Identifier |
| phaseLevel | ushort | Phase Level |
Examples 3
| compileId | int | 1405
|
|---|---|---|
| phase | CompilerPhaseType | After Iter GVN
|
| phaseLevel | ushort | 3
|
| startTime | long: millis | 372262414
|
| compileId | int | 1344
|
|---|---|---|
| phase | CompilerPhaseType | Before Iter GVN
|
| phaseLevel | ushort | 3
|
| startTime | long: millis | 358368129
|
| compileId | int | 1380
|
|---|---|---|
| phase | CompilerPhaseType | Before Iter GVN
|
| phaseLevel | ushort | 3
|
| startTime | long: millis | 380240735
|
CompilationFailure
profiling startTime eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / Compiler
In case a JIT compilation failed, a compilation failure is triggered, reporting the reason
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/ci/ciEnv.cpp:
CompilerThread* thread = CompilerThread::current();
CompileTask* task = thread->task();
CompilationLog::log()->log_failure(thread, task, reason, nullptr);
}
}
if (_failure_reason.get() == nullptr) {
// Record the first failure reason.
_failure_reason.set(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) {
src/hotspot/share/compiler/compilerEvent.cpp:
int inlined_bytecodes, size_t arenaBytes) {
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.set_arenaBytes(arenaBytes);
commit(event);
}
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, size_t arenaBytes) 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:
// Gets a unique identifier for `phase_name`, computing and registering it first if necessary.
// If `may_exist` is true, then current registrations are searched first. If false, then
// there must not be an existing registration for `phase_name`.
// If `use_strdup` is true, then `phase_name` is strdup'ed before registration.
// If `sync` is true, then access to the registration table is synchronized.
| Configuration | enabled |
|---|---|
| default | false |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| failureMessage | string | Failure Message |
| compileId | int | Compilation Identifier |
Examples 3
CompilerInlining
startTime eventThread 11 17 21 25 26 27
Category: Java Virtual Machine / Compiler / Optimization
Describes the result of a method inlining attempt
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:
append(new MemBar(lir_membar_storestore));
}
void GraphBuilder::print_inlining(ciMethod* callee, const char* msg, bool success) {
CompileLog* log = compilation()->log();
if (log != nullptr) {
assert(msg != nullptr, "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(), inlining_result_of(success), msg);
if (!compilation()->directive()->PrintInliningOption) {
return;
}
CompileTask::print_inlining_tty(callee, scope()->level(), bci(), inlining_result_of(success), msg);
if (success && CIPrintMethodCodes) {
src/hotspot/share/opto/bytecodeInfo.cpp:
int caller_bci = jvm->bci();
ciMethod* caller_method = jvm->method();
const char* inline_msg = msg();
assert(inline_msg != nullptr, "just checking");
if (C->log() != nullptr) {
if (success) {
C->log()->inline_success(inline_msg);
} else {
C->log()->inline_fail(inline_msg);
}
}
CompileTask::print_inlining_ul(callee_method, inline_level(), caller_bci, inlining_result_of(success), inline_msg);
C->inline_printer()->record(callee_method, jvm, inlining_result_of(success), inline_msg);
EventCompilerInlining event;
if (event.should_commit()) {
guarantee(callee_method != nullptr, "would crash in CompilerEvent::InlineEvent::post");
CompilerEvent::InlineEvent::post(event, C->compile_id(), caller_method->get_Method(), callee_method, success, inline_msg, caller_bci);
}
}
//------------------------------ok_to_inline-----------------------------------
bool InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms, ciCallProfile& profile,
bool& should_delay) {
#ifdef ASSERT
assert(callee_method != nullptr, "caller checks for optimized virtual!");
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);
commit(event);
}
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);
}
class CompilationEvent : AllStatic {
src/hotspot/share/compiler/compilerEvent.hpp:
friend class CompilerPhaseTypeConstant;
public:
// Gets a unique identifier for `phase_name`, computing and registering it first if necessary.
// If `may_exist` is true, then current registrations are searched first. If false, then
// there must not be an existing registration for `phase_name`.
// If `use_strdup` is true, then `phase_name` is strdup'ed before registration.
// If `sync` is true, then access to the registration table is synchronized.
static int get_phase_id(const char* phase_name, bool may_exist, bool use_strdup, bool sync) 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
| Configuration | enabled |
|---|---|
| default | false |
| profiling | false |
| Field | Type | Description |
|---|---|---|
| compileId | int | 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 | 6
|
|---|---|---|
| callee | CalleeMethod | |
| descriptor | string | ()B
|
| name | string | coder
|
| type | string | java/lang/String
|
| caller | Method | |
| descriptor | string | ()I
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | length
|
| type | 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
|
| compileId | int | 1434
|
| message | string | inline
|
| startTime | long: millis | 383268138
|
| succeeded | boolean | true
|
| bci | int | 3
|
|---|---|---|
| callee | CalleeMethod | |
| descriptor | string | (I)V
|
| name | string | <init>
|
| type | string | java/lang/AbstractStringBuilder
|
| caller | Method | |
| descriptor | string | ()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 | 17
|
| name | string | java/lang/StringBuilder
|
| 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
|
| compileId | int | 1386
|
| message | string | callee is too large
|
| startTime | long: millis | 370316180
|
| succeeded | boolean | false
|
| bci | int | 18
|
|---|---|---|
| callee | CalleeMethod | |
| descriptor | string | (Ljava/lang/Object;JJJ)Z
|
| name | string | weakCompareAndSetLong
|
| type | string | jdk/internal/misc/Unsafe
|
| caller | Method | |
| descriptor | string | (Ljava/lang/Object;JJ)J
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | getAndAddLong
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | jdk/internal/misc/Unsafe
|
| 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/misc
|
| compileId | int | 1370
|
| message | string | callee uses too much stack
|
| startTime | long: millis | 355169181
|
| succeeded | boolean | false
|
Deoptimization
default profiling startTime eventThread stackTrace 14 17 21 25 26 27
Category: Java Virtual Machine / Compiler
Describes the detection of an uncommon situation in a compiled method which may lead to deoptimization of the method
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(nmethod* nm,
const Method* method,
int trap_bci,
int instruction,
Deoptimization::DeoptReason reason,
Deoptimization::DeoptAction action) {
assert(nm != nullptr, "invariant");
assert(method != nullptr, "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 | int | 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 | 6
|
| compileId | int | 2842
|
| compiler | CompilerType | c2
|
| instruction | Bytecode | ifge
|
| lineNumber | int | 1665
|
| method | Method | |
| descriptor | string | ()I
|
| hidden | boolean | false
|
| modifiers | int | 16
|
| name | string | getFence
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | java/util/HashMap$HashMapSpliterator
|
| 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
|
| reason | DeoptimizationReason | unstable_if
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 6
|
| lineNumber | int | 1665
|
| method | Method | |
| descriptor | string | ()I
|
| hidden | boolean | false
|
| modifiers | int | 16
|
| name | string | getFence
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | java/util/HashMap$HashMapSpliterator
|
| 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 | 2931449450
|
| action | DeoptimizationAction | reinterpret
|
|---|---|---|
| bci | int | 2
|
| compileId | int | 1850
|
| compiler | CompilerType | c2
|
| instruction | Bytecode | tableswitch
|
| lineNumber | int | 364
|
| method | Method | |
| descriptor | string | (Ljava/lang/Object;IIII)I
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | vectorizedHashCode
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | jdk/internal/util/ArraysSupport
|
| 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/util
|
| reason | DeoptimizationReason | unstable_if
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 2
|
| lineNumber | int | 364
|
| method | Method | |
| descriptor | string | (Ljava/lang/Object;IIII)I
|
| hidden | boolean | false
|
| modifiers | int | 10
|
| name | string | vectorizedHashCode
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | jdk/internal/util/ArraysSupport
|
| 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/util
|
| type | FrameType | JIT compiled
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 917286553
|
| action | DeoptimizationAction | maybe_recompile
|
|---|---|---|
| bci | int | 13
|
| compileId | int | 1941
|
| compiler | CompilerType | c2
|
| instruction | Bytecode | aastore
|
| lineNumber | int | 3427
|
| method | Method | |
| descriptor | string | ([Ljava/lang/Object;Ljava/lang/Object;)V
|
| hidden | boolean | false
|
| modifiers | int | 9
|
| name | string | fill
|
| 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
|
| reason | DeoptimizationReason | array_check
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 13
|
| lineNumber | int | 3427
|
| method | Method | |
| descriptor | string | ([Ljava/lang/Object;Ljava/lang/Object;)V
|
| hidden | boolean | false
|
| modifiers | int | 9
|
| name | string | fill
|
| 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 | JIT compiled
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 664641750
|
CompilerQueueUtilization
default profiling startTime duration every chunk 22 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/jfrCompilerQueueUtilization.cpp:
{CompileBroker::c2_compile_queue(), c2_compiler_queue_id, &CompileBroker::get_c2_thread_count, 0, 0}};
const JfrTicks cur_time = JfrTicks::now();
static JfrTicks last_sample_instant;
const JfrTickspan interval = cur_time - last_sample_instant;
for (int i = 0; i < num_compiler_queues; i ++) {
CompilerQueueEntry* entry = &compilerQueueEntries[i];
if (entry->compilerQueue != nullptr) {
const uint64_t current_added = entry->compilerQueue->get_total_added();
const uint64_t current_removed = entry->compilerQueue->get_total_removed();
const uint64_t addedRate = rate_per_second(current_added, entry->added, interval);
const uint64_t removedRate = rate_per_second(current_removed, entry->removed, interval);
EventCompilerQueueUtilization event;
event.set_compiler(entry->compiler_queue_id);
event.set_addedRate(addedRate);
event.set_removedRate(removedRate);
event.set_queueSize(entry->compilerQueue->size());
event.set_peakQueueSize(entry->compilerQueue->get_peak_size());
event.set_addedCount(current_added - entry->added);
event.set_removedCount(current_removed - entry->removed);
event.set_totalAddedCount(current_added);
event.set_totalRemovedCount(current_removed);
event.set_compilerThreadCount(entry->get_compiler_thread_count());
event.commit();
| Configuration | enabled | period |
|---|---|---|
| default | true | 10 s |
| profiling | true | 5 s |
| Field | Type | Description |
|---|---|---|
| compiler | CompilerType | Compiler |
| addedRate | long: hertz | Requets Added Rate Requests added per second |
| removedRate | long: hertz | Requests Removed Rate Requests removed per second |
| queueSize | long | Queue Size |
| peakQueueSize | long | Peak Queue Size |
| addedCount | long | Requests Added |
| removedCount | long | Requests Removed |
| totalAddedCount | long | Total Requests Added |
| totalRemovedCount | long | Total Requests Removed |
| compilerThreadCount | int | Compiler Thread Count |
Examples 3
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(SymbolTableStatistics) {
TableStatistics statistics = SymbolTable::get_table_statistics();
emit_table_statistics<EventSymbolTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(StringTableStatistics) {
TableStatistics statistics = StringTable::get_table_statistics();
emit_table_statistics<EventStringTableStatistics>(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 | 7
|
|---|---|---|
| compileCount | int | 2667
|
| invalidatedCount | int | 0
|
| nmethodCodeSize | ulong: bytes | 3564984
|
| nmethodsSize | ulong: bytes | 4810424
|
| osrBytesCompiled | ulong: bytes | 0
|
| osrCompileCount | int | 19
|
| peakTimeSpent | long: millis | 199
|
| standardBytesCompiled | ulong: bytes | 0
|
| standardCompileCount | int | 2648
|
| startTime | long: millis | 3454437367
|
| totalTimeSpent | long: millis | 2353
|
| bailoutCount | int | 1
|
|---|---|---|
| compileCount | int | 10721
|
| invalidatedCount | int | 0
|
| nmethodCodeSize | ulong: bytes | 15243376
|
| nmethodsSize | ulong: bytes | 22108240
|
| osrBytesCompiled | ulong: bytes | 0
|
| osrCompileCount | int | 124
|
| peakTimeSpent | long: millis | 471
|
| standardBytesCompiled | ulong: bytes | 0
|
| standardCompileCount | int | 10597
|
| startTime | long: millis | 29860450044
|
| totalTimeSpent | long: millis | 28753
|
| bailoutCount | int | 2
|
|---|---|---|
| compileCount | int | 30149
|
| invalidatedCount | int | 0
|
| nmethodCodeSize | ulong: bytes | 44918816
|
| nmethodsSize | ulong: bytes | 63767992
|
| osrBytesCompiled | ulong: bytes | 0
|
| osrCompileCount | int | 295
|
| peakTimeSpent | long: millis | 745
|
| standardBytesCompiled | ulong: bytes | 0
|
| standardCompileCount | int | 29854
|
| startTime | long: millis | 66620197883
|
| totalTimeSpent | long: millis | 74615
|
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(static_cast<s4>(CICompilerCount));
event.set_tieredCompilation(TieredCompilation);
event.set_dynamicCompilerThreadCount(UseDynamicNumberOfCompilerThreads);
event.commit();
}
TRACE_REQUEST_FUNC(CodeCacheStatistics) {
// Emit stats for all available code heaps
for (int bt_index = 0; bt_index < static_cast<int>(CodeBlobType::NumTypes); ++bt_index) {
const CodeBlobType bt = static_cast<CodeBlobType>(bt_index);
if (CodeCache::heap_available(bt)) {
| Configuration | enabled | period |
|---|---|---|
| default | true | beginChunk |
| profiling | true | beginChunk |
| Field | Type | Description |
|---|---|---|
| threadCount | int | Thread Count |
| tieredCompilation | boolean | Tiered Compilation |
| dynamicCompilerThreadCount | boolean 20+ | Uses Dynamic Number of Compiler Threads |
Examples 3
JVM: Diagnostics
SyncOnValueBasedClass
experimental default profiling startTime eventThread stackTrace 16 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/runtime/synchronizer.cpp:
} else {
assert(DiagnoseSyncOnValueBasedClasses == LOG_WARNING, "invalid value for DiagnoseSyncOnValueBasedClasses");
ResourceMark rm;
Log(valuebasedclasses) vblog;
vblog.info("Synchronizing on object " INTPTR_FORMAT " of klass %s", p2i(obj()), obj->klass()->external_name());
if (locking_thread->has_last_Java_frame()) {
LogStream info_stream(vblog.info());
locking_thread->print_active_stack_on(&info_stream);
} else {
vblog.info("Cannot find the last Java frame");
}
EventSyncOnValueBasedClass event;
if (event.should_commit()) {
event.set_valueBasedClass(obj->klass());
event.commit();
}
}
if (bcp_was_adjusted) {
last_frame.interpreter_frame_set_bcp(last_frame.interpreter_frame_bcp() + 1);
}
}
| Configuration | enabled | stackTrace |
|---|---|---|
| default | true | true |
| profiling | true | true |
| Field | Type | Description |
|---|---|---|
| valueBasedClass | Class | Value Based Class |
Examples 3
| stackTrace | StackTrace | |
|---|---|---|
| frames | StackFrame | |
| bytecodeIndex | int | 17
|
| lineNumber | int | 296
|
| method | Method | |
| descriptor | string | ()V
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | triggerSyncOnValueBased
|
| 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 | 1219528447
|
| valueBasedClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/lang/Integer
|
| 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
|
| stackTrace | StackTrace | |
|---|---|---|
| frames | StackFrame | |
| bytecodeIndex | int | 17
|
| lineNumber | int | 296
|
| method | Method | |
| descriptor | string | ()V
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | triggerSyncOnValueBased
|
| 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 | 1467481943
|
| valueBasedClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/lang/Integer
|
| 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
|
| stackTrace | StackTrace | |
|---|---|---|
| frames | StackFrame | |
| bytecodeIndex | int | 56
|
| lineNumber | int | 300
|
| method | Method | |
| descriptor | string | ()V
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | triggerSyncOnValueBased
|
| 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 | 1294814284
|
| valueBasedClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/lang/Long
|
| 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
|
HeapDump
default profiling startTime duration eventThread stackTrace 15 17 21 25 26 27
Category: Java Virtual Machine / Diagnostics
Information about a successfully written Java heap dump
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:
// (DumpWriter buffer, DumperClassCacheTable, GZipCompressor buffers).
// For the OOM handling we may already be limited in memory.
// Lets ensure we have at least 20MB per thread.
physical_memory_size_type free_memory = 0;
// Return value ignored - defaulting to 0 on failure.
(void)os::free_memory(free_memory);
julong max_threads = free_memory / (20 * M);
if (num_dump_threads > max_threads) {
num_dump_threads = MAX2<uint>(1, (uint)max_threads);
}
}
// create JFR event
EventHeapDump event;
AbstractCompressor* compressor = nullptr;
if (compression > 0) {
compressor = new (std::nothrow) GZipCompressor(compression);
if (compressor == nullptr) {
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 Path of the Dump |
| size | long | Size |
| gcBeforeDump | boolean | GC Before Dump |
| onOutOfMemoryError | boolean | Heap Dump on Out of Memory Error |
| overwrite | boolean 21+ | Overwrite Heap dump overwrites previous file location if it exists |
| compression | int 21+ | Compression Level Compression level of the dump, if larger than 0 we use gzip compression with this level |
Examples 3
| compression | int | -1
|
|---|---|---|
| destination | string | /tmp/jfr_sample_heap_277286644011.hprof
|
| gcBeforeDump | boolean | true
|
| onOutOfMemoryError | boolean | false
|
| overwrite | 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
|
| compression | int | -1
|
|---|---|---|
| destination | string | /tmp/jfr_sample_heap_332752774776.hprof
|
| gcBeforeDump | boolean | true
|
| onOutOfMemoryError | boolean | false
|
| overwrite | 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
|
| compression | int | -1
|
|---|---|---|
| destination | string | /tmp/jfr_sample_heap_365919713268.hprof
|
| gcBeforeDump | boolean | true
|
| onOutOfMemoryError | boolean | false
|
| overwrite | 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
|
JavaAgent
default profiling startTime end of every chunk 21 25 26 27
Category: Java Virtual Machine / Diagnostics
A Java programming language agent making use of the java.lang.instrument package for instrumenting programs running on 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/jfr/periodic/jfrPeriodic.cpp:
event.set_options(agent->options());
event.set_dynamic(agent->is_dynamic());
event.set_initializationTime(agent->initialization_time());
event.set_initializationDuration(agent->initialization_duration());
event.commit();
}
TRACE_REQUEST_FUNC(JavaAgent) {
JvmtiAgentList::Iterator it = JvmtiAgentList::java_agents();
Ticks ticks = timestamp();
while (it.has_next()) {
const JvmtiAgent* agent = it.next();
assert(agent->is_jplis(), "invariant");
EventJavaAgent event;
send_agent_event(event, agent, ticks);
}
}
static void send_native_agent_events(JvmtiAgentList::Iterator& it, Ticks& timestamp) {
while (it.has_next()) {
const JvmtiAgent* agent = it.next();
assert(!agent->is_jplis(), "invariant");
EventNativeAgent event;
event.set_path(agent->os_lib_path());
send_agent_event(event, agent, timestamp);
| Configuration | enabled | period |
|---|---|---|
| default | true | endChunk |
| profiling | true | endChunk |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| options | string | Options |
| dynamic | boolean | Dynamic If the agent attached to the JVM dynamically during runtime, i.e. not at startup |
| initializationTime | Ticks | Initialization Time The time the JVM initialized the agent |
| initializationDuration | Tickspan | Initialization Duration The duration of executing the initialization method, either premain or agentmain |
Examples 3
NativeAgent
default profiling startTime end of every chunk 21 25 26 27
Category: Java Virtual Machine / Diagnostics
A native programming language agent making use of the JVMTI interface used by development, profiling and monitoring tools
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:
Ticks ticks = timestamp();
while (it.has_next()) {
const JvmtiAgent* agent = it.next();
assert(agent->is_jplis(), "invariant");
EventJavaAgent event;
send_agent_event(event, agent, ticks);
}
}
static void send_native_agent_events(JvmtiAgentList::Iterator& it, Ticks& timestamp) {
while (it.has_next()) {
const JvmtiAgent* agent = it.next();
assert(!agent->is_jplis(), "invariant");
EventNativeAgent event;
event.set_path(agent->os_lib_path());
send_agent_event(event, agent, timestamp);
}
}
TRACE_REQUEST_FUNC(NativeAgent) {
Ticks ticks = timestamp();
JvmtiAgentList::Iterator native_agents_it = JvmtiAgentList::native_agents();
send_native_agent_events(native_agents_it, ticks);
JvmtiAgentList::Iterator xrun_agents_it = JvmtiAgentList::xrun_agents();
send_native_agent_events(xrun_agents_it, ticks);
| Configuration | enabled | period |
|---|---|---|
| default | true | endChunk |
| profiling | true | endChunk |
| Field | Type | Description |
|---|---|---|
| name | string | Name |
| options | string | Options |
| dynamic | boolean | Dynamic If the library attached to the JVM dynamically during runtime, i.e. not at startup |
| initializationTime | Ticks | Initialization Time The time the JVM initialized the agent |
| initializationDuration | Tickspan | Initialization Duration The duration of executing the JVMTI VMInit event callback. If no VMInit callback is specified, the duration is 0. For a dynamically loaded agent, it is the duration of executing the call to Agent_OnAttach. |
| path | string | Path The path of the library |
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/jvmFlagAccess.cpp:
virtual void print_range(outputStream* st, const JVMFlagLimit* range) const {
const JVMTypedFlagLimit<T>* r = (const JVMTypedFlagLimit<T>*)range;
print_range_impl(st, r->min(), r->max());
}
virtual void range_error(const char* name, T value, T min, T max, bool verbose) const = 0;
virtual void print_range_impl(outputStream* st, T min, T max) const = 0;
};
class FlagAccessImpl_int : public RangedFlagAccessImpl<int, EventIntFlagChanged> {
public:
void range_error(const char* name, int value, int min, int max, bool verbose) const {
JVMFlag::printError(verbose,
"int %s=%d is outside the allowed range "
"[ %d ... %d ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, int value, bool verbose) const {
return ((JVMFlagConstraintFunc_int)func)(value, verbose);
}
void print_range_impl(outputStream* st, int min, int max) const {
| 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/jvmFlagAccess.cpp:
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, int value, bool verbose) const {
return ((JVMFlagConstraintFunc_int)func)(value, verbose);
}
void print_range_impl(outputStream* st, int min, int max) const {
st->print("[ %-25d ... %25d ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " INT32_FORMAT_W(-25) " ... " INT32_FORMAT_W(25) " ]", INT_MIN, INT_MAX);
}
};
class FlagAccessImpl_uint : public RangedFlagAccessImpl<uint, EventUnsignedIntFlagChanged> {
public:
void range_error(const char* name, uint value, uint min, uint max, bool verbose) const {
JVMFlag::printError(verbose,
"uint %s=%u is outside the allowed range "
"[ %u ... %u ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, uint value, bool verbose) const {
return ((JVMFlagConstraintFunc_uint)func)(value, verbose);
}
void print_range_impl(outputStream* st, uint min, uint max) const {
| 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/jvmFlagAccess.cpp:
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, uint value, bool verbose) const {
return ((JVMFlagConstraintFunc_uint)func)(value, verbose);
}
void print_range_impl(outputStream* st, uint min, uint max) const {
st->print("[ %-25u ... %25u ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " UINT32_FORMAT_W(-25) " ... " UINT32_FORMAT_W(25) " ]", 0, UINT_MAX);
}
};
class FlagAccessImpl_intx : public RangedFlagAccessImpl<intx, EventLongFlagChanged> {
public:
void range_error(const char* name, intx value, intx min, intx max, bool verbose) const {
JVMFlag::printError(verbose,
"intx %s=%zd is outside the allowed range "
"[ %zd ... %zd ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, intx value, bool verbose) const {
return ((JVMFlagConstraintFunc_intx)func)(value, verbose);
}
void print_range_impl(outputStream* st, intx min, intx max) const {
| 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/jvmFlagAccess.cpp:
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, intx value, bool verbose) const {
return ((JVMFlagConstraintFunc_intx)func)(value, verbose);
}
void print_range_impl(outputStream* st, intx min, intx max) const {
st->print("[ %-25zd ... %25zd ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ %-25zd ... %25zd ]", min_intx, max_intx);
}
};
class FlagAccessImpl_uintx : public RangedFlagAccessImpl<uintx, EventUnsignedLongFlagChanged> {
public:
void range_error(const char* name, uintx value, uintx min, uintx max, bool verbose) const {
JVMFlag::printError(verbose,
"uintx %s=%zu is outside the allowed range "
"[ %zu ... %zu ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, uintx value, bool verbose) const {
return ((JVMFlagConstraintFunc_uintx)func)(value, verbose);
}
void print_range_impl(outputStream* st, uintx min, uintx max) const {
st->print("[ %-25zu ... %25zu ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ %-25zu ... %25zu ]", uintx(0), max_uintx);
}
};
class FlagAccessImpl_uint64_t : public RangedFlagAccessImpl<uint64_t, EventUnsignedLongFlagChanged> {
public:
void range_error(const char* name, uint64_t value, uint64_t min, uint64_t max, bool verbose) const {
JVMFlag::printError(verbose,
"uint64_t %s=" UINT64_FORMAT " is outside the allowed range "
"[ " UINT64_FORMAT " ... " UINT64_FORMAT " ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, uint64_t value, bool verbose) const {
return ((JVMFlagConstraintFunc_uint64_t)func)(value, verbose);
}
void print_range_impl(outputStream* st, uint64_t min, uint64_t max) const {
st->print("[ " UINT64_FORMAT_W(-25) " ... " UINT64_FORMAT_W(25) " ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " UINT64_FORMAT_W(-25) " ... " UINT64_FORMAT_W(25) " ]", uint64_t(0), uint64_t(max_juint));
}
};
class FlagAccessImpl_size_t : public RangedFlagAccessImpl<size_t, EventUnsignedLongFlagChanged> {
public:
void range_error(const char* name, size_t value, size_t min, size_t max, bool verbose) const {
JVMFlag::printError(verbose,
"size_t %s=%zu is outside the allowed range "
"[ %zu ... %zu ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, size_t value, bool verbose) const {
return ((JVMFlagConstraintFunc_size_t)func)(value, verbose);
}
void print_range_impl(outputStream* st, size_t min, size_t max) const {
| 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/jvmFlagAccess.cpp:
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, size_t value, bool verbose) const {
return ((JVMFlagConstraintFunc_size_t)func)(value, verbose);
}
void print_range_impl(outputStream* st, size_t min, size_t max) const {
st->print("[ %-25zu ... %25zu ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ %-25zu ... %25zu ]", size_t(0), size_t(SIZE_MAX));
}
};
class FlagAccessImpl_double : public RangedFlagAccessImpl<double, EventDoubleFlagChanged> {
public:
void range_error(const char* name, double value, double min, double max, bool verbose) const {
JVMFlag::printError(verbose,
"double %s=%f is outside the allowed range "
"[ %f ... %f ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, double value, bool verbose) const {
return ((JVMFlagConstraintFunc_double)func)(value, verbose);
}
void print_range_impl(outputStream* st, double min, double max) const {
| 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/jvmFlagAccess.cpp:
*((T*)value_addr) = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error check_constraint(const JVMFlag* flag, void * func, bool verbose) const {
return typed_check_constraint(func, flag->read<T>(), verbose);
}
virtual JVMFlag::Error typed_check_constraint(void * func, T value, bool verbose) const = 0;
};
class FlagAccessImpl_bool : public TypedFlagAccessImpl<bool, EventBooleanFlagChanged> {
public:
JVMFlag::Error set_impl(JVMFlag* flag, void* value_addr, JVMFlagOrigin origin) const {
bool verbose = JVMFlagLimit::verbose_checks_needed();
return TypedFlagAccessImpl<bool, EventBooleanFlagChanged>
::check_constraint_and_set(flag, value_addr, origin, verbose);
}
JVMFlag::Error typed_check_constraint(void* func, bool value, bool verbose) const {
return ((JVMFlagConstraintFunc_bool)func)(value, verbose);
}
};
template <typename T, typename EVENT>
class RangedFlagAccessImpl : public TypedFlagAccessImpl<T, EVENT> {
public:
| 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/jvmFlagAccess.cpp:
if (!flag->is_ccstr()) return JVMFlag::WRONG_FORMAT;
const JVMTypedFlagLimit<ccstr>* constraint = (const JVMTypedFlagLimit<ccstr>*)JVMFlagLimit::get_constraint(flag);
if (constraint != nullptr && constraint->phase() <= JVMFlagLimit::validating_phase()) {
bool verbose = JVMFlagLimit::verbose_checks_needed() | (origin == JVMFlagOrigin::ERGONOMIC);
JVMFlag::Error err = ((JVMFlagConstraintFunc_ccstr)constraint->constraint_func())(*value, verbose);
if (err != JVMFlag::SUCCESS) {
if (origin == JVMFlagOrigin::ERGONOMIC) {
fatal("FLAG_SET_ERGO cannot be used to set an invalid value for %s", flag->name());
}
return err;
}
}
ccstr old_value = flag->get_ccstr();
trace_flag_changed<ccstr, EventStringFlagChanged>(flag, old_value, *value, origin);
char* new_value = nullptr;
if (*value != nullptr) {
new_value = os::strdup_check_oom(*value);
}
flag->set_ccstr(new_value);
if (!flag->is_default() && old_value != nullptr) {
// Old value is heap allocated so free it.
FREE_C_HEAP_ARRAY(old_value);
}
// Unlike the other APIs, the old value is NOT returned, so the caller won't need to free it.
// The callers typically don't care what the old value is.
| 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 | FastAllocateSizeLimit
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 8304314805
|
| value | int | 131072
|
| name | string | JavaPriority9_To_OSPriority
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 360238427
|
| value | int | -1
|
| name | string | ContendedPaddingWidth
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 384699181
|
| value | int | 128
|
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 | YoungGenerationSizeSupplement
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 373518726
|
| value | uint | 80
|
| name | string | TrimNativeHeapInterval
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 360256494
|
| value | uint | 0
|
| name | string | ConcGCThreads
|
|---|---|---|
| origin | FlagValueOrigin | Ergonomic
|
| startTime | long: millis | 9176508889
|
| value | uint | 1
|
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 | UnrollLimitForProfileCheck
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 373527813
|
| value | long | 1
|
| name | string | InteriorEntryAlignment
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 360269914
|
| value | long | 16
|
| name | string | InstructionCountCutoff
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 384728286
|
| value | long | 37000
|
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 | NonProfiledCodeHeapSize
|
|---|---|---|
| origin | FlagValueOrigin | Ergonomic
|
| startTime | long: millis | 360306479
|
| value | ulong | 123731968
|
| name | string | MarkStackSizeMax
|
|---|---|---|
| origin | FlagValueOrigin | Ergonomic
|
| startTime | long: millis | 373585681
|
| value | ulong | 536870912
|
| name | string | MallocTraceDumpMaxEntries
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 384763662
|
| value | ulong | 10
|
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 | Tier0ProfileDelayFactor
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 373600980
|
| value | double | 100.0
|
| name | string | MaxRAMPercentage
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 28322699693
|
| value | double | 25.0
|
| name | string | SafepointTimeoutDelay
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 36992829325
|
| value | double | 10000.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 | ImplicitDiv0Checks
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 360356124
|
| value | boolean | true
|
| name | string | UseGlobalValueNumbering
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 384797185
|
| value | boolean | true
|
| name | string | StressLoopInvariantCodeMotion
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 373613363
|
| value | boolean | false
|
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 | ReplayDataFile
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 8304524206
|
| value | string | null
|
| name | string | CompileCommandFile
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 17207292734
|
| value | string | null
|
| name | string | LogClassLoadingCauseFor
|
|---|---|---|
| origin | FlagValueOrigin | Default
|
| startTime | long: millis | 9232551146
|
| value | string | null
|
JVM: GC: Collector
GarbageCollection
default profiling startTime duration eventThread 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;
bool GCTracer::should_send_cpu_time_event() const {
return EventGCCPUTime::is_enabled();
}
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
SystemGC
default profiling startTime duration eventThread stackTrace 17 21 25 26 27
Category: Java Virtual Machine / GC / 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/prims/jvm.cpp:
event.commit();
}
JVM_END
JVM_ENTRY_NO_ENV(void, JVM_Halt(jint code))
before_exit(thread, true);
vm_exit(code);
JVM_END
JVM_ENTRY_NO_ENV(void, JVM_GC(void))
if (!DisableExplicitGC) {
EventSystemGC event;
event.set_invokedConcurrent(ExplicitGCInvokesConcurrent);
Universe::heap()->collect(GCCause::_java_lang_system_gc);
event.commit();
}
JVM_END
JVM_LEAF(jlong, JVM_MaxObjectInspectionAge(void))
return Universe::heap()->millis_since_last_whole_heap_examined();
JVM_END
| Configuration | enabled | stackTrace | threshold |
|---|---|---|---|
| default | true | true | 0 ms |
| profiling | true | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| invokedConcurrent | boolean | Invoked Concurrent |
Examples 3
| invokedConcurrent | boolean | false
|
|---|---|---|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | ()V
|
| hidden | boolean | false
|
| modifiers | int | 257
|
| name | string | gc
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/lang/Runtime
|
| 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 | 27524156382
|
| invokedConcurrent | boolean | false
|
|---|---|---|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | ()V
|
| hidden | boolean | false
|
| modifiers | int | 257
|
| name | string | gc
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/lang/Runtime
|
| 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 | 3744681034
|
| invokedConcurrent | boolean | false
|
|---|---|---|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 0
|
| lineNumber | int | -1
|
| method | Method | |
| descriptor | string | ()V
|
| hidden | boolean | false
|
| modifiers | int | 257
|
| name | string | gc
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/lang/Runtime
|
| 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 | 23079952309
|
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 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/g1/g1Trace.cpp:
send_adaptive_ihop_statistics(threshold,
internal_target_occupancy,
current_occupancy,
additional_buffer_size,
predicted_allocation_rate,
predicted_marking_length,
prediction_active);
}
void G1NewTracer::send_g1_young_gc_event() {
// Check that the pause type has been updated to something valid for this event.
G1CollectorState::assert_is_young_pause(_pause);
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type(static_cast<uint>(_pause));
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void G1NewTracer::send_evacuation_info_event(G1EvacInfo* 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
ZYoungGarbageCollection
default profiling startTime duration eventThread 21 25 26 27
Category: Java Virtual Machine / GC / Collector
Appearing in: linux_ZGC
Missing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC
Extra information specific to ZGC 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/z/zTracer.cpp:
ZMinorTracer::ZMinorTracer()
: GCTracer(ZMinor) {}
ZMajorTracer::ZMajorTracer()
: GCTracer(ZMajor) {}
void ZGenerationTracer::report_start(const Ticks& timestamp) {
_start = timestamp;
}
void ZYoungTracer::report_end(const Ticks& timestamp) {
NoSafepointVerifier nsv;
EventZYoungGarbageCollection e(UNTIMED);
e.set_gcId(GCId::current());
e.set_tenuringThreshold(ZGeneration::young()->tenuring_threshold());
e.set_starttime(_start);
e.set_endtime(timestamp);
e.commit();
}
void ZOldTracer::report_end(const Ticks& timestamp) {
NoSafepointVerifier nsv;
EventZOldGarbageCollection e(UNTIMED);
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| tenuringThreshold | uint | Tenuring Threshold |
Examples 2
ZOldGarbageCollection
default profiling startTime duration eventThread 21 25 26 27
Category: Java Virtual Machine / GC / Collector
Appearing in: linux_ZGC
Missing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC
Extra information specific to ZGC 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/z/zTracer.cpp:
NoSafepointVerifier nsv;
EventZYoungGarbageCollection e(UNTIMED);
e.set_gcId(GCId::current());
e.set_tenuringThreshold(ZGeneration::young()->tenuring_threshold());
e.set_starttime(_start);
e.set_endtime(timestamp);
e.commit();
}
void ZOldTracer::report_end(const Ticks& timestamp) {
NoSafepointVerifier nsv;
EventZOldGarbageCollection e(UNTIMED);
e.set_gcId(GCId::current());
e.set_starttime(_start);
e.set_endtime(timestamp);
e.commit();
}
void ZTracer::initialize() {
JFR_ONLY(register_jfr_type_serializers();)
}
void ZTracer::send_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
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(static_cast<unsigned int>(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 | 1
|
|---|---|---|
| gcTimeRatio | uint | 12
|
| isExplicitGCConcurrent | boolean | false
|
| isExplicitGCDisabled | boolean | false
|
| oldCollector | GCName | G1Old
|
| parallelGCThreads | uint | 4
|
| pauseTarget | long: millis | -9223372036854775808
|
| startTime | long: millis | 87120121701
|
| usesDynamicGCThreads | boolean | true
|
| youngCollector | GCName | G1New
|
| 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 | 57133369373
|
| 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 | 25444783331
|
| 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(static_cast<u1>(conf.max_tenuring_threshold()));
event.set_initialTenuringThreshold(static_cast<u1>(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(static_cast<unsigned int>(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(static_cast<u1>(conf.max_tenuring_threshold()));
event.set_initialTenuringThreshold(static_cast<u1>(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(static_cast<u1>(conf.max_tenuring_threshold()));
event.set_initialTenuringThreshold(static_cast<u1>(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(static_cast<u1>(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(static_cast<u1>(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(static_cast<unsigned int>(conf.new_ratio()));
event.commit();
}
TRACE_REQUEST_FUNC(InitialSystemProperty) {
SystemProperty* p = Arguments::system_properties();
JfrTicks time_stamp = JfrTicks::now();
while (p != nullptr) {
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
ZThreadDebug
internal startTime duration eventThread 18 21 25 26 27
Category: Java Virtual Machine / GC / Detailed
Temporary latency measurements used during development and debugging of ZGC
Only valid for the 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/z/zTracer.cpp:
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();
}
}
void ZTracer::send_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
NoSafepointVerifier nsv;
EventZThreadDebug 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_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 void ZTracer::report_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadDebug::is_enabled()) {
send_thread_debug(name, start, end);
}
}
inline ZTraceThreadDebug::ZTraceThreadDebug(const char* name)
: _start(Ticks::now()),
_name(name) {}
inline ZTraceThreadDebug::~ZTraceThreadDebug() {
ZTracer::report_thread_debug(_name, _start, Ticks::now());
}
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| name | string | Name The name of the GC runner |
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:
G1CollectorState::assert_is_young_pause(_pause);
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type(static_cast<uint>(_pause));
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void G1NewTracer::send_evacuation_info_event(G1EvacInfo* info) {
EventEvacuationInformation e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_cSetRegions(info->collection_set_regions());
e.set_cSetUsedBefore(info->collection_set_used_before());
e.set_cSetUsedAfter(info->collection_set_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 | 2
|
|---|---|---|
| allocationRegionsUsedAfter | ulong: bytes | 3775760
|
| allocationRegionsUsedBefore | ulong: bytes | 0
|
| bytesCopied | ulong: bytes | 3775760
|
| cSetRegions | uint | 17
|
| cSetUsedAfter | ulong: bytes | 0
|
| cSetUsedBefore | ulong: bytes | 35651584
|
| gcId | uint | 117
|
| regionsFreed | uint | 17
|
| startTime | long: millis | 26692850024
|
| allocationRegions | uint | 3
|
|---|---|---|
| allocationRegionsUsedAfter | ulong: bytes | 4268848
|
| allocationRegionsUsedBefore | ulong: bytes | 1597040
|
| bytesCopied | ulong: bytes | 2671808
|
| cSetRegions | uint | 55
|
| cSetUsedAfter | ulong: bytes | 0
|
| cSetUsedBefore | ulong: bytes | 115343360
|
| gcId | uint | 17
|
| regionsFreed | uint | 55
|
| startTime | long: millis | 1013414143
|
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;
}
void ObjectCountEventSender::disable_requestable_event() {
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_starttime(timestamp);
event.set_endtime(timestamp);
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_count(count);
event.set_totalSize(size);
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 | 556
|
|---|---|---|
| gcId | uint | 0
|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1041
|
| name | string | [Ljava/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
|
| startTime | long: millis | 379054085
|
| totalSize | ulong: bytes | 21456
|
| count | long | 91403
|
|---|---|---|
| gcId | uint | 15
|
| 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 | 1595114687
|
| totalSize | ulong: bytes | 2193672
|
| count | long | 372731
|
|---|---|---|
| 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 | 17
|
| name | string | scala/collection/immutable/$colon$colon
|
| 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/collection/immutable
|
| startTime | long: millis | 8832793279
|
| totalSize | ulong: bytes | 5963696
|
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 | 1610959468
|
|---|---|---|
| statistics | G1EvacuationStatistics | |
| allocated | ulong: bytes | 10223600
|
| directAllocated | ulong: bytes | 262160
|
| failureUsed | ulong: bytes | 0
|
| failureWaste | ulong: bytes | 0
|
| gcId | uint | 16
|
| numDirectAllocated | ulong | 0
|
| numPlabsFilled | ulong | 0
|
| regionEndWaste | ulong: bytes | 0
|
| regionsRefilled | uint | 5
|
| undoWaste | ulong: bytes | 0
|
| used | ulong: bytes | 10223352
|
| wasted | ulong: bytes | 248
|
| startTime | long: millis | 3275280194
|
|---|---|---|
| statistics | G1EvacuationStatistics | |
| allocated | ulong: bytes | 2097152
|
| directAllocated | ulong: bytes | 0
|
| failureUsed | ulong: bytes | 0
|
| failureWaste | ulong: bytes | 0
|
| gcId | uint | 173
|
| numDirectAllocated | ulong | 0
|
| numPlabsFilled | ulong | 0
|
| regionEndWaste | ulong: bytes | 0
|
| regionsRefilled | uint | 1
|
| undoWaste | ulong: bytes | 0
|
| used | ulong: bytes | 2060144
|
| wasted | ulong: bytes | 14688
|
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 non_young_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 | 12072671868
|
|---|---|---|
| statistics | G1EvacuationStatistics | |
| allocated | ulong: bytes | 66060288
|
| directAllocated | ulong: bytes | 0
|
| failureUsed | ulong: bytes | 0
|
| failureWaste | ulong: bytes | 0
|
| gcId | uint | 79
|
| numDirectAllocated | ulong | 0
|
| numPlabsFilled | ulong | 0
|
| regionEndWaste | ulong: bytes | 0
|
| regionsRefilled | uint | 32
|
| undoWaste | ulong: bytes | 0
|
| used | ulong: bytes | 64305560
|
| wasted | ulong: bytes | 784
|
| startTime | long: millis | 2706721260
|
|---|---|---|
| statistics | G1EvacuationStatistics | |
| allocated | ulong: bytes | 2048
|
| directAllocated | ulong: bytes | 2475424
|
| failureUsed | ulong: bytes | 0
|
| failureWaste | ulong: bytes | 0
|
| gcId | uint | 122
|
| numDirectAllocated | ulong | 0
|
| numPlabsFilled | ulong | 0
|
| regionEndWaste | ulong: bytes | 2096
|
| regionsRefilled | uint | 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 non_young_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(non_young_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 concurrent start to the first mixed GC |
Examples 2
| currentOccupancy | ulong: bytes | 14601136
|
|---|---|---|
| gcId | uint | 149
|
| lastMarkingDuration | long: millis | 40
|
| recentAllocationRate | double: bytes-per-second | 2.977548029628027E8
|
| recentMutatorAllocationSize | ulong: bytes | 1587232
|
| recentMutatorDuration | long: millis | 5
|
| startTime | long: millis | 2993202421
|
| targetOccupancy | ulong: bytes | 29360128
|
| threshold | ulong: bytes | 13212057
|
| thresholdPercentage | float: percentage | 0.45
|
| currentOccupancy | ulong: bytes | 473531376
|
|---|---|---|
| gcId | uint | 87
|
| lastMarkingDuration | long: millis | 1298
|
| recentAllocationRate | double: bytes-per-second | 2.152261538598077E8
|
| recentMutatorAllocationSize | ulong: bytes | 42991616
|
| recentMutatorDuration | long: millis | 199
|
| startTime | long: millis | 15242044307
|
| targetOccupancy | ulong: bytes | 1027604480
|
| threshold | ulong: bytes | 284175890
|
| thresholdPercentage | float: percentage | 0.2765421
|
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 concurrent start to the first mixed GC |
| predictionActive | boolean | Prediction Active Indicates whether the adaptive IHOP prediction is active |
Examples 2
| additionalBufferSize | ulong: bytes | 232783872
|
|---|---|---|
| currentOccupancy | ulong: bytes | 15564832
|
| gcId | uint | 22
|
| ihopTargetOccupancy | ulong: bytes | 370566758
|
| predictedAllocationRate | double: bytes-per-second | 2.972351808591311E8
|
| predictedMarkingDuration | long: millis | 81
|
| predictionActive | boolean | false
|
| startTime | long: millis | 1412971460
|
| threshold | ulong: bytes | 175531622
|
| thresholdPercentage | float: percentage | 0.47368422
|
| additionalBufferSize | ulong: bytes | 176160768
|
|---|---|---|
| currentOccupancy | ulong: bytes | 95374168
|
| gcId | uint | 121
|
| ihopTargetOccupancy | ulong: bytes | 326736281
|
| predictedAllocationRate | double: bytes-per-second | 3.1096607521875244E8
|
| predictedMarkingDuration | long: millis | 911
|
| predictionActive | boolean | true
|
| startTime | long: millis | 27012350203
|
| threshold | ulong: bytes | 0
|
| thresholdPercentage | float: percentage | 0.0
|
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 Scavenge, 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 scavenge 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 | 3
|
|---|---|---|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/lang/Class
|
| 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 | 120
|
| plabSize | ulong: bytes | 49944
|
| startTime | long: millis | 930985882
|
| tenured | boolean | false
|
| tenuringAge | uint | 1
|
| 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 | 32760
|
| startTime | long: millis | 1057687586
|
| tenured | boolean | false
|
| tenuringAge | uint | 0
|
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 Scavenge, 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 scavenge 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 | 1
|
|---|---|---|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 1040
|
| name | string | [Ljava/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 | 262160
|
| startTime | long: millis | 1053677934
|
| 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() * HeapWordSize);
failed_info.set_smallestSize(cf_info.smallest_size() * HeapWordSize);
failed_info.set_totalSize(cf_info.total_size() * HeapWordSize);
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->collection_set_regions());
e.set_cSetUsedBefore(info->collection_set_used_before());
e.set_cSetUsedAfter(info->collection_set_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() * HeapWordSize);
evac_failed.set_smallestSize(ef_info.smallest_size() * HeapWordSize);
evac_failed.set_totalSize(ef_info.total_size() * HeapWordSize);
// 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
GCCPUTime
default profiling startTime 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
GC CPU Time information. Supported: G1GC, ParallelGC and 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/shared/gcTraceSend.cpp:
// All GC dependencies against the trace framework is contained within this file.
typedef uintptr_t TraceAddress;
bool GCTracer::should_send_cpu_time_event() const {
return EventGCCPUTime::is_enabled();
}
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();
}
}
void GCTracer::send_cpu_time_event(double user_time, double system_time, double real_time) const {
EventGCCPUTime e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_userTime((size_t)(user_time * NANOUNITS));
e.set_systemTime((size_t)(system_time * NANOUNITS));
e.set_realTime((size_t)(real_time * NANOUNITS));
e.commit();
}
}
void GCTracer::send_reference_stats_event(ReferenceType type, size_t count) const {
EventGCReferenceStatistics e;
| Configuration | enabled |
|---|---|
| default | true |
| profiling | true |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| userTime | ulong: nanos | User Time |
| systemTime | ulong: nanos | System Time |
| realTime | ulong: nanos | Real Time |
Examples 3
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, JavaThread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, false, 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 | 19
|
|---|---|---|
| size | ulong: bytes | 32
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 68
|
| lineNumber | int | 746
|
| method | Method | |
| descriptor | string | (Lscala/collection/immutable/RedBlackTree$Tree;Lscala/collection/immutable/RedBlackTree$Tree;)Lscala/collection/immutable/RedBlackTree$Tree;
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | redWithLeftRight
|
| 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 | 25
|
| name | string | scala/collection/immutable/RedBlackTree$Tree
|
| 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/collection/immutable
|
| type | FrameType | Inlined
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 12175645227
|
| gcId | uint | 28
|
|---|---|---|
| size | ulong: bytes | 16
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 12
|
| lineNumber | int | 500
|
| method | Method | |
| descriptor | string | (Ljava/lang/Object;)Ljava/lang/Object;
|
| hidden | boolean | false
|
| modifiers | int | 8
|
| name | string | allocateInstance
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 0
|
| name | string | java/lang/invoke/DirectMethodHandle
|
| 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
|
| type | FrameType | Inlined
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 2863878421
|
| gcId | uint | 59
|
|---|---|---|
| size | ulong: bytes | 4112
|
| 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 | JIT compiled
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 1963282255
|
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/g1HeapRegionTracer.cpp:
void G1HeapRegionTracer::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 | Eden
|
|---|---|---|
| index | uint | 25
|
| start | ulong: address | 30219960320
|
| startTime | long: millis | 1160738622
|
| to | G1HeapRegionType | Free
|
| used | ulong: bytes | 0
|
| from | G1HeapRegionType | Eden
|
|---|---|---|
| index | uint | 27
|
| start | ulong: address | 30224154624
|
| startTime | long: millis | 626905038
|
| 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_starttime(timestamp);
event.set_endtime(timestamp);
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_count(count);
event.set_totalSize(size);
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 | 999
|
|---|---|---|
| gcId | uint | 29
|
| objectClass | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 16
|
| name | string | java/lang/invoke/MemberName
|
| 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
|
| startTime | long: millis | 1597622217
|
| totalSize | ulong: bytes | 39960
|
| count | long | 6962
|
|---|---|---|
| gcId | uint | 11
|
| 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 | 1313125642
|
| totalSize | ulong: bytes | 334176
|
| count | long | 372731
|
|---|---|---|
| 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 | 17
|
| name | string | scala/collection/immutable/$colon$colon
|
| 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/collection/immutable
|
| startTime | long: millis | 8832793279
|
| totalSize | ulong: bytes | 5963696
|
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 G1HeapRegionClosure {
public:
bool do_heap_region(G1HeapRegion* 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 stackTrace 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:
if (harvested > 0) {
ZStatInc(ZCounterMappedCacheHarvest, harvested);
log_debug(gc, heap)("Mapped Cache Harvested: %zuM (%d)", harvested / M, num_harvested_vmems);
}
// Send event for successful allocation
allocation.send_event(true /* successful */);
return page;
}
bool ZPageAllocator::alloc_page_stall(ZPageAllocation* allocation) {
ZStatTimer timer(ZCriticalPhaseAllocationStall);
EventZAllocationStall event;
// We can only block if the VM is fully initialized
check_out_of_memory_during_initialization();
// Start asynchronous minor GC
const ZDriverRequest request(GCCause::_z_allocation_stall, ZYoungGCThreads, 0);
ZDriver::minor()->collect(request);
// Wait for allocation to complete or fail
const bool result = allocation->wait();
| Configuration | enabled | stackTrace | threshold |
|---|---|---|---|
| default | true | true 17+ | 0 ms |
| profiling | true | true 17+ | 0 ms |
| Field | Type | Description |
|---|---|---|
| type | ZPageTypeType | Type |
| size | ulong: bytes | Size |
Examples 1
| size | ulong: bytes | 2097152
|
|---|---|---|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 51
|
| lineNumber | int | 681
|
| method | Method | |
| descriptor | string | (Lscala/collection/immutable/RedBlackTree$Tree;)Lscala/collection/immutable/RedBlackTree$Tree;
|
| hidden | boolean | false
|
| modifiers | int | 1
|
| name | string | withLeft
|
| 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 | 25
|
| name | string | scala/collection/immutable/RedBlackTree$Tree
|
| 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/collection/immutable
|
| type | FrameType | Inlined
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 17257480881
|
| 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:
_multi_partition_allocation.sum_num_harvested_vmems(),
_multi_partition_allocation.sum_harvested(),
_multi_partition_allocation.sum_committed_increased_capacity());
} else {
return ZPageAllocationStats(
_single_partition_allocation.allocation()->num_harvested(),
_single_partition_allocation.allocation()->harvested(),
_single_partition_allocation.allocation()->committed_capacity());
}
}
void send_event(bool successful) {
if (!EventZPageAllocation::is_enabled()) {
// Event not enabled, exit early
return;
}
Ticks end_timestamp = Ticks::now();
const ZPageAllocationStats st = stats();
EventZPageAllocation::commit(_start_timestamp,
end_timestamp,
(u8)_type,
size(),
st._total_harvested,
st._total_committed_capacity,
(unsigned)st._num_harvested_vmems,
_is_multi_partition,
successful,
_flags.non_blocking());
}
};
src/hotspot/share/gc/z/zPageAllocator.cpp:
assert(to->age() == ZPageAge::old, "must be promotion");
decrease_used_generation(ZGenerationId::young, to->size());
increase_used_generation(ZGenerationId::old, to->size());
}
static void check_out_of_memory_during_initialization() {
if (!is_init_completed()) {
vm_exit_during_initialization("java.lang.OutOfMemoryError", "Java heap too small");
}
}
ZPage* ZPageAllocator::alloc_page(ZPageType type, size_t size, ZAllocationFlags flags, ZPageAge age, uint32_t preferred_partition) {
EventZPageAllocation event;
ZPageAllocation allocation(type, size, flags, age, preferred_partition);
// Allocate the page
ZPage* const page = alloc_page_inner(&allocation);
if (page == nullptr) {
return nullptr;
}
// Update allocation statistics. Exclude gc relocations to avoid
// artificial inflation of the allocation rate during relocation.
| 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 |
| harvested | ulong: bytes 25+ | Harvested |
| committed | ulong: bytes 15+ | Committed |
| harvestedRanges | uint 25+ | Harvested Ranges Number of harvested memory ranges |
| multiPartition | boolean 25+ | Multi-Partition |
| successful | boolean 25+ | Successful |
| nonBlocking | boolean | Non-Blocking |
Examples 2
| committed | ulong: bytes | 0
|
|---|---|---|
| harvested | ulong: bytes | 0
|
| harvestedRanges | uint | 0
|
| multiPartition | boolean | false
|
| nonBlocking | boolean | false
|
| size | ulong: bytes | 2097152
|
| stackTrace | StackTrace | |
| frames | StackFrame | |
| bytecodeIndex | int | 17
|
| lineNumber | int | 1402
|
| method | Method | |
| descriptor | string | (Ljava/lang/CharSequence;IZ)[Ljava/lang/String;
|
| hidden | boolean | false
|
| modifiers | int | 2
|
| name | string | split
|
| type | Class | |
| classLoader | ClassLoader | |
| name | string | bootstrap
|
| type | Class | null
|
| hidden | boolean | false
|
| modifiers | int | 17
|
| name | string | java/util/regex/Pattern
|
| 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
|
| type | FrameType | JIT compiled
|
| … | ||
| truncated | boolean | false
|
| startTime | long: millis | 979874042
|
| successful | boolean | true
|
| type | ZPageTypeType | Small
|
| committed | ulong: bytes | 0
|
|---|---|---|
| harvested | ulong: bytes | 0
|
| harvestedRanges | uint | 0
|
| multiPartition | boolean | false
|
| 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 | 603683662
|
| successful | boolean | true
|
| 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:
ZRelocationSetSelector::ZRelocationSetSelector(double fragmentation_limit)
: _small("Small", ZPageType::small, ZPageSizeSmall, ZObjectSizeLimitSmall, fragmentation_limit),
_medium("Medium", ZPageType::medium, ZPageSizeMediumMax, ZObjectSizeLimitMedium, fragmentation_limit),
_large("Large", ZPageType::large, 0 /* max_page_size */, 0 /* object_size_limit */, fragmentation_limit),
_empty_pages() {}
void ZRelocationSetSelector::select() {
// 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();
// Send event
event.commit(total(), empty(), relocate());
}
ZRelocationSetSelectorStats ZRelocationSetSelector::stats() const {
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| total | ulong: bytes | Total |
| empty | ulong: bytes | Empty |
| relocate | ulong: bytes 16+ | Relocate |
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:
_stats[i]._relocate = live_bytes_per_age[i] - rejected_live_bytes_per_age[i];
_stats[i]._npages_selected = npages_per_age[i] - rejected_npages_per_age[i];
}
log_debug(gc, reloc)("Relocation Set (%s Pages): %d->%d, %d skipped, %zu forwarding entries",
_name, selected_from, selected_to, npages - selected_from, selected_forwarding_entries);
}
void ZRelocationSetSelectorGroup::select() {
if (is_disabled()) {
return;
}
EventZRelocationSetGroup event;
if (is_selectable()) {
select_inner();
} else {
// Mark pages as not selected
const int npages = _live_pages.length();
for (int from = 1; from <= npages; from++) {
ZPage* const page = _live_pages.at(from - 1);
_not_selected_pages.append(page);
}
}
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| type | ZPageTypeType | Type |
| candidatePages | ulong 21+ | Candidate Pages |
| total | ulong: bytes | Total |
| empty | ulong: bytes | Empty |
| selectedPages | ulong 21+ | Selected Pages |
| relocate | ulong: bytes 16+ | Relocate |
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:
e.set_gcId(GCId::current());
e.set_starttime(_start);
e.set_endtime(timestamp);
e.commit();
}
void ZTracer::initialize() {
JFR_ONLY(register_jfr_type_serializers();)
}
void ZTracer::send_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
NoSafepointVerifier nsv;
JfrNonReentrant<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/zTracer.hpp"
#include "jfr/jfrEvents.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);
}
}
| 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 | 710257522
|
| value | ulong | 104857600
|
| id | ZStatisticsCounterType | Allocation Rate
|
|---|---|---|
| increment | ulong | 2097152
|
| startTime | long: millis | 1062916452
|
| value | ulong | 148897792
|
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:
JfrNonReentrant<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;
JfrNonReentrant<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:
#define SHARE_GC_Z_ZTRACER_INLINE_HPP
#include "gc/z/zTracer.hpp"
#include "jfr/jfrEvents.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 void ZTracer::report_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
| 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 Weak Roots OopStorageSet
|
|---|---|---|
| startTime | long: millis | 418774953
|
| value | ulong | 203148
|
| id | ZStatisticsSamplerType | Concurrent Roots OopStorageSet
|
|---|---|---|
| startTime | long: millis | 402404767
|
| value | ulong | 1312
|
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:
NoSafepointVerifier nsv;
JfrNonReentrant<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();
}
}
void ZTracer::send_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
NoSafepointVerifier nsv;
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 void ZTracer::report_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadDebug::is_enabled()) {
send_thread_debug(name, start, end);
}
}
inline ZTraceThreadDebug::ZTraceThreadDebug(const char* name)
| 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::update_statistics(size_t uncommitted, Ticks start, Tickspan* accumulated_time) const {
// Update counter
ZStatInc(ZCounterUncommit, uncommitted);
Ticks end = Ticks::now();
// Send event
EventZUncommit::commit(start, end, uncommitted);
// Track accumulated time
*accumulated_time += end - start;
}
void ZUncommitter::run_thread() {
// Initialize first cycle timeout
_next_cycle_timeout = to_millis(ZUncommitDelay);
while (wait(_next_cycle_timeout)) {
// Counters for event and statistics
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| uncommitted | ulong: bytes | Uncommitted |
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);
}
if (!heap->is_bitmap_region_special()) {
heap->uncommit_bitmap_slice(this);
}
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.release_store(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 | 2886
|
| start | ulong: address | 33193721856
|
| startTime | long: millis | 13459213186
|
| to | ShenandoahHeapRegionState | Regular
|
| used | ulong: bytes | 0
|
| from | ShenandoahHeapRegionState | Empty Uncommitted
|
|---|---|---|
| index | uint | 3731
|
| start | ulong: address | 34079768576
|
| startTime | long: millis | 604918523
|
| 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
ShenandoahEvacuationInformation
Category: Java Virtual Machine / GC / Detailed
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/shenandoahTrace.cpp:
void ShenandoahTracer::report_evacuation_info(const ShenandoahCollectionSet* cset,
size_t free_regions, size_t regions_immediate, size_t immediate_size) {
EventShenandoahEvacuationInformation e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_cSetRegions(cset->count());
e.set_cSetUsedBefore(cset->used());
e.set_cSetUsedAfter(cset->live());
e.set_freeRegions(free_regions);
e.set_regionsImmediate(regions_immediate);
e.set_immediateBytes(immediate_size);
e.commit();
}
}
void ShenandoahTracer::report_promotion_info(const ShenandoahCollectionSet* cset,
size_t regions_promoted_humongous, size_t humongous_promoted_garbage, size_t humongous_promoted_free,
size_t regions_promoted_regular, size_t regular_promoted_garbage, size_t regular_promoted_free) {
| Configuration | enabled |
|---|---|
| default | false |
| profiling | false |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| cSetRegions | ulong | 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 |
| freeRegions | ulong 25+ | Free Regions Free regions prior to collection |
| regionsImmediate | ulong | Regions Immediate |
| immediateBytes | ulong: bytes | Immediate Bytes |
ShenandoahPromotionInformation
Category: Java Virtual Machine / GC / Detailed
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/shenandoahTrace.cpp:
e.set_cSetUsedAfter(cset->live());
e.set_freeRegions(free_regions);
e.set_regionsImmediate(regions_immediate);
e.set_immediateBytes(immediate_size);
e.commit();
}
}
void ShenandoahTracer::report_promotion_info(const ShenandoahCollectionSet* cset,
size_t regions_promoted_humongous, size_t humongous_promoted_garbage, size_t humongous_promoted_free,
size_t regions_promoted_regular, size_t regular_promoted_garbage, size_t regular_promoted_free) {
EventShenandoahPromotionInformation e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_collectedOld(cset->get_live_bytes_in_old_regions());
e.set_collectedPromoted(cset->get_live_bytes_in_tenurable_regions());
e.set_collectedYoung(cset->get_live_bytes_in_untenurable_regions());
e.set_regionsPromotedHumongous(regions_promoted_humongous);
e.set_humongousPromotedGarbage(humongous_promoted_garbage);
e.set_humongousPromotedFree(humongous_promoted_free);
e.set_regionsPromotedRegular(regions_promoted_regular);
e.set_regularPromotedGarbage(regular_promoted_garbage);
e.set_regularPromotedFree(regular_promoted_free);
| Configuration | enabled |
|---|---|
| default | false |
| profiling | false |
| Field | Type | Description |
|---|---|---|
| gcId | uint | GC Identifier |
| collectedOld | ulong: bytes | Collected Old Memory collected from old generation |
| collectedPromoted | ulong: bytes | Collected Promoted Memory collected from generation promotion |
| collectedYoung | ulong: bytes | Collection Young Memory collected from young generation |
| regionsPromotedHumongous | ulong | Regions Promoted Humongous |
| humongousPromotedGarbage | ulong: bytes | Humongous Promoted Garbage Garbage memory of in place promoted humongous regions |
| humongousPromotedFree | ulong: bytes | Humongous Promoted Free Free memory of in place promoted humongous regions |
| regionsPromotedRegular | ulong | Regions Promoted Regular |
| regularPromotedGarbage | ulong: bytes | Regular Promoted Garbage Garbage memory of in place promoted regular regions |
| regularPromotedFree | ulong: bytes | Regular Promoted Free Free memory of in place promoted regular regions |
StringDeduplication
default profiling startTime duration 26 27
Category: Java Virtual Machine / GC / Detailed
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/stringdedup/stringDedupStat.cpp:
void StringDedup::Stat::emit_statistics(bool total) const {
if (log_is_enabled(Debug, stringdedup)) {
log_times(total ? "Total" : "Last");
log_statistics();
}
if (total) {
// Send only JFR events about the last stats
return;
}
EventStringDeduplication e;
if (e.should_commit()) {
e.set_starttime(_active_start);
Ticks active_end = _active_start;
active_end += _active_elapsed;
e.set_endtime(active_end);
e.set_inspected(_inspected);
e.set_known(_known);
e.set_shared(_known_shared);
e.set_newStrings(_new);
e.set_newSize(_new_bytes);
| Configuration | enabled | threshold |
|---|---|---|
| default | true | 0 ms |
| profiling | true | 0 ms |
| Field | Type | Description |
|---|---|---|
| inspected | ulong | Inspected |
| known | ulong | Known |
| shared | ulong | Shared |
| newStrings | ulong | New Strings New unknown strings |
| newSize | ulong: bytes | New Size Size of new unknown strings |
| replaced | ulong | Replaced |
| deleted | ulong | Deleted |
| deduplicated | ulong | Deduplicated |
| deduplicatedSize | ulong: bytes | Deduplicated Size |
| skippedDead | ulong | Skipped Dead |
| skippedIncomplete | ulong | Skipped Incomplete |
| skippedShared | ulong | Skipped Shared |
| processing | Tickspan | Processing |
| tableResize | Tickspan | Table Resize |
| tableCleanup | Tickspan | Table Cleanup |
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 | 6
|
|---|---|---|
| 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 | 13339504
|
| startTime | long: millis | 1049123600
|
| when | GCWhen | After GC
|
| gcId | uint | 20
|
|---|---|---|
| heapSpace | VirtualSpace | |
| committedEnd | ulong: address | 31845253120
|
| committedSize | ulong: bytes | 1677721600
|
| reservedEnd | ulong: address | 34359738368
|
| reservedSize | ulong: bytes | 4192206848
|
| start | ulong: address | 30167531520
|
| heapUsed | ulong: bytes | 1675732264
|
| startTime | long: millis | 13390268203
|
| when | GCWhen | Before GC
|
| gcId | uint | 40
|
|---|---|---|
| heapSpace | VirtualSpace | |
| committedEnd | ulong: address | 30198988800
|
| committedSize | ulong: bytes | 31457280
|
| reservedEnd | ulong: address | 34359738368
|
| reservedSize | ulong: bytes | 4192206848
|
| start | ulong: address | 30167531520
|
| heapUsed | ulong: bytes | 18207040
|
| startTime | long: millis | 1780566209
|
| when | GCWhen | Before 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:
GCHeapSummaryEventSender visitor(when);
heap_summary.accept(&visitor);
}
static JfrStructMetaspaceSizes to_struct(const MetaspaceStats& 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.stats())); // total stats (class + nonclass)
e.set_dataSpace(to_struct(meta_space_summary.stats().non_class_space_stats())); // "dataspace" aka non-class space
e.set_classSpace(to_struct(meta_space_summary.stats().class_space_stats()));
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 | 6356992
|
| reserved | ulong: bytes | 1073741824
|
| used | ulong: bytes | 6223912
|
| dataSpace | MetaspaceSizes | |
| committed | ulong: bytes | 26345472
|
| reserved | ulong: bytes | 67108864
|
| used | ulong: bytes | 26126520
|
| gcId | uint | 37
|
| gcThreshold | ulong: bytes | 54394880
|
| metaspace | MetaspaceSizes | |
| committed | ulong: bytes | 32702464
|
| reserved | ulong: bytes | 1140850688
|
| used | ulong: bytes | 32350432
|
| startTime | long: millis | 5734473544
|
| when | GCWhen | Before GC
|
| classSpace | MetaspaceSizes | |
|---|---|---|
| committed | ulong: bytes | 2949120
|
| reserved | ulong: bytes | 1073741824
|
| used | ulong: bytes | 2829784
|
| dataSpace | MetaspaceSizes | |
| committed | ulong: bytes | 11927552
|
| reserved | ulong: bytes | 67108864
|
| used | ulong: bytes | 11784144
|
| gcId | uint | 24
|
| gcThreshold | ulong: bytes | 24707072
|
| metaspace | MetaspaceSizes | |
| committed | ulong: bytes | 14876672
|
| reserved | ulong: bytes | 1140850688
|
| used | ulong: bytes | 14613928
|
| startTime | long: millis | 1455284790
|
| when | GCWhen | After GC
|
| classSpace | MetaspaceSizes | |
|---|---|---|
| committed | ulong: bytes | 2686976
|
| reserved | ulong: bytes | 1073741824
|
| used | ulong: bytes | 2572944
|
| dataSpace | MetaspaceSizes | |
| committed | ulong: bytes | 11337728
|
| reserved | ulong: bytes | 67108864
|
| used | ulong: bytes | 11239864
|
| gcId | uint | 10
|
| gcThreshold | ulong: bytes | 22872064
|
| metaspace | MetaspaceSizes | |
| committed | ulong: bytes | 14024704
|
| reserved | ulong: bytes | 1140850688
|
| used | ulong: bytes | 13812808
|
| startTime | long: millis | 2342283121
|
| 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 | 33478934528
|
| size | ulong: bytes | 515899392
|
| start | ulong: address | 32963035136
|
| used | ulong: bytes | 27516824
|
| fromSpace | ObjectSpace | |
| end | ulong: address | 33491517440
|
| size | ulong: bytes | 6291456
|
| start | ulong: address | 33485225984
|
| used | ulong: bytes | 0
|
| gcId | uint | 47
|
| 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 | 1898240836
|
| toSpace | ObjectSpace | |
| end | ulong: address | 33485225984
|
| size | ulong: bytes | 6291456
|
| start | ulong: address | 33478934528
|
| used | ulong: bytes | 0
|
| when | GCWhen | Before GC
|
| youngSpace | VirtualSpace | |
| committedEnd | ulong: address | 33491517440
|
| committedSize | ulong: bytes | 528482304
|
| reservedEnd | ulong: address | 34359738368
|
| reservedSize | ulong: bytes | 1396703232
|
| start | ulong: address | 32963035136
|
| edenSpace | ObjectSpace | |
|---|---|---|
| end | ulong: address | 33783021568
|
| size | ulong: bytes | 819986432
|
| start | ulong: address | 32963035136
|
| used | ulong: bytes | 193385696
|
| fromSpace | ObjectSpace | |
| end | ulong: address | 33816576000
|
| size | ulong: bytes | 33554432
|
| start | ulong: address | 33783021568
|
| used | ulong: bytes | 0
|
| gcId | uint | 17
|
| oldObjectSpace | ObjectSpace | |
| end | ulong: address | 30343692288
|
| size | ulong: bytes | 176160768
|
| start | ulong: address | 30167531520
|
| used | ulong: bytes | 122317344
|
| 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 | 9232927602
|
| toSpace | ObjectSpace | |
| end | ulong: address | 34342961152
|
| size | ulong: bytes | 33554432
|
| start | ulong: address | 34309406720
|
| used | ulong: bytes | 0
|
| when | GCWhen | Before GC
|
| youngSpace | VirtualSpace | |
| committedEnd | ulong: address | 34342961152
|
| committedSize | ulong: bytes | 1379926016
|
| 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_oldGenUsedSize(g1_heap_summary->oldGenUsed());
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 |
| oldGenUsedSize | ulong: bytes 21+ | Old Generation 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 |