Introduction

This page is a complete reference of Java Flight Recorder (JFR) events for OpenJDK 27 (jdk-27+35, permalink, 13-September-2026). JFR events are the foundation of JVM profiling and observability — they capture runtime data such as garbage collection pauses, CPU load, thread activity, class loading, compilations, and more. The events listed here are collected from the JFR event configuration and the OpenJDK 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.

For each JFR event you'll find its fields, default configuration profiles (continuous / profiling), real-world examples from the Renaissance benchmark, and — where available — source code context to help you understand what each event means during JVM performance analysis.

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 27 28

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.

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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 27 28

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))

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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 27 28

Category: Flight Recorder

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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:

Event configuration settings across JFR profiles
Configuration enabled threshold
default false 0 ns
profiling false 0 ns

Event fields with their types and descriptions
Field Type Description
flushId ulong Flush Identifier
elements ulong Elements Written
size ulong: bytes Size Written

Examples 3
Example event data values and properties
elements ulong
5891
flushId ulong
202
size ulong: bytes
806190
startTime long: millis
462658441173
Example event data values and properties
elements ulong
3632
flushId ulong
314
size ulong: bytes
1285511
startTime long: millis
465817411152
Example event data values and properties
elements ulong
62
flushId ulong
22
size ulong: bytes
358890
startTime long: millis
22876915390

ActiveSetting

default profiling startTime duration stackTrace 11 17 21 25 27 28

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/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/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/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")

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
id long Event Id
name string Setting Name
value string Setting Value

Examples 3
Example event data values and properties
id long
160
name string
threshold
startTime long: millis
361737433
value string
0 ms
Example event data values and properties
id long
2091
name string
period
startTime long: millis
453048059860
value string
30 s
Example event data values and properties
id long
1893
name string
enabled
startTime long: millis
447752338153
value string
true

ActiveRecording

default profiling startTime duration stackTrace 11 17 21 25 27 28

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/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/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/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")

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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
Example event data values and properties
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
1788871963460
startTime long: millis
7977570347
Example event data values and properties
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
1788871449508
startTime long: millis
493397135325
Example event data values and properties
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
1789259151646
startTime long: millis
484651328822

JVM

JVMInformation

default profiling startTime duration end of every chunk 11 17 21 25 27 28

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/jfrRedactedEvents.cpp:

    event.commit();
  }
}

void JfrRedactedEvents::log_jvm_information_redaction(const char* type, const String* redacted) {
  const char* text = String::c_str(redacted);
  if (text != nullptr && strstr(text, REDACTED) != nullptr) {
    log_debug(jfr, redact)("Redacted %s '%s'", type, text);
  }
}

void JfrRedactedEvents::emit_jvm_information(bool log) {
  ensure_initialized();
  EventJVMInformation event;
  event.set_jvmName(VM_Version::vm_name());
  event.set_jvmVersion(VM_Version::internal_vm_info_string());
  event.set_javaArguments(String::c_str(_redacted_java_command_line));
  event.set_jvmArguments(String::c_str(_redacted_jvm_command_line));
  event.set_jvmFlags(String::c_str(_redacted_flags_command_line));
  event.set_jvmStartTime(Management::vm_init_done_time());
  event.set_pid(os::current_process_id());
  event.commit();
  if (log) {
    log_jvm_information_redaction("Java Arguments", _redacted_java_command_line);
    log_jvm_information_redaction("JVM Arguments", _redacted_jvm_command_line);

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
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
Example event data values and properties
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
1789259151398
jvmVersion string
OpenJDK 64-Bit Server VM (25.0.4.1+1-LTS) for linux-amd64 JRE (25.0.4.1+1-LTS), built on 2026-08-14T07:36:00Z with gcc 14.2.0
pid long
2150
startTime long: millis
473544968440
Example event data values and properties
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
1788871449128
jvmVersion string
OpenJDK 64-Bit Server VM (25.0.4.1+1-LTS) for linux-amd64 JRE (25.0.4.1+1-LTS), built on 2026-08-14T07:36:00Z with gcc 14.2.0
pid long
2534
startTime long: millis
493399269387
Example event data values and properties
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
1788871963118
jvmVersion string
OpenJDK 64-Bit Server VM (25.0.4.1+1-LTS) for linux-amd64 JRE (25.0.4.1+1-LTS), built on 2026-08-14T07:36:00Z with gcc 14.2.0
pid long
5013
startTime long: millis
23227602207

InitialSystemProperty

default profiling startTime end of every chunk 11 17 21 25 27 28

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/jfrRedactedEvents.cpp:

           value = REDACTED;
        }
        if (log && value != nullptr && strstr(value, REDACTED) != nullptr) {
          log_debug(jfr, redact)("Redacted initial system property named '%s'", p->key());
        }
        _initial_system_properties->append(new StringKeyValue(p->key(), value));
      }
    }
  }

  JfrTicks time_stamp = JfrTicks::now();
  for (int i = 0; i < _initial_system_properties->length(); i++) {
    StringKeyValue* pair = _initial_system_properties->at(i);
    EventInitialSystemProperty event(UNTIMED);
    event.set_key(pair->key());
    event.set_value(pair->value());
    event.set_starttime(time_stamp);
    event.set_endtime(time_stamp);
    event.commit();
  }
}

bool JfrRedactedEvents::match_flag(const char* flag_name, const char* arg) {
  if (flag_name == nullptr || arg == nullptr) {
    return false;

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
key string Key
value string Value

Examples 3
Example event data values and properties
key string
sun.boot.library.path
startTime long: millis
454119486822
value string
/opt/hostedtoolcache/Java_SapMachine_jdk/25.0.4-1/x64/lib
Example event data values and properties
key string
java.vm.version
startTime long: millis
457152110658
value string
25.0.4.1+1-LTS
Example event data values and properties
key string
sun.java.launcher
startTime long: millis
364515232
value string
SUN_STANDARD

JVM: Class Loading

ClassLoad

startTime duration eventThread stackTrace 11 17 21 25 27 28

Category: Java Virtual Machine / Class Loading

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Code Context

The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:

src/hotspot/share/classfile/systemDictionary.hpp:

//         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/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) {

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/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()) {

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default false true 0 ms
profiling false true 0 ms

Event fields with their types and descriptions
Field Type Description
loadedClass Class Loaded Class
definingClassLoader ClassLoader Defining Class Loader
initiatingClassLoader ClassLoader Initiating Class Loader

Examples 3
Example event data values and properties
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.4.1
name string
java/net
initiatingClassLoader 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.4.1
name string
java/net
loadedClass 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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
org/apache/spark/executor/ProcfsMetricsGetter$
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/spark/executor
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
93
method Method
descriptor string
(Lorg/apache/spark/memory/MemoryManager;)[J
hidden boolean
false
modifiers int
1
name string
getMetricValues
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
org/apache/spark/metrics/ProcessTreeMetrics$
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/spark/metrics
type FrameType
Interpreted
truncated boolean
false
startTime long: millis
457785055112
Example event data values and properties
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.4.1
name string
java/net
initiatingClassLoader 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.4.1
name string
java/net
loadedClass 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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
scala/io/Codec$
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
scala/io
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
7
lineNumber int
1321
method Method
descriptor string
()V
hidden boolean
false
modifiers int
1
name string
run
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
org/apache/spark/util/Utils$$anon$3
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/spark/util
type FrameType
Interpreted
truncated boolean
false
startTime long: millis
456411016690
Example event data values and properties
definingClassLoader ClassLoader
name string
bootstrap
type Class
null
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.4.1
name string
jdk/internal/loader
loadedClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/RuntimeException
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.4.1
name string
java/lang
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.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
386265246

ClassDefine

startTime eventThread stackTrace 11 17 21 25 27 28

Category: Java Virtual Machine / Class Loading

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default false true
profiling false true

Event fields with their types and descriptions
Field Type Description
definedClass Class Defined Class
definingClassLoader ClassLoader Defining Class Loader
source Symbol 26+ Source

Examples 3
Example event data values and properties
definedClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
8
name string
jdk/internal/math/FloatingDecimal$PreparedASCIIToBinaryBuffer
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.4.1
name string
jdk/internal/math
definingClassLoader ClassLoader
name string
bootstrap
type Class
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
88
lineNumber int
1023
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
1
name string
jdk/internal/math/FloatingDecimal
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.4.1
name string
jdk/internal/math
type FrameType
Interpreted
truncated boolean
false
startTime long: millis
390056706
Example event data values and properties
definedClass 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.4.1
name string
java/net
hidden boolean
false
modifiers int
1545
name string
dotty/tools/dotc/core/DenotTransformers$IdentityDenotTransformer
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
dotty/tools/dotc/core
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.4.1
name string
java/net
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class;
hidden boolean
false
modifiers int
264
name string
defineClass1
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1025
name string
java/lang/ClassLoader
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
481985714880
Example event data values and properties
definedClass 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.4.1
name string
java/net
hidden boolean
false
modifiers int
0
name string
io/netty/util/concurrent/DefaultPromise$1
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
io/netty/util/concurrent
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.4.1
name string
java/net
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class;
hidden boolean
false
modifiers int
264
name string
defineClass1
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1025
name string
java/lang/ClassLoader
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
482360656074

ClassRedefinition

default profiling startTime 15 17 21 25 27 28

Category: Java Virtual Machine / Class Loading

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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;

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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
Example event data values and properties
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.4.1
name string
java/util
redefinitionId ulong
1
startTime long: millis
1337141635
Example event data values and properties
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.4.1
name string
java/util
redefinitionId ulong
1
startTime long: millis
1430438418
Example event data values and properties
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.4.1
name string
java/util
redefinitionId ulong
1
startTime long: millis
1000937922

RedefineClasses

default profiling startTime duration eventThread stackTrace 15 17 21 25 27 28

Category: Java Virtual Machine / Class Loading

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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 */

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 0 ms
profiling true true 0 ms

Event fields with their types and descriptions
Field Type Description
classCount int Class Count
redefinitionId ulong Class Redefinition Id

Examples 3
Example event data values and properties
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.4.1
name string
sun/instrument
type FrameType
Native
truncated boolean
false
startTime long: millis
1005987111
Example event data values and properties
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.4.1
name string
sun/instrument
type FrameType
Native
truncated boolean
false
startTime long: millis
1435979800
Example event data values and properties
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.4.1
name string
sun/instrument
type FrameType
Native
truncated boolean
false
startTime long: millis
1345889791

RetransformClasses

default profiling startTime duration eventThread stackTrace 15 17 21 25 27 28

Category: Java Virtual Machine / Class Loading

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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 */

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 0 ms
profiling true true 0 ms

Event fields with their types and descriptions
Field Type Description
classCount int Class Count
redefinitionId ulong Class Redefinition Id

Examples 3
Example event data values and properties
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.4.1
name string
sun/instrument
type FrameType
Native
truncated boolean
false
startTime long: millis
997679097
Example event data values and properties
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.4.1
name string
sun/instrument
type FrameType
Native
truncated boolean
false
startTime long: millis
1426353273
Example event data values and properties
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.4.1
name string
sun/instrument
type FrameType
Native
truncated boolean
false
startTime long: millis
1331982897

ClassUnload

startTime eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / Class Loading

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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.

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling false

Event fields with their types and descriptions
Field Type Description
unloadedClass Class Unloaded Class
definingClassLoader ClassLoader Defining Class Loader

Examples 3
Example event data values and properties
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.4.1
name string
java/net
startTime long: millis
500050927158
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.4.1
name string
java/net
hidden boolean
true
modifiers int
4112
name string
dotty.tools.dotc.transform.GenericSignatures$$$Lambda/0x000000008e276400
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
dotty/tools/dotc/transform
Example event data values and properties
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.4.1
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.4.1
name string
jdk/internal/loader
location string
null
name string
null
version string
null
name string
jfr_sample
startTime long: millis
3868161335
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.4.1
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.4.1
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/Unloadable2180634215877
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.4.1
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.4.1
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
Example event data values and properties
definingClassLoader ClassLoader
null
startTime long: millis
492449293822
unloadedClass Class
classLoader ClassLoader
null
hidden boolean
true
modifiers int
16
name string
java.lang.invoke.LambdaForm$DMH/0x00000000830fa000
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.4.1
name string
java/lang/invoke

JVM: Code Cache

CodeCacheFull

default profiling startTime eventThread 11 17 21 25 27 28

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());

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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 27 28

Category: Java Virtual Machine / Code Cache

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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();
    }
  }

Event configuration settings across JFR profiles
Configuration enabled period
default true everyChunk
profiling true everyChunk

Event fields with their types and descriptions
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
Example event data values and properties
adaptorCount int
479
codeBlobType CodeBlobType
CodeHeap 'non-nmethods'
entryCount int
575
fullCount int
0
methodCount int
0
reservedTopAddress ulong: address
140366911111168
startAddress ulong: address
140366904819712
startTime long: millis
7832366070
unallocatedCapacity ulong: bytes
4726528
Example event data values and properties
adaptorCount int
0
codeBlobType CodeBlobType
CodeHeap 'profiled nmethods'
entryCount int
12037
fullCount int
0
methodCount int
12037
reservedTopAddress ulong: address
140168195473408
startAddress ulong: address
140168071741440
startTime long: millis
484278350896
unallocatedCapacity ulong: bytes
91291136
Example event data values and properties
adaptorCount int
0
codeBlobType CodeBlobType
CodeHeap 'profiled nmethods'
entryCount int
8453
fullCount int
0
methodCount int
8453
reservedTopAddress ulong: address
140617959079936
startAddress ulong: address
140617835347968
startTime long: millis
469406020694
unallocatedCapacity ulong: bytes
103307136

CodeCacheConfiguration

default profiling startTime end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Code Cache

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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();
}

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
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
Example event data values and properties
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
140168325496832
startAddress ulong: address
140168071741440
startTime long: millis
451440161379
Example event data values and properties
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
140618089103360
startAddress ulong: address
140617835347968
startTime long: millis
479556670171
Example event data values and properties
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
140367034843136
startAddress ulong: address
140366781087744
startTime long: millis
15623181982

JVM: Compiler

JITRestart

default profiling startTime eventThread 17 21 25 27 28

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.

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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 27 28

Category: Java Virtual Machine / Compiler

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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/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;

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;

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 1000 ms
profiling true 100 ms

Event fields with their types and descriptions
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
Example event data values and properties
arenaBytes ulong: bytes
0
codeSize ulong: bytes
1248
compileId int
94095
compileLevel ushort
3
compiler CompilerType
c1
inlinedBytes ulong: bytes
19
isOsr boolean
false
method Method
descriptor string
(Lscala/collection/IterableOnce;)Lscala/collection/mutable/LinkedHashMap;
hidden boolean
false
modifiers int
1
name string
from
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
scala/collection/mutable/LinkedHashMap$
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
scala/collection/mutable
startTime long: millis
453386218641
succeded boolean
true
Example event data values and properties
arenaBytes ulong: bytes
0
codeSize ulong: bytes
232
compileId int
92795
compileLevel ushort
1
compiler CompilerType
c1
inlinedBytes ulong: bytes
0
isOsr boolean
false
method Method
descriptor string
()Lscala/Option;
hidden boolean
false
modifiers int
1
name string
description
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.4.1
name string
java/net
hidden boolean
false
modifiers int
1
name string
org/apache/spark/status/LiveStage
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/spark/status
startTime long: millis
448061498519
succeded boolean
true
Example event data values and properties
arenaBytes ulong: bytes
0
codeSize ulong: bytes
4080
compileId int
1390
compileLevel ushort
3
compiler CompilerType
c1
inlinedBytes ulong: bytes
46
isOsr boolean
false
method Method
descriptor string
(Ljava/lang/String;[BLjava/util/Locale;)Ljava/lang/String;
hidden boolean
false
modifiers int
9
name string
toUpperCase
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
16
name string
java/lang/StringLatin1
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.4.1
name string
java/lang
startTime long: millis
394862200
succeded boolean
true

CompilerPhase

default profiling startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / Compiler

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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/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();
  };
};

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
}

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 60 s
profiling true 10 s

Event fields with their types and descriptions
Field Type Description
phase CompilerPhaseType Compile Phase
compileId int Compilation Identifier
phaseLevel ushort Phase Level

Examples 3
Example event data values and properties
compileId int
1375
phase CompilerPhaseType
Before beautify loops
phaseLevel ushort
3
startTime long: millis
380752998
Example event data values and properties
compileId int
94077
phase CompilerPhaseType
After Loop Optimizations
phaseLevel ushort
2
startTime long: millis
453348183163
Example event data values and properties
compileId int
92746
phase CompilerPhaseType
After CountedLoop
phaseLevel ushort
3
startTime long: millis
447964770863

CompilationFailure

profiling startTime eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / Compiler

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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/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.

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) {

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling true

Event fields with their types and descriptions
Field Type Description
failureMessage string Failure Message
compileId int Compilation Identifier

Examples 3
Example event data values and properties
compileId int
97533
failureMessage string
retry without subsuming loads
startTime long: millis
482959275877
Example event data values and properties
compileId int
2665
failureMessage string
Jvmti state change invalidated dependencies
startTime long: millis
1419793803
Example event data values and properties
compileId int
108503
failureMessage string
retry without subsuming loads
startTime long: millis
497033831221

CompilerInlining

startTime eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / Compiler / Optimization

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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/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

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!");

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling false

Event fields with their types and descriptions
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
Example event data values and properties
bci int
25
callee CalleeMethod
descriptor string
(B)V
name string
putUncheckedByte
type string
jdk/jfr/internal/event/EventWriter
caller Method
descriptor string
(Ljava/lang/String;)V
hidden boolean
false
modifiers int
2
name string
putStringValue
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
jdk/jfr/internal/event/EventWriter
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/jdk.jfr
name string
jdk.jfr
version string
25.0.4.1
name string
jdk/jfr/internal/event
compileId int
1357
message string
callee uses too much stack
startTime long: millis
363567468
succeeded boolean
false
Example event data values and properties
bci int
16
callee CalleeMethod
descriptor string
([BII)[B
name string
copyOfRange
type string
java/util/Arrays
caller Method
descriptor string
([BII)Ljava/lang/String;
hidden boolean
false
modifiers int
9
name string
newString
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
16
name string
java/lang/StringLatin1
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.4.1
name string
java/lang
compileId int
94089
message string
inline (hot)
startTime long: millis
453360941470
succeeded boolean
true
Example event data values and properties
bci int
1
callee CalleeMethod
descriptor string
()V
name string
<init>
type string
java/lang/Object
caller Method
descriptor string
(Lscala/collection/BuildFromLowPriority2;)V
hidden boolean
false
modifiers int
1
name string
<init>
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
scala/collection/BuildFromLowPriority2$$anon$11
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
scala/collection
compileId int
92730
message string
inline
startTime long: millis
447486982999
succeeded boolean
true

Deoptimization

default profiling startTime eventThread stackTrace 14 17 21 25 27 28

Category: Java Virtual Machine / Compiler

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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();
  }
}

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default true false
profiling true true

Event fields with their types and descriptions
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
Example event data values and properties
action DeoptimizationAction
reinterpret
bci int
60
compileId int
93489
compiler CompilerType
c2
instruction Bytecode
if_icmpne
lineNumber int
152
method Method
descriptor string
(Ljava/lang/Number;Ljava/lang/Number;)Z
hidden boolean
false
modifiers int
9
name string
equalsNumNum
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
scala/runtime/BoxesRunTime
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
scala/runtime
reason DeoptimizationReason
unstable_if
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
60
lineNumber int
152
method Method
descriptor string
(Ljava/lang/Number;Ljava/lang/Number;)Z
hidden boolean
false
modifiers int
9
name string
equalsNumNum
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
scala/runtime/BoxesRunTime
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
scala/runtime
type FrameType
Inlined
truncated boolean
false
startTime long: millis
461455767488
Example event data values and properties
action DeoptimizationAction
maybe_recompile
bci int
1
compileId int
1087
compiler CompilerType
c2
instruction Bytecode
checkcast
lineNumber int
-1
method Method
descriptor string
(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
hidden boolean
true
modifiers int
8
name string
linkToTargetMethod
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
16
name string
java/lang/invoke/Invokers$Holder
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.4.1
name string
java/lang/invoke
reason DeoptimizationReason
speculate_class_check
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
1
lineNumber int
-1
method Method
descriptor string
(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
hidden boolean
true
modifiers int
8
name string
linkToTargetMethod
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
16
name string
java/lang/invoke/Invokers$Holder
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.4.1
name string
java/lang/invoke
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
420697481
Example event data values and properties
action DeoptimizationAction
maybe_recompile
bci int
61
compileId int
97129
compiler CompilerType
c2
instruction Bytecode
invokeinterface
lineNumber int
480
method Method
descriptor string
()Z
hidden boolean
false
modifiers int
1
name string
hasNext
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
scala/collection/Iterator$$anon$6
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
scala/collection
reason DeoptimizationReason
bimorphic_or_optimized_type_check
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
61
lineNumber int
480
method Method
descriptor string
()Z
hidden boolean
false
modifiers int
1
name string
hasNext
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
scala/collection/Iterator$$anon$6
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
scala/collection
type FrameType
JIT compiled
truncated boolean
true
startTime long: millis
482793684482

CompilerQueueUtilization

default profiling startTime duration every chunk 22 25 27 28

Category: Java Virtual Machine / Compiler

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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();

Event configuration settings across JFR profiles
Configuration enabled period
default true 10 s
profiling true 5 s

Event fields with their types and descriptions
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
Example event data values and properties
addedCount long
6133
addedRate long: hertz
1088
compiler CompilerType
c1
compilerThreadCount int
1
peakQueueSize long
156
queueSize long
0
removedCount long
6133
removedRate long: hertz
1088
startTime long: millis
495794701441
totalAddedCount long
92253
totalRemovedCount long
92253
Example event data values and properties
addedCount long
1635
addedRate long: hertz
287
compiler CompilerType
c1
compilerThreadCount int
1
peakQueueSize long
386
queueSize long
0
removedCount long
1635
removedRate long: hertz
287
startTime long: millis
454347224051
totalAddedCount long
74435
totalRemovedCount long
74435
Example event data values and properties
addedCount long
70
addedRate long: hertz
13
compiler CompilerType
c1
compilerThreadCount int
1
peakQueueSize long
19
queueSize long
0
removedCount long
70
removedRate long: hertz
13
startTime long: millis
20862085605
totalAddedCount long
2707
totalRemovedCount long
2707

CompilerStatistics

default profiling startTime every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Compiler

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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());

Event configuration settings across JFR profiles
Configuration enabled period
default true 1000 ms
profiling true 1000 ms

Event fields with their types and descriptions
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
Example event data values and properties
bailoutCount int
4
compileCount int
3033
invalidatedCount int
0
nmethodCodeSize ulong: bytes
4105144
nmethodsSize ulong: bytes
5547496
osrBytesCompiled ulong: bytes
0
osrCompileCount int
22
peakTimeSpent long: millis
190
standardBytesCompiled ulong: bytes
0
standardCompileCount int
3011
startTime long: millis
17809241986
totalTimeSpent long: millis
3188
Example event data values and properties
bailoutCount int
11
compileCount int
114247
invalidatedCount int
0
nmethodCodeSize ulong: bytes
173204320
nmethodsSize ulong: bytes
249553032
osrBytesCompiled ulong: bytes
0
osrCompileCount int
1076
peakTimeSpent long: millis
27428
standardBytesCompiled ulong: bytes
0
standardCompileCount int
113171
startTime long: millis
498989923675
totalTimeSpent long: millis
819802
Example event data values and properties
bailoutCount int
9
compileCount int
102062
invalidatedCount int
0
nmethodCodeSize ulong: bytes
164829536
nmethodsSize ulong: bytes
231015072
osrBytesCompiled ulong: bytes
0
osrCompileCount int
1060
peakTimeSpent long: millis
8163
standardBytesCompiled ulong: bytes
0
standardCompileCount int
101002
startTime long: millis
491897270442
totalTimeSpent long: millis
459538

CompilerConfiguration

default profiling startTime end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Compiler

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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)) {

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
threadCount int Thread Count
tieredCompilation boolean Tiered Compilation
dynamicCompilerThreadCount boolean 20+ Uses Dynamic Number of Compiler Threads

Examples 3
Example event data values and properties
dynamicCompilerThreadCount boolean
true
startTime long: millis
15623177304
threadCount int
3
tieredCompilation boolean
true
Example event data values and properties
dynamicCompilerThreadCount boolean
true
startTime long: millis
464048948589
threadCount int
3
tieredCompilation boolean
true
Example event data values and properties
dynamicCompilerThreadCount boolean
true
startTime long: millis
455586917476
threadCount int
3
tieredCompilation boolean
true

JVM: Diagnostics

SyncOnValueBasedClass

experimental default profiling startTime eventThread stackTrace 16 17 21 25 27 28

Category: Java Virtual Machine / Diagnostics

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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);
  }
}

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default true true
profiling true true

Event fields with their types and descriptions
Field Type Description
valueBasedClass Class Value Based Class

Examples 3
Example event data values and properties
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.4.1
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.4.1
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
1419870633
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.4.1
name string
java/lang
Example event data values and properties
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.4.1
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.4.1
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
1445661290
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.4.1
name string
java/lang
Example event data values and properties
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.4.1
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.4.1
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
1013825953
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.4.1
name string
java/lang

HeapDump

default profiling startTime duration eventThread stackTrace 15 17 21 25 27 28

Category: Java Virtual Machine / Diagnostics

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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;
    }
  }

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 0 ns
profiling true true 0 ns

Event fields with their types and descriptions
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
Example event data values and properties
compression int
-1
destination string
/tmp/jfr_sample_heap_690776453202.hprof
gcBeforeDump boolean
true
onOutOfMemoryError boolean
false
overwrite boolean
false
size long
15622345
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.4.1
name string
com/sun/management/internal
type FrameType
Native
truncated boolean
false
startTime long: millis
1451810903
Example event data values and properties
compression int
-1
destination string
/tmp/jfr_sample_heap_2178218860663.hprof
gcBeforeDump boolean
true
onOutOfMemoryError boolean
false
overwrite boolean
false
size long
14980768
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.4.1
name string
com/sun/management/internal
type FrameType
Native
truncated boolean
false
startTime long: millis
1427293221
Example event data values and properties
compression int
-1
destination string
/tmp/jfr_sample_heap_566482200317.hprof
gcBeforeDump boolean
true
onOutOfMemoryError boolean
false
overwrite boolean
false
size long
14298384
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.4.1
name string
com/sun/management/internal
type FrameType
Native
truncated boolean
false
startTime long: millis
1017913893

JavaAgent

default profiling startTime end of every chunk 21 25 27 28

Category: Java Virtual Machine / Diagnostics

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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);

Event configuration settings across JFR profiles
Configuration enabled period
default true endChunk
profiling true endChunk

Event fields with their types and descriptions
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
Example event data values and properties
dynamic boolean
true
initializationDuration Tickspan
2694249
initializationTime Ticks
520146307
name string
/tmp/jfr_agent11192834965018173758.jar
options string
null
startTime long: millis
20578465627
Example event data values and properties
dynamic boolean
true
initializationDuration Tickspan
2634430
initializationTime Ticks
555050476
name string
/tmp/jfr_agent15005275580992799933.jar
options string
null
startTime long: millis
25459988992
Example event data values and properties
dynamic boolean
true
initializationDuration Tickspan
2079534
initializationTime Ticks
430729893
name string
/tmp/jfr_agent16064620304536894111.jar
options string
null
startTime long: millis
19494217259

NativeAgent

default profiling startTime end of every chunk 21 25 27 28

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);

Event configuration settings across JFR profiles
Configuration enabled period
default true endChunk
profiling true endChunk

Event fields with their types and descriptions
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 27 28

Category: Java Virtual Machine / Flag

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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 {

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
name string Name
oldValue int Old Value
newValue int New Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
HeapDumpGzipLevel
newValue int
1
oldValue int
0
origin FlagValueOrigin
Management
startTime long: millis
1402046663
Example event data values and properties
name string
HeapDumpGzipLevel
newValue int
0
oldValue int
1
origin FlagValueOrigin
Management
startTime long: millis
1312213163
Example event data values and properties
name string
HeapDumpGzipLevel
newValue int
1
oldValue int
0
origin FlagValueOrigin
Management
startTime long: millis
982256368

UnsignedIntFlagChanged

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / Flag

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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 {

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
name string Name
oldValue uint Old Value
newValue uint New Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
FullGCHeapDumpLimit
newValue uint
0
oldValue uint
1
origin FlagValueOrigin
Management
startTime long: millis
1312263478
Example event data values and properties
name string
FullGCHeapDumpLimit
newValue uint
0
oldValue uint
1
origin FlagValueOrigin
Management
startTime long: millis
1402161396
Example event data values and properties
name string
FullGCHeapDumpLimit
newValue uint
1
oldValue uint
0
origin FlagValueOrigin
Management
startTime long: millis
982280334

LongFlagChanged

default profiling startTime 11 17 21 25 27 28

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 {

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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 27 28

Category: Java Virtual Machine / Flag

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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 {

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
name string Name
oldValue ulong Old Value
newValue ulong New Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
SoftMaxHeapSize
newValue ulong
3726639104
oldValue ulong
1863319552
origin FlagValueOrigin
Management
startTime long: millis
982340324
Example event data values and properties
name string
SoftMaxHeapSize
newValue ulong
2096103424
oldValue ulong
4192206848
origin FlagValueOrigin
Management
startTime long: millis
1312337486
Example event data values and properties
name string
SoftMaxHeapSize
newValue ulong
2027257856
oldValue ulong
4194304000
origin FlagValueOrigin
Management
startTime long: millis
1402243529

DoubleFlagChanged

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / Flag

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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 {

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
name string Name
oldValue double Old Value
newValue double New Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
G1PeriodicGCSystemLoadThreshold
newValue double
0.5
oldValue double
0.0
origin FlagValueOrigin
Management
startTime long: millis
982220514
Example event data values and properties
name string
G1PeriodicGCSystemLoadThreshold
newValue double
0.5
oldValue double
0.0
origin FlagValueOrigin
Management
startTime long: millis
1312118105
Example event data values and properties
name string
G1PeriodicGCSystemLoadThreshold
newValue double
0.0
oldValue double
0.5
origin FlagValueOrigin
Management
startTime long: millis
1402012389

BooleanFlagChanged

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / Flag

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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:

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
name string Name
oldValue boolean Old Value
newValue boolean New Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
PrintConcurrentLocks
newValue boolean
false
oldValue boolean
true
origin FlagValueOrigin
Management
startTime long: millis
1401681274
Example event data values and properties
name string
PrintConcurrentLocks
newValue boolean
false
oldValue boolean
true
origin FlagValueOrigin
Management
startTime long: millis
1311830235
Example event data values and properties
name string
PrintConcurrentLocks
newValue boolean
true
oldValue boolean
false
origin FlagValueOrigin
Management
startTime long: millis
981978980

StringFlagChanged

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / Flag

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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.

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
name string Name
oldValue string Old Value
newValue string New Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
HeapDumpPath
newValue string
/tmp/jfr_heap
oldValue string
null
origin FlagValueOrigin
Management
startTime long: millis
1401893799
Example event data values and properties
name string
HeapDumpPath
newValue string
/tmp/jfr_heap
oldValue string
null
origin FlagValueOrigin
Management
startTime long: millis
1312044006
Example event data values and properties
name string
HeapDumpPath
newValue string
/tmp/jfr_heap
oldValue string
null
origin FlagValueOrigin
Management
startTime long: millis
982179352

IntFlag

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Flag

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
name string Name
value int Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
ThreadPriorityPolicy
origin FlagValueOrigin
Default
startTime long: millis
447754314822
value int
0
Example event data values and properties
name string
JavaPriority1_To_OSPriority
origin FlagValueOrigin
Default
startTime long: millis
8025086659
value int
-1
Example event data values and properties
name string
VerifyMetaspaceInterval
origin FlagValueOrigin
Default
startTime long: millis
453049974390
value int
0

UnsignedIntFlag

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Flag

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
name string Name
value uint Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
GCCardSizeInBytes
origin FlagValueOrigin
Default
startTime long: millis
447754328803
value uint
512
Example event data values and properties
name string
G1SATBBufferEnqueueingThresholdPercent
origin FlagValueOrigin
Default
startTime long: millis
454993849101
value uint
60
Example event data values and properties
name string
G1RemSetArrayOfCardsEntriesBase
origin FlagValueOrigin
Default
startTime long: millis
8025099944
value uint
8

LongFlag

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Flag

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
name string Name
value long Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
CICrashAt
origin FlagValueOrigin
Default
startTime long: millis
447754337677
value long
-1
Example event data values and properties
name string
PartialPeelNewPhiDelta
origin FlagValueOrigin
Default
startTime long: millis
453049998014
value long
0
Example event data values and properties
name string
UnrollLimitForProfileCheck
origin FlagValueOrigin
Default
startTime long: millis
365013306
value long
1

UnsignedLongFlag

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Flag

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
name string Name
value ulong Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
G1UpdateBufferSize
origin FlagValueOrigin
Default
startTime long: millis
447754365258
value ulong
256
Example event data values and properties
name string
NonProfiledCodeHeapSize
origin FlagValueOrigin
Ergonomic
startTime long: millis
365038514
value ulong
123731968
Example event data values and properties
name string
MaxVirtMemFraction
origin FlagValueOrigin
Default
startTime long: millis
453050031928
value ulong
2

DoubleFlag

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Flag

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
name string Name
value double Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
InitialRAMPercentage
origin FlagValueOrigin
Default
startTime long: millis
8025167671
value double
1.5625
Example event data values and properties
name string
G1ConcMarkStepDurationMillis
origin FlagValueOrigin
Default
startTime long: millis
447754370566
value double
10.0
Example event data values and properties
name string
ZCollectionInterval
origin FlagValueOrigin
Default
startTime long: millis
459805950660
value double
0.0

BooleanFlag

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Flag

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
name string Name
value boolean Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
UseXmmI2D
origin FlagValueOrigin
Default
startTime long: millis
365063310
value boolean
true
Example event data values and properties
name string
UseGlobalValueNumbering
origin FlagValueOrigin
Default
startTime long: millis
453050062505
value boolean
true
Example event data values and properties
name string
ProfileTraps
origin FlagValueOrigin
Default
startTime long: millis
447754434422
value boolean
true

StringFlag

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Flag

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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/jfrRedactedEvents.cpp:

         if (log && redacted) {
           log_debug(jfr, redact)("Redacted string flag '%s'", flag->name());
         }
         _string_flags->append(new StringFlag(flag, value));
      }
      ++flag;
    }
  }
  for (int i = 0; i < _string_flags->length(); i++) {
    StringFlag* sf = _string_flags->at(i);
    const JVMFlag* flag = sf->jvm_flag();
    EventStringFlag event;
    event.set_name(flag->name());
    if (sf->redacted_value() != nullptr) {
      // If a flag is redacted and later changed at runtime,
      // the event will still show the redacted text.
      event.set_value(sf->redacted_value());
    } else {
      // If a flag is not redacted the first time,
      // it will not be redacted later if it's changed at runtime.
      event.set_value(flag->get_ccstr());
    }
    event.set_origin(static_cast<u8>(flag->get_origin()));

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
name string Name
value string Value
origin FlagValueOrigin Origin

Examples 3
Example event data values and properties
name string
AOTMode
origin FlagValueOrigin
Default
startTime long: millis
449445278497
value string
null
Example event data values and properties
name string
HiMemReportExec
origin FlagValueOrigin
Default
startTime long: millis
454993987210
value string
null
Example event data values and properties
name string
LogClassLoadingCauseFor
origin FlagValueOrigin
Default
startTime long: millis
365143781
value string
null

JVM: GC: Collector

GarbageCollection

default profiling startTime duration eventThread 11 17 21 25 27 28

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();
  }
}

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
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
Example event data values and properties
cause GCCause
G1 Evacuation Pause
gcId uint
93
longestPause Tickspan
1119008
name GCName
G1New
startTime long: millis
2218861827
sumOfPauses Tickspan
1119008
Example event data values and properties
cause GCCause
G1 Humongous Allocation
gcId uint
1073
longestPause Tickspan
5134330
name GCName
G1New
startTime long: millis
454982192972
sumOfPauses Tickspan
5134330
Example event data values and properties
cause GCCause
Heap Inspection Initiated GC
gcId uint
356
longestPause Tickspan
292854774
name GCName
ParallelOld
startTime long: millis
471857862483
sumOfPauses Tickspan
292854774

SystemGC

default profiling startTime duration eventThread stackTrace 17 21 25 27 28

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

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 0 ms
profiling true true 0 ms

Event fields with their types and descriptions
Field Type Description
invokedConcurrent boolean Invoked Concurrent

Examples 3
Example event data values and properties
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.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
492365737487
Example event data values and properties
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.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
2749210483
Example event data values and properties
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.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
485458450203

ParallelOldGarbageCollection

default profiling startTime duration 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Collector

Appearing in: linux_ParallelGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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);

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
densePrefix ulong: address Dense Prefix The address of the dense prefix, used when compacting

Examples 2
Example event data values and properties
densePrefix ulong: address
30173822976
gcId uint
74
startTime long: millis
1984193736
Example event data values and properties
densePrefix ulong: address
30422859776
gcId uint
370
startTime long: millis
487068934850

YoungGarbageCollection

default profiling startTime duration 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Collector

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC

Missing in: graalvm_linux_native, 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();

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
tenuringThreshold uint Tenuring Threshold

Examples 3
Example event data values and properties
gcId uint
359
startTime long: millis
475922080802
tenuringThreshold uint
1
Example event data values and properties
gcId uint
1148
startTime long: millis
475769247646
tenuringThreshold uint
15
Example event data values and properties
gcId uint
181
startTime long: millis
3311341181
tenuringThreshold uint
1

OldGarbageCollection

default profiling startTime duration 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Collector

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC

Missing in: graalvm_linux_native, 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());

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier

Examples 3
Example event data values and properties
gcId uint
378
startTime long: millis
500187098969
Example event data values and properties
gcId uint
104
startTime long: millis
2327344681
Example event data values and properties
gcId uint
1121
startTime long: millis
467492852982

G1GarbageCollection

default profiling startTime duration 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Collector

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, 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:

                                additional_buffer_size,
                                non_humongous_allocation,
                                peak_extra_humongous_occupancy,
                                predicted_old_non_hum_alloc_rate,
                                predicted_peak_extra_humongous_occupancy,
                                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;

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
type G1YCType Type

Examples 3
Example event data values and properties
gcId uint
1094
startTime long: millis
460290745928
type G1YCType
Concurrent Start
Example event data values and properties
gcId uint
1263
startTime long: millis
500667947430
type G1YCType
Normal
Example event data values and properties
gcId uint
117
startTime long: millis
2497634271
type G1YCType
Concurrent Start

ZYoungGarbageCollection

default profiling startTime duration eventThread 21 25 27 28

Category: Java Virtual Machine / GC / Collector

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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);

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
tenuringThreshold uint Tenuring Threshold

Examples 2
Example event data values and properties
gcId uint
31
startTime long: millis
2459117315
tenuringThreshold uint
0
Example event data values and properties
gcId uint
286
startTime long: millis
678003275234
tenuringThreshold uint
0

ZOldGarbageCollection

default profiling startTime duration eventThread 21 25 27 28

Category: Java Virtual Machine / GC / Collector

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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) {

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier

Examples 2
Example event data values and properties
gcId uint
1
startTime long: millis
944906486
Example event data values and properties
gcId uint
259
startTime long: millis
627978611573

JVM: GC: Configuration

GCConfiguration

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Configuration

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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();
}

Event configuration settings across JFR profiles
Configuration enabled period
default true everyChunk
profiling true everyChunk

Event fields with their types and descriptions
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
Example event data values and properties
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
489354002365
usesDynamicGCThreads boolean
true
youngCollector GCName
G1New
Example event data values and properties
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
484895563870
usesDynamicGCThreads boolean
true
youngCollector GCName
ParallelScavenge
Example event data values and properties
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
15645408323
usesDynamicGCThreads boolean
true
youngCollector GCName
G1New

GCSurvivorConfiguration

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Configuration

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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());

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
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
Example event data values and properties
initialTenuringThreshold ubyte
7
maxTenuringThreshold ubyte
15
startTime long: millis
15645411058
Example event data values and properties
initialTenuringThreshold ubyte
7
maxTenuringThreshold ubyte
15
startTime long: millis
494787684021
Example event data values and properties
initialTenuringThreshold ubyte
7
maxTenuringThreshold ubyte
15
startTime long: millis
460013996003

GCTLABConfiguration

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Configuration

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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()));

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
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
Example event data values and properties
minTLABSize ulong: bytes
2048
startTime long: millis
23271498236
tlabRefillWasteLimit ulong: bytes
64
usesTLABs boolean
true
Example event data values and properties
minTLABSize ulong: bytes
2048
startTime long: millis
502094642135
tlabRefillWasteLimit ulong: bytes
64
usesTLABs boolean
true
Example event data values and properties
minTLABSize ulong: bytes
2048
startTime long: millis
487626807791
tlabRefillWasteLimit ulong: bytes
64
usesTLABs boolean
true

GCHeapConfiguration

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Configuration

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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) {

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
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
Example event data values and properties
compressedOopsMode NarrowOopMode
Zero based
heapAddressBits ubyte
32
initialSize ulong: bytes
262144000
maxSize ulong: bytes
4192206848
minSize ulong: bytes
8388608
objectAlignment ulong: bytes
8
startTime long: millis
471028230490
usesCompressedOops boolean
true
Example event data values and properties
compressedOopsMode NarrowOopMode
Zero based
heapAddressBits ubyte
32
initialSize ulong: bytes
262144000
maxSize ulong: bytes
4192206848
minSize ulong: bytes
8388608
objectAlignment ulong: bytes
8
startTime long: millis
375564080
usesCompressedOops boolean
true
Example event data values and properties
compressedOopsMode NarrowOopMode
Zero based
heapAddressBits ubyte
32
initialSize ulong: bytes
262144000
maxSize ulong: bytes
4192206848
minSize ulong: bytes
8388608
objectAlignment ulong: bytes
8
startTime long: millis
497004697505
usesCompressedOops boolean
true

YoungGenerationConfiguration

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Configuration

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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) {
  JfrRedactedEvents::emit_initial_system_properties();
}

TRACE_REQUEST_FUNC(ThreadAllocationStatistics) {

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
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
Example event data values and properties
maxSize ulong: bytes
2514485248
minSize ulong: bytes
1363144
newRatio uint
2
startTime long: millis
502094644860
Example event data values and properties
maxSize ulong: bytes
2514485248
minSize ulong: bytes
1363144
newRatio uint
2
startTime long: millis
375565483
Example event data values and properties
maxSize ulong: bytes
1396703232
minSize ulong: bytes
85983232
newRatio uint
2
startTime long: millis
490161501967

JVM: GC: Detailed

ZThreadDebug

internal startTime duration eventThread 18 21 25 27 28

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());
}

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
name string Name The name of the GC runner

G1MMU

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, 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();
  }
}

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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 3
Example event data values and properties
gcId uint
49
gcTime long: millis
6
pauseTarget long: millis
200
startTime long: millis
1777923990
timeSlice long: millis
201
Example event data values and properties
gcId uint
1222
gcTime long: millis
86
pauseTarget long: millis
200
startTime long: millis
488945232034
timeSlice long: millis
201
Example event data values and properties
gcId uint
1112
gcTime long: millis
11
pauseTarget long: millis
200
startTime long: millis
464826402317
timeSlice long: millis
201

EvacuationInformation

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, 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();

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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 3
Example event data values and properties
allocationRegions uint
3
allocationRegionsUsedAfter ulong: bytes
3497336
allocationRegionsUsedBefore ulong: bytes
0
bytesCopied ulong: bytes
3497336
cSetRegions uint
142
cSetUsedAfter ulong: bytes
0
cSetUsedBefore ulong: bytes
296084472
gcId uint
1194
regionsFreed uint
142
startTime long: millis
483187393489
Example event data values and properties
allocationRegions uint
1
allocationRegionsUsedAfter ulong: bytes
209200
allocationRegionsUsedBefore ulong: bytes
0
bytesCopied ulong: bytes
209200
cSetRegions uint
9
cSetUsedAfter ulong: bytes
0
cSetUsedBefore ulong: bytes
18874368
gcId uint
1155
regionsFreed uint
9
startTime long: millis
477762438713
Example event data values and properties
allocationRegions uint
2
allocationRegionsUsedAfter ulong: bytes
2101264
allocationRegionsUsedBefore ulong: bytes
0
bytesCopied ulong: bytes
2101264
cSetRegions uint
6
cSetUsedAfter ulong: bytes
0
cSetUsedBefore ulong: bytes
12152104
gcId uint
33
regionsFreed uint
6
startTime long: millis
1576659469

ObjectCountAfterGC

startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC

Missing in: graalvm_linux_native, 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

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling false

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
objectClass Class Object Class
count long Count
totalSize ulong: bytes Total Size

Examples 3
Example event data values and properties
count long
1141
gcId uint
31
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/HashMap
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.4.1
name string
java/util
startTime long: millis
1547566847
totalSize ulong: bytes
45640
Example event data values and properties
count long
3376
gcId uint
1075
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.4.1
name string
java/util/concurrent
startTime long: millis
455145886101
totalSize ulong: bytes
28593920
Example event data values and properties
count long
135106
gcId uint
339
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.4.1
name string
java/lang
startTime long: millis
449182893333
totalSize ulong: bytes
15748080

G1EvacuationYoungStatistics

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, 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();

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
statistics G1EvacuationStatistics struct Evacuation Statistics

Examples 3
Example event data values and properties
startTime long: millis
453046959955
statistics G1EvacuationStatistics
allocated ulong: bytes
462240
directAllocated ulong: bytes
73256
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
1065
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
1
undoWaste ulong: bytes
0
used ulong: bytes
370792
wasted ulong: bytes
696
Example event data values and properties
startTime long: millis
2000778228
statistics G1EvacuationStatistics
allocated ulong: bytes
1799568
directAllocated ulong: bytes
0
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
71
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
1
undoWaste ulong: bytes
0
used ulong: bytes
1503016
wasted ulong: bytes
20040
Example event data values and properties
startTime long: millis
494820751687
statistics G1EvacuationStatistics
allocated ulong: bytes
479360
directAllocated ulong: bytes
67632
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
1242
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
1
undoWaste ulong: bytes
0
used ulong: bytes
301248
wasted ulong: bytes
144

G1EvacuationOldStatistics

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, 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) {
  EventG1BasicIHOP evt;
  if (evt.should_commit()) {

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
statistics G1EvacuationStatistics struct Evacuation Statistics

Examples 3
Example event data values and properties
startTime long: millis
453046961057
statistics G1EvacuationStatistics
allocated ulong: bytes
0
directAllocated ulong: bytes
0
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
1065
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
0
undoWaste ulong: bytes
0
used ulong: bytes
0
wasted ulong: bytes
0
Example event data values and properties
startTime long: millis
1266342933
statistics G1EvacuationStatistics
allocated ulong: bytes
0
directAllocated ulong: bytes
0
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
21
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
1
undoWaste ulong: bytes
0
used ulong: bytes
0
wasted ulong: bytes
0
Example event data values and properties
startTime long: millis
487139857454
statistics G1EvacuationStatistics
allocated ulong: bytes
0
directAllocated ulong: bytes
0
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
1211
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
0
undoWaste ulong: bytes
0
used ulong: bytes
0
wasted ulong: bytes
0

G1BasicIHOP

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, 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:

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) {
  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.commit();
  }
}

void G1NewTracer::send_adaptive_ihop_statistics(size_t threshold,

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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

Examples 3
Example event data values and properties
currentOccupancy ulong: bytes
8897200
gcId uint
23
startTime long: millis
1405821714
targetOccupancy ulong: bytes
153092096
threshold ulong: bytes
68891443
thresholdPercentage float: percentage
0.45
Example event data values and properties
currentOccupancy ulong: bytes
458003600
gcId uint
1104
startTime long: millis
463183510127
targetOccupancy ulong: bytes
861929472
threshold ulong: bytes
208549810
thresholdPercentage float: percentage
0.24195693
Example event data values and properties
currentOccupancy ulong: bytes
279530968
gcId uint
1262
startTime long: millis
500149430441
targetOccupancy ulong: bytes
2218786816
threshold ulong: bytes
298487263
thresholdPercentage float: percentage
0.13452724

G1AdaptiveIHOP

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, 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:

void G1NewTracer::send_adaptive_ihop_statistics(size_t threshold,
                                                size_t internal_target_occupancy,
                                                size_t current_occupancy,
                                                size_t additional_buffer_size,
                                                size_t non_humongous_allocation,
                                                size_t peak_extra_humongous_occupancy,
                                                double predicted_old_non_hum_alloc_rate,
                                                size_t predicted_peak_extra_humongous_occupancy,
                                                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_nonHumongousAllocation(non_humongous_allocation);
    evt.set_peakExtraHumongousOccupancy(peak_extra_humongous_occupancy);
    evt.set_predictedNonHumongousAllocation(predicted_old_non_hum_alloc_rate);
    evt.set_predictedPeakExtraHumongousOccupancy(predicted_peak_extra_humongous_occupancy);

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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
nonHumongousAllocation ulong: bytes 27+ Current Non-Humongous Allocation Current non-humongous allocation accumulated by the concurrent cycle tracker
peakExtraHumongousOccupancy ulong: bytes 27+ Current Peak Extra Humongous Occupancy Current peak increase in humongous occupancy relative to the occupancy at concurrent cycle start
additionalBufferSize ulong: bytes Additional Buffer Additional buffer size
predictedNonHumongousAllocation double: bytes-per-second 27+ Predicted Non-Humongous Allocation Rate Predicted allocation rate of non-humongous objects into the old generation, in bytes per second
predictedPeakExtraHumongousOccupancy ulong: bytes 27+ Predicted Peak Extra Humongous Occupancy Predicted peak increase in humongous occupancy during a concurrent cycle relative to the occupancy at concurrent cycle start
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 3
Example event data values and properties
additionalBufferSize ulong: bytes
10485760
currentOccupancy ulong: bytes
9401656
gcId uint
71
ihopTargetOccupancy ulong: bytes
27892121
predictedMarkingDuration long: millis
100
predictionActive boolean
false
startTime long: millis
2000797264
threshold ulong: bytes
13212057
thresholdPercentage float: percentage
0.4736842
Example event data values and properties
additionalBufferSize ulong: bytes
434110464
currentOccupancy ulong: bytes
418824544
gcId uint
1078
ihopTargetOccupancy ulong: bytes
828794470
predictedMarkingDuration long: millis
1596
predictionActive boolean
true
startTime long: millis
456076699316
threshold ulong: bytes
141157266
thresholdPercentage float: percentage
0.17031637
Example event data values and properties
additionalBufferSize ulong: bytes
270532608
currentOccupancy ulong: bytes
642751440
gcId uint
1203
ihopTargetOccupancy ulong: bytes
878601830
predictedMarkingDuration long: millis
1990
predictionActive boolean
true
startTime long: millis
485217762303
threshold ulong: bytes
0
thresholdPercentage float: percentage
0.0

PromoteObjectInNewPLAB

profiling startTime eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC

Missing in: graalvm_linux_native, 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();
  }
}

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling true

Event fields with their types and descriptions
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
Example event data values and properties
gcId uint
350
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.4.1
name string
java/net
hidden boolean
false
modifiers int
1
name string
breeze/linalg/DenseVector$mcD$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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
breeze/linalg
objectSize ulong: bytes
32
plabSize ulong: bytes
32760
startTime long: millis
462444135010
tenured boolean
false
tenuringAge uint
0
Example event data values and properties
gcId uint
1070
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[D
package Package
null
objectSize ulong: bytes
528
plabSize ulong: bytes
6752
startTime long: millis
454094059411
tenured boolean
false
tenuringAge uint
0
Example event data values and properties
gcId uint
2
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1040
name string
[Ljava/util/HashMap$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.4.1
name string
java/util
objectSize ulong: bytes
80
plabSize ulong: bytes
8192
startTime long: millis
566748059
tenured boolean
true
tenuringAge uint
1

PromoteObjectOutsidePLAB

profiling startTime eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC

Missing in: graalvm_linux_native, 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 {

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling true

Event fields with their types and descriptions
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
Example event data values and properties
gcId uint
352
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[B
package Package
null
objectSize ulong: bytes
23616
startTime long: millis
465224025625
tenured boolean
false
tenuringAge uint
0
Example event data values and properties
gcId uint
1
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[B
package Package
null
objectSize ulong: bytes
4112
startTime long: millis
564232640
tenured boolean
false
tenuringAge uint
0
Example event data values and properties
gcId uint
1088
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[B
package Package
null
objectSize ulong: bytes
29384
startTime long: millis
458410590668
tenured boolean
false
tenuringAge uint
0

PromotionFailed

default profiling startTime 11 17 21 25 27 28

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;

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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 27 28

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();

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
evacuationFailed CopyFailed struct Evacuation Failed Data

ConcurrentModeFailure

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, 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());

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier

Examples 3
Example event data values and properties
gcId uint
1189
startTime long: millis
481777451045
Example event data values and properties
gcId uint
1383
startTime long: millis
18242822910
Example event data values and properties
gcId uint
1150
startTime long: millis
476054925239

GCCPUTime

default profiling startTime 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC

Missing in: graalvm_linux_native, 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;

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
userTime ulong: nanos User Time
systemTime ulong: nanos System Time
realTime ulong: nanos Real Time

Examples 3
Example event data values and properties
gcId uint
358
realTime ulong: nanos
209999999
startTime long: millis
475492765896
systemTime ulong: nanos
9999999
userTime ulong: nanos
649999999
Example event data values and properties
gcId uint
35
realTime ulong: nanos
20000000
startTime long: millis
1623539064
systemTime ulong: nanos
0
userTime ulong: nanos
10000000
Example event data values and properties
gcId uint
1076
realTime ulong: nanos
9999999
startTime long: millis
455223859516
systemTime ulong: nanos
0
userTime ulong: nanos
19999999

AllocationRequiringGC

startTime eventThread stackTrace 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC

Missing in: graalvm_linux_native, 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();
  }
}

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default false true
profiling false true

Event fields with their types and descriptions
Field Type Description
gcId uint Pending GC Identifier
size ulong: bytes Allocation Size

Examples 3
Example event data values and properties
gcId uint
1169
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.4.1
name string
java/lang/invoke
type FrameType
Inlined
truncated boolean
true
startTime long: millis
483220141886
Example event data values and properties
gcId uint
5
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.4.1
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.4.1
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
574702863
Example event data values and properties
gcId uint
362
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.4.1
name string
java/lang/invoke
type FrameType
Inlined
truncated boolean
true
startTime long: millis
477022943997

TenuringDistribution

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_SerialGC

Missing in: graalvm_linux_native, 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();
}

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
age uint Age
size ulong: bytes Size

Examples 3
Example event data values and properties
age uint
14
gcId uint
1065
size ulong: bytes
0
startTime long: millis
453046993938
Example event data values and properties
age uint
3
gcId uint
2
size ulong: bytes
0
startTime long: millis
567573131
Example event data values and properties
age uint
8
gcId uint
1361
size ulong: bytes
0
startTime long: millis
556216363552

G1HeapRegionTypeChange

startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, 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();
  }
}

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling false

Event fields with their types and descriptions
Field Type Description
index uint Index
from G1HeapRegionType From
to G1HeapRegionType To
start ulong: address Start
used ulong: bytes Used

Examples 3
Example event data values and properties
from G1HeapRegionType
Free
index uint
11
start ulong: address
30190600192
startTime long: millis
560551357
to G1HeapRegionType
Eden
used ulong: bytes
0
Example event data values and properties
from G1HeapRegionType
Eden
index uint
403
start ulong: address
31012683776
startTime long: millis
453256930503
to G1HeapRegionType
Free
used ulong: bytes
0
Example event data values and properties
from G1HeapRegionType
Free
index uint
372
start ulong: address
30945574912
startTime long: millis
475572546602
to G1HeapRegionType
Eden
used ulong: bytes
0

ObjectCount

startTime every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC

Missing in: graalvm_linux_native, 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

Event configuration settings across JFR profiles
Configuration enabled period
default false everyChunk
profiling false everyChunk

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
objectClass Class Object Class
count long Count
totalSize ulong: bytes Total Size

Examples 3
Example event data values and properties
count long
353530
gcId uint
341
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
8
name string
java/util/concurrent/ConcurrentHashMap$Node
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/util/concurrent
startTime long: millis
450754001835
totalSize ulong: bytes
8484720
Example event data values and properties
count long
27705
gcId uint
1075
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/LinkedHashMap
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/util
startTime long: millis
455145886101
totalSize ulong: bytes
1551480
Example event data values and properties
count long
2380
gcId uint
31
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[I
package Package
null
startTime long: millis
1547566847
totalSize ulong: bytes
163800

G1HeapRegionInformation

startTime duration every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, 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);

Event configuration settings across JFR profiles
Configuration enabled period
default false everyChunk
profiling false everyChunk

Event fields with their types and descriptions
Field Type Description
index uint Index
type G1HeapRegionType Type
start ulong: address Start
used ulong: bytes Used

Examples 3
Example event data values and properties
index uint
48
start ulong: address
30266097664
startTime long: millis
476970588390
type G1HeapRegionType
Old
used ulong: bytes
2097080
Example event data values and properties
index uint
271
start ulong: address
30735859712
startTime long: millis
453269697425
type G1HeapRegionType
Free
used ulong: bytes
0
Example event data values and properties
index uint
18
start ulong: address
30205280256
startTime long: millis
15519711360
type G1HeapRegionType
Free
used ulong: bytes
0

ZAllocationStall

default profiling startTime duration eventThread stackTrace 15 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

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();

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 17+ 0 ms
profiling true true 17+ 0 ms

Event fields with their types and descriptions
Field Type Description
type ZPageTypeType Type
size ulong: bytes Size

ZPageAllocation

default profiling startTime duration eventThread stackTrace 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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.

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 15+ 1 ms
profiling true true 15+ 1 ms

Event fields with their types and descriptions
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
Example event data values and properties
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.4.1
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.4.1
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
686074627
successful boolean
true
type ZPageTypeType
Small
Example event data values and properties
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
28
lineNumber int
319
method Method
descriptor string
(Ljava/io/InputStream;Z)[B
hidden boolean
false
modifiers int
10
name string
readStream
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.4.1
name string
java/net
hidden boolean
false
modifiers int
1
name string
org/apache/xbean/asm9/ClassReader
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/xbean/asm9
type FrameType
Interpreted
truncated boolean
false
startTime long: millis
619156167052
successful boolean
true
type ZPageTypeType
Small

ZRelocationSet

default profiling startTime duration eventThread 15 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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 {

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
total ulong: bytes Total
empty ulong: bytes Empty
relocate ulong: bytes 16+ Relocate

Examples 2
Example event data values and properties
empty ulong: bytes
0
relocate ulong: bytes
22627896
startTime long: millis
676251670040
total ulong: bytes
482344960
Example event data values and properties
empty ulong: bytes
245366784
relocate ulong: bytes
1042512
startTime long: millis
1558346305
total ulong: bytes
327155712

ZRelocationSetGroup

default profiling startTime duration eventThread 15 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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);
    }
  }

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
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
Example event data values and properties
candidatePages ulong
137
empty ulong: bytes
0
relocate ulong: bytes
2164416
selectedPages ulong
6
startTime long: millis
633484488570
total ulong: bytes
287309824
type ZPageTypeType
Small
Example event data values and properties
candidatePages ulong
0
empty ulong: bytes
0
relocate ulong: bytes
0
selectedPages ulong
0
startTime long: millis
1866473577
total ulong: bytes
0
type ZPageTypeType
Large

ZStatisticsCounter

experimental startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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);
  }
}

Event configuration settings across JFR profiles
Configuration enabled threshold
default false 0 ms
profiling false 0 ms

Event fields with their types and descriptions
Field Type Description
id ZStatisticsCounterType Id
increment ulong Increment
value ulong Value

Examples 2
Example event data values and properties
id ZStatisticsCounterType
Allocation Rate
increment ulong
2097152
startTime long: millis
619396061826
value ulong
56623104
Example event data values and properties
id ZStatisticsCounterType
Allocation Rate
increment ulong
2097152
startTime long: millis
889707714
value ulong
96468992

ZStatisticsSampler

experimental startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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) {

Event configuration settings across JFR profiles
Configuration enabled threshold
default false 0 ms
profiling false 0 ms

Event fields with their types and descriptions
Field Type Description
id ZStatisticsSamplerType Id
value ulong Value

Examples 2
Example event data values and properties
id ZStatisticsSamplerType
Concurrent Weak Roots OopStorageSet
startTime long: millis
488671887
value ulong
34330
Example event data values and properties
id ZStatisticsSamplerType
JNI Critical Stall
startTime long: millis
621099565225
value ulong
0

ZThreadPhase

experimental startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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)

Event configuration settings across JFR profiles
Configuration enabled threshold
default false 0 ms
profiling false 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
name string Name

Examples 2
Example event data values and properties
gcId uint
258
name string
Concurrent Roots ClassLoaderDataGraph
startTime long: millis
623965746085
Example event data values and properties
gcId uint
0
name string
Concurrent Weak Roots OopStorageSet
startTime long: millis
457843443

ZUncommit

default profiling startTime duration eventThread 15 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC

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

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
uncommitted ulong: bytes Uncommitted

Examples 1
Example event data values and properties
startTime long: millis
663183551656
uncommitted ulong: bytes
33554432

ShenandoahHeapRegionStateChange

startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: linux_ShenandoahGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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);
}

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling false

Event fields with their types and descriptions
Field Type Description
index uint Index
from ShenandoahHeapRegionState From
to ShenandoahHeapRegionState To
start ulong: address Start
used ulong: bytes Used

Examples 2
Example event data values and properties
from ShenandoahHeapRegionState
Empty Committed
index uint
3512
start ulong: address
33850130432
startTime long: millis
549811043126
to ShenandoahHeapRegionState
Empty Uncommitted
used ulong: bytes
0
Example event data values and properties
from ShenandoahHeapRegionState
Regular
index uint
6
start ulong: address
30173822976
startTime long: millis
379519402
to ShenandoahHeapRegionState
Collection Set
used ulong: bytes
1048576

ShenandoahHeapRegionInformation

startTime duration every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Appearing in: linux_ShenandoahGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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);

Event configuration settings across JFR profiles
Configuration enabled period
default false everyChunk
profiling false everyChunk

Event fields with their types and descriptions
Field Type Description
index uint Index
state ShenandoahHeapRegionState State
start ulong: address Start
used ulong: bytes Used

Examples 2
Example event data values and properties
index uint
77
start ulong: address
30248271872
startTime long: millis
388502956
state ShenandoahHeapRegionState
Empty Committed
used ulong: bytes
0
Example event data values and properties
index uint
1
start ulong: address
30168580096
startTime long: millis
551404912894
state ShenandoahHeapRegionState
Humongous Start
used ulong: bytes
1048576

ShenandoahEvacuationInformation

startTime 24 25 27 28

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) {

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling false

Event fields with their types and descriptions
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

startTime 27 28

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);

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling false

Event fields with their types and descriptions
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 28

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);

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
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 27 28

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);

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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
Example event data values and properties
gcId uint
354
heapSpace VirtualSpace
committedEnd ulong: address
33464254464
committedSize ulong: bytes
3296722944
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
4192206848
start ulong: address
30167531520
heapUsed ulong: bytes
262864872
startTime long: millis
466437657670
when GCWhen
After GC
Example event data values and properties
gcId uint
1077
heapSpace VirtualSpace
committedEnd ulong: address
31035752448
committedSize ulong: bytes
868220928
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
4192206848
start ulong: address
30167531520
heapUsed ulong: bytes
254565784
startTime long: millis
455223826332
when GCWhen
Before GC
Example event data values and properties
gcId uint
31
heapSpace VirtualSpace
committedEnd ulong: address
30234640384
committedSize ulong: bytes
67108864
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
4192206848
start ulong: address
30167531520
heapUsed ulong: bytes
19767680
startTime long: millis
1536810287
when GCWhen
Before GC

MetaspaceSummary

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Heap

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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();
  }
}

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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
Example event data values and properties
classSpace MetaspaceSizes
committed ulong: bytes
179306496
reserved ulong: bytes
1073741824
used ulong: bytes
177678880
dataSpace MetaspaceSizes
committed ulong: bytes
778829824
reserved ulong: bytes
805306368
used ulong: bytes
776959056
gcId uint
364
gcThreshold ulong: bytes
1596915712
metaspace MetaspaceSizes
committed ulong: bytes
958136320
reserved ulong: bytes
1879048192
used ulong: bytes
954637936
startTime long: millis
477733475950
when GCWhen
Before GC
Example event data values and properties
classSpace MetaspaceSizes
committed ulong: bytes
179175424
reserved ulong: bytes
1073741824
used ulong: bytes
177477752
dataSpace MetaspaceSizes
committed ulong: bytes
778633216
reserved ulong: bytes
805306368
used ulong: bytes
776803744
gcId uint
1112
gcThreshold ulong: bytes
1596391424
metaspace MetaspaceSizes
committed ulong: bytes
957808640
reserved ulong: bytes
1879048192
used ulong: bytes
954281496
startTime long: millis
464826448253
when GCWhen
After GC
Example event data values and properties
classSpace MetaspaceSizes
committed ulong: bytes
3014656
reserved ulong: bytes
1073741824
used ulong: bytes
2849440
dataSpace MetaspaceSizes
committed ulong: bytes
11927552
reserved ulong: bytes
67108864
used ulong: bytes
11825168
gcId uint
27
gcThreshold ulong: bytes
24707072
metaspace MetaspaceSizes
committed ulong: bytes
14942208
reserved ulong: bytes
1140850688
used ulong: bytes
14674608
startTime long: millis
1495990274
when GCWhen
After GC

PSHeapSummary

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Heap

Appearing in: linux_ParallelGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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();

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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
Example event data values and properties
edenSpace ObjectSpace
end ulong: address
34187771904
size ulong: bytes
1224736768
start ulong: address
32963035136
used ulong: bytes
592313328
fromSpace ObjectSpace
end ulong: address
34357641216
size ulong: bytes
79691776
start ulong: address
34277949440
used ulong: bytes
0
gcId uint
348
oldObjectSpace ObjectSpace
end ulong: address
32398901248
size ulong: bytes
2231369728
start ulong: address
30167531520
used ulong: bytes
254571992
oldSpace VirtualSpace
committedEnd ulong: address
32398901248
committedSize ulong: bytes
2231369728
reservedEnd ulong: address
32963035136
reservedSize ulong: bytes
2795503616
start ulong: address
30167531520
startTime long: millis
457786540354
toSpace ObjectSpace
end ulong: address
34273755136
size ulong: bytes
85983232
start ulong: address
34187771904
used ulong: bytes
0
when GCWhen
Before GC
youngSpace VirtualSpace
committedEnd ulong: address
34359738368
committedSize ulong: bytes
1396703232
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
1396703232
start ulong: address
32963035136
Example event data values and properties
edenSpace ObjectSpace
end ulong: address
33478934528
size ulong: bytes
515899392
start ulong: address
32963035136
used ulong: bytes
12582424
fromSpace ObjectSpace
end ulong: address
33491517440
size ulong: bytes
6291456
start ulong: address
33485225984
used ulong: bytes
0
gcId uint
94
oldObjectSpace ObjectSpace
end ulong: address
30343692288
size ulong: bytes
176160768
start ulong: address
30167531520
used ulong: bytes
6550400
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
2255419376
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

G1HeapSummary

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Heap

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, 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();
    }
  }

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
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 3
Example event data values and properties
edenTotalSize ulong: bytes
6291456
edenUsedSize ulong: bytes
4194304
gcId uint
45
numberOfRegions uint
14
oldGenUsedSize ulong: bytes
8751408
startTime long: millis
1722174919
survivorUsedSize ulong: bytes
2097152
when GCWhen
Before GC
Example event data values and properties
edenTotalSize ulong: bytes
511705088
edenUsedSize ulong: bytes
6291456
gcId uint
1102
numberOfRegions uint
410
oldGenUsedSize ulong: bytes
253782944
startTime long: millis
462380876220
survivorUsedSize ulong: bytes
0
when GCWhen
Before GC
Example event data values and properties
edenTotalSize ulong: bytes
549378016
edenUsedSize ulong: bytes
0
gcId uint
1190
numberOfRegions uint
437
oldGenUsedSize ulong: bytes
273415040
startTime long: millis
481568904465
survivorUsedSize ulong: bytes
75808
when GCWhen
Before GC

JVM: GC: Metaspace

MetaspaceGCThreshold

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Metaspace

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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);
}

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
oldValue ulong: bytes Old Value
newValue ulong: bytes New Value
updater GCThresholdUpdater Updater

Examples 3
Example event data values and properties
newValue ulong: bytes
25362432
oldValue ulong: bytes
25034752
startTime long: millis
8995617210
updater GCThresholdUpdater
compute_new_size
Example event data values and properties
newValue ulong: bytes
1595408384
oldValue ulong: bytes
1594621952
startTime long: millis
456898881564
updater GCThresholdUpdater
compute_new_size
Example event data values and properties
newValue ulong: bytes
1603338240
oldValue ulong: bytes
1596915712
startTime long: millis
481703724433
updater GCThresholdUpdater
compute_new_size

MetaspaceAllocationFailure

default profiling startTime stackTrace 11 17 21 25 27 28

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:

  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,

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default true true
profiling true true

Event fields with their types and descriptions
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

MetaspaceOOM

default profiling startTime stackTrace 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Metaspace

Code Context

The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:

src/hotspot/share/memory/metaspaceTracer.cpp:

void MetaspaceTracer::report_metaspace_allocation_failure(ClassLoaderData *cld,
                                                          size_t word_size,
                                                          MetaspaceObj::Type objtype,
                                                          Metaspace::MetadataType mdtype) const {
  send_allocation_failure_event<EventMetaspaceAllocationFailure>(cld, word_size, objtype, mdtype);
}

void MetaspaceTracer::report_metadata_oom(ClassLoaderData *cld,
                                         size_t word_size,
                                         MetaspaceObj::Type objtype,
                                         Metaspace::MetadataType mdtype) const {
  send_allocation_failure_event<EventMetaspaceOOM>(cld, word_size, objtype, mdtype);
}

template <typename E>
void MetaspaceTracer::send_allocation_failure_event(ClassLoaderData *cld,
                                                    size_t word_size,
                                                    MetaspaceObj::Type objtype,
                                                    Metaspace::MetadataType mdtype) const {
  E event;
  if (event.should_commit()) {
    event.set_classLoader(cld);
    event.set_hiddenClassLoader(cld->has_class_mirror_holder());

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default true true
profiling true true

Event fields with their types and descriptions
Field Type Description
classLoader ClassLoader Class Loader
hiddenClassLoader boolean 15+ Hidden Class Loader
size ulong: bytes Size
metadataType MetadataType Metadata Type
metaspaceObjectType MetaspaceObjectType Metaspace Object Type

MetaspaceChunkFreeListSummary

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Metaspace

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Code Context

The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:

src/hotspot/share/gc/shared/gcTraceSend.cpp:

void GCTracer::send_reference_stats_event(ReferenceType type, size_t count) const {
  EventGCReferenceStatistics e;
  if (e.should_commit()) {
      e.set_gcId(GCId::current());
      e.set_type((u1)type);
      e.set_count(count);
      e.commit();
  }
}

void GCTracer::send_metaspace_chunk_free_list_summary(GCWhen::Type when, Metaspace::MetadataType mdtype,
                                                      const MetaspaceChunkFreeListSummary& summary) const {
  EventMetaspaceChunkFreeListSummary e;
  if (e.should_commit()) {
    e.set_gcId(GCId::current());
    e.set_when(when);
    e.set_metadataType(mdtype);

    e.set_specializedChunks(summary.num_specialized_chunks());
    e.set_specializedChunksTotalSize(summary.specialized_chunks_size_in_bytes());

    e.set_smallChunks(summary.num_small_chunks());
    e.set_smallChunksTotalSize(summary.small_chunks_size_in_bytes());

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
when GCWhen When
metadataType MetadataType Metadata Type
specializedChunks ulong Specialized Chunks
specializedChunksTotalSize ulong: bytes Specialized Chunks Total Size
smallChunks ulong Small Chunks
smallChunksTotalSize ulong: bytes Small Chunks Total Size
mediumChunks ulong Medium Chunks
mediumChunksTotalSize ulong: bytes Medium Chunks Total Size
humongousChunks ulong Humongous Chunks
humongousChunksTotalSize ulong: bytes Humongous Chunks Total Size

Examples 3
Example event data values and properties
gcId uint
354
humongousChunks ulong
0
humongousChunksTotalSize ulong: bytes
0
mediumChunks ulong
0
mediumChunksTotalSize ulong: bytes
0
metadataType MetadataType
Class
smallChunks ulong
0
smallChunksTotalSize ulong: bytes
0
specializedChunks ulong
0
specializedChunksTotalSize ulong: bytes
0
startTime long: millis
466437660004
when GCWhen
After GC
Example event data values and properties
gcId uint
15
humongousChunks ulong
0
humongousChunksTotalSize ulong: bytes
0
mediumChunks ulong
0
mediumChunksTotalSize ulong: bytes
0
metadataType MetadataType
Class
smallChunks ulong
0
smallChunksTotalSize ulong: bytes
0
specializedChunks ulong
0
specializedChunksTotalSize ulong: bytes
0
startTime long: millis
873292049
when GCWhen
After GC
Example event data values and properties
gcId uint
1072
humongousChunks ulong
0
humongousChunksTotalSize ulong: bytes
0
mediumChunks ulong
0
mediumChunksTotalSize ulong: bytes
0
metadataType MetadataType
Metadata
smallChunks ulong
0
smallChunksTotalSize ulong: bytes
0
specializedChunks ulong
0
specializedChunksTotalSize ulong: bytes
0
startTime long: millis
454878104686
when GCWhen
After GC

JVM: GC: Phases

GCPhasePause

default profiling startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Phases

Code Context

The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:

src/hotspot/share/gc/shared/gcTraceSend.cpp:

    e.set_gcThreshold(meta_space_summary.capacity_until_GC());
    e.set_metaspace(to_struct(meta_space_summary.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();
  }
}

class PhaseSender : public PhaseVisitor {
  void visit_pause(GCPhase* phase) {
    assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");

    switch (phase->level()) {
      case 0: send_phase<EventGCPhasePause>(phase); break;
      case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
      case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
      case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
      case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
      default: /* Ignore sending this phase */ break;
    }
  }

  void visit_concurrent(GCPhase* phase) {
    assert(phase->level() < 3, "There are only three levels for ConcurrentPhase");

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
Example event data values and properties
gcId uint
7
name string
GC Pause
startTime long: millis
623716299
Example event data values and properties
gcId uint
1121
name string
Pause Remark
startTime long: millis
467906920261
Example event data values and properties
gcId uint
361
name string
GC Pause
startTime long: millis
476676237828

GCPhasePauseLevel1

default profiling startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Phases

Appearing in: graalvm_linux_G1GC, graalvm_linux_native, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC

Missing in: linux_ZGC

Code Context

The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:

src/hotspot/share/gc/shared/gcTraceSend.cpp:

    e.set_metaspace(to_struct(meta_space_summary.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();
  }
}

class PhaseSender : public PhaseVisitor {
  void visit_pause(GCPhase* phase) {
    assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");

    switch (phase->level()) {
      case 0: send_phase<EventGCPhasePause>(phase); break;
      case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
      case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
      case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
      case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
      default: /* Ignore sending this phase */ break;
    }
  }

  void visit_concurrent(GCPhase* phase) {
    assert(phase->level() < 3, "There are only three levels for ConcurrentPhase");

    switch (phase->level()) {

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
Example event data values and properties
gcId uint
1086
name string
Notify PhantomReferences
startTime long: millis
457372860014
Example event data values and properties
gcId uint
345
name string
Forward
startTime long: millis
455424655709
Example event data values and properties
gcId uint
23
name string
Notify Soft/WeakReferences
startTime long: millis
1405520068

GCPhasePauseLevel2

default profiling startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Phases

Appearing in: graalvm_linux_G1GC, graalvm_linux_native, linux_G1GC, linux_ParallelGC, linux_SerialGC

Missing in: linux_ShenandoahGC, linux_ZGC

Code Context

The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:

src/hotspot/share/gc/shared/gcTraceSend.cpp:

    e.set_dataSpace(to_struct(meta_space_summary.stats().non_class_space_stats())); // "dataspace" aka non-class space
    e.set_classSpace(to_struct(meta_space_summary.stats().class_space_stats()));
    e.commit();
  }
}

class PhaseSender : public PhaseVisitor {
  void visit_pause(GCPhase* phase) {
    assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");

    switch (phase->level()) {
      case 0: send_phase<EventGCPhasePause>(phase); break;
      case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
      case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
      case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
      case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
      default: /* Ignore sending this phase */ break;
    }
  }

  void visit_concurrent(GCPhase* phase) {
    assert(phase->level() < 3, "There are only three levels for ConcurrentPhase");

    switch (phase->level()) {
      case 0: send_phase<EventGCPhaseConcurrent>(phase); break;

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
Example event data values and properties
gcId uint
34
name string
Phase 2: Determine work lists
startTime long: millis
1597382364
Example event data values and properties
gcId uint
342
name string
Flush Marking Stats
startTime long: millis
451511185987
Example event data values and properties
gcId uint
1085
name string
Phase 1: Flush Mark Stats Cache
startTime long: millis
457233234037

GCPhasePauseLevel3

startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Phases

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC

Missing in: graalvm_linux_native, linux_ShenandoahGC, linux_ZGC

Code Context

The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:

src/hotspot/share/gc/shared/gcTraceSend.cpp:

    e.set_classSpace(to_struct(meta_space_summary.stats().class_space_stats()));
    e.commit();
  }
}

class PhaseSender : public PhaseVisitor {
  void visit_pause(GCPhase* phase) {
    assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");

    switch (phase->level()) {
      case 0: send_phase<EventGCPhasePause>(phase); break;
      case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
      case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
      case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
      case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
      default: /* Ignore sending this phase */ break;
    }
  }

  void visit_concurrent(GCPhase* phase) {
    assert(phase->level() < 3, "There are only three levels for ConcurrentPhase");

    switch (phase->level()) {
      case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
      case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;

Event configuration settings across JFR profiles
Configuration enabled threshold
default false 0 ms
profiling false 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
Example event data values and properties
gcId uint
40
name string
Purge Unlinked NMethods
startTime long: millis
1665586338
Example event data values and properties
gcId uint
338
name string
Notify Soft/WeakReferences
startTime long: millis
447820244638
Example event data values and properties
gcId uint
1108
name string
Free Code Blobs
startTime long: millis
463718959910

GCPhasePauseLevel4

startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Phases

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC

Missing in: graalvm_linux_native, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Code Context

The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:

src/hotspot/share/gc/shared/gcTraceSend.cpp:

    e.commit();
  }
}

class PhaseSender : public PhaseVisitor {
  void visit_pause(GCPhase* phase) {
    assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");

    switch (phase->level()) {
      case 0: send_phase<EventGCPhasePause>(phase); break;
      case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
      case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
      case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
      case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
      default: /* Ignore sending this phase */ break;
    }
  }

  void visit_concurrent(GCPhase* phase) {
    assert(phase->level() < 3, "There are only three levels for ConcurrentPhase");

    switch (phase->level()) {
      case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
      case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
      case 2: send_phase<EventGCPhaseConcurrentLevel2>(phase); break;

Event configuration settings across JFR profiles
Configuration enabled threshold
default false 0 ms
profiling false 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
Example event data values and properties
gcId uint
365
name string
Balance queues
startTime long: millis
478382307416
Example event data values and properties
gcId uint
1244
name string
Balance queues
startTime long: millis
494913338274
Example event data values and properties
gcId uint
1116
name string
Balance queues
startTime long: millis
466194415711

GCPhaseConcurrent

default profiling startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Phases

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native, linux_ParallelGC, linux_SerialGC

Code Context

The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:

src/hotspot/share/gc/shenandoah/shenandoahUtils.hpp:

class ShenandoahWorkerSession : public StackObj {
protected:
  ShenandoahWorkerSession(uint worker_id);
public:
  static inline uint worker_id() {
    return WorkerThread::worker_id();
  }
};

class ShenandoahConcurrentWorkerSession : public ShenandoahWorkerSession {
private:
  EventGCPhaseConcurrent _event;

public:
  ShenandoahConcurrentWorkerSession(uint worker_id) : ShenandoahWorkerSession(worker_id) { }
  ~ShenandoahConcurrentWorkerSession();
};

class ShenandoahParallelWorkerSession : public ShenandoahWorkerSession {
private:
  EventGCPhaseParallel _event;

public:

src/hotspot/share/gc/shared/gcTraceSend.cpp:

      case 0: send_phase<EventGCPhasePause>(phase); break;
      case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
      case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
      case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
      case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
      default: /* Ignore sending this phase */ break;
    }
  }

  void visit_concurrent(GCPhase* phase) {
    assert(phase->level() < 3, "There are only three levels for ConcurrentPhase");

    switch (phase->level()) {
      case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
      case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
      case 2: send_phase<EventGCPhaseConcurrentLevel2>(phase); break;
      default: /* Ignore sending this phase */ break;
    }
  }

 public:
  template<typename T>
  void send_phase(GCPhase* phase) {
    T event(UNTIMED);
    if (event.should_commit()) {

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
Example event data values and properties
gcId uint
1103
name string
Concurrent Scan Root Regions
startTime long: millis
462385720751
Example event data values and properties
gcId uint
291
name string
Concurrent Scan Root Regions
startTime long: millis
4553540973
Example event data values and properties
gcId uint
278
name string
Concurrent cleanup (unload classes)
startTime long: millis
551401057120

GCPhaseConcurrentLevel1

default profiling startTime duration eventThread 15 17 21 25 27 28

Category: Java Virtual Machine / GC / Phases

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native, linux_ParallelGC, linux_SerialGC

Code Context

The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:

src/hotspot/share/gc/shared/gcTraceSend.cpp:

      case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
      case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
      case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
      case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
      default: /* Ignore sending this phase */ break;
    }
  }

  void visit_concurrent(GCPhase* phase) {
    assert(phase->level() < 3, "There are only three levels for ConcurrentPhase");

    switch (phase->level()) {
      case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
      case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
      case 2: send_phase<EventGCPhaseConcurrentLevel2>(phase); break;
      default: /* Ignore sending this phase */ break;
    }
  }

 public:
  template<typename T>
  void send_phase(GCPhase* phase) {
    T event(UNTIMED);
    if (event.should_commit()) {
      event.set_gcId(GCId::current());

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
Example event data values and properties
gcId uint
312
name string
ClassLoaderData
startTime long: millis
604513996987
Example event data values and properties
gcId uint
29
name string
Preclean PhantomReferences
startTime long: millis
1520161015
Example event data values and properties
gcId uint
1113
name string
Preclean FinalReferences
startTime long: millis
465258925036

GCPhaseConcurrentLevel2

default profiling startTime duration eventThread 21 25 27 28

Category: Java Virtual Machine / GC / Phases

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, 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/shared/gcTraceSend.cpp:

      case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
      case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
      case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
      default: /* Ignore sending this phase */ break;
    }
  }

  void visit_concurrent(GCPhase* phase) {
    assert(phase->level() < 3, "There are only three levels for ConcurrentPhase");

    switch (phase->level()) {
      case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
      case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
      case 2: send_phase<EventGCPhaseConcurrentLevel2>(phase); break;
      default: /* Ignore sending this phase */ break;
    }
  }

 public:
  template<typename T>
  void send_phase(GCPhase* phase) {
    T event(UNTIMED);
    if (event.should_commit()) {
      event.set_gcId(GCId::current());
      event.set_name(phase->name());

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
name string Name

Examples 2
Example event data values and properties
gcId uint
286
name string
ClassLoaderData
startTime long: millis
679354684707
Example event data values and properties
gcId uint
47
name string
Trigger cleanups
startTime long: millis
2930336266

GCPhaseParallel

default profiling startTime duration eventThread 12 17 21 25 27 28

Category: Java Virtual Machine / GC / Phases

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ShenandoahGC

Missing in: graalvm_linux_native, linux_ParallelGC, linux_SerialGC, linux_ZGC

GC phases for parallel workers

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/g1YoungCollector.cpp:

  G1CollectedHeap*              _g1h;
  G1ParScanThreadState*         _par_scan_state;
  G1ScannerTasksQueueSet*       _queues;
  TaskTerminator*               _terminator;
  G1GCPhaseTimes::GCParPhases   _phase;

  G1ParScanThreadState*   par_scan_state() { return _par_scan_state; }
  G1ScannerTasksQueueSet* queues()         { return _queues; }
  TaskTerminator*         terminator()     { return _terminator; }

  inline bool offer_termination() {
    EventGCPhaseParallel event;
    G1ParScanThreadState* const pss = par_scan_state();
    start_term_time();
    const bool res = (terminator() == nullptr) ? true : terminator()->offer_termination();
    end_term_time();
    event.commit(GCId::current(), pss->worker_id(), G1GCPhaseTimes::phase_name(G1GCPhaseTimes::Termination));
    return res;
  }

public:
  G1ParEvacuateFollowersClosure(G1CollectedHeap* g1h,
                                G1ParScanThreadState* par_scan_state,
                                G1ScannerTasksQueueSet* queues,
                                TaskTerminator* terminator,
                                G1GCPhaseTimes::GCParPhases phase)
    : _start_term(0.0), _term_time(0.0), _term_attempts(0),
      _g1h(g1h), _par_scan_state(par_scan_state),
      _queues(queues), _terminator(terminator), _phase(phase) {}

  void do_void() {
    EventGCPhaseParallel event;
    G1ParScanThreadState* const pss = par_scan_state();
    pss->trim_queue();
    event.commit(GCId::current(), pss->worker_id(), G1GCPhaseTimes::phase_name(_phase));
    do {
      EventGCPhaseParallel event;
      pss->steal_and_trim_queue(queues());
      event.commit(GCId::current(), pss->worker_id(), G1GCPhaseTimes::phase_name(_phase));
    } while (!offer_termination());
  }

  double term_time() const { return _term_time; }
  size_t term_attempts() const { return _term_attempts; }
};

class G1EvacuateRegionsBaseTask : public WorkerTask {

src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.hpp:

  void print_cycle_on(outputStream* out) const;
  void print_global_on(outputStream* out) const;
};

class ShenandoahWorkerTimingsTracker : public StackObj {
private:
  ShenandoahPhaseTimings*          const _timings;
  ShenandoahPhaseTimings::Phase    const _phase;
  ShenandoahPhaseTimings::WorkerPhase const _worker_phase;
  uint const _worker_id;

  double _start_time;
  EventGCPhaseParallel _event;
public:
  ShenandoahWorkerTimingsTracker(ShenandoahPhaseTimings::Phase phase,
                                 ShenandoahPhaseTimings::WorkerPhase worker_phase,
                                 uint worker_id,
                                 bool cumulative = false);
  ~ShenandoahWorkerTimingsTracker();
};

#endif // SHARE_GC_SHENANDOAH_SHENANDOAHPHASETIMINGS_HPP

src/hotspot/share/gc/shenandoah/shenandoahUtils.hpp:

class ShenandoahConcurrentWorkerSession : public ShenandoahWorkerSession {
private:
  EventGCPhaseConcurrent _event;

public:
  ShenandoahConcurrentWorkerSession(uint worker_id) : ShenandoahWorkerSession(worker_id) { }
  ~ShenandoahConcurrentWorkerSession();
};

class ShenandoahParallelWorkerSession : public ShenandoahWorkerSession {
private:
  EventGCPhaseParallel _event;

public:
  ShenandoahParallelWorkerSession(uint worker_id) : ShenandoahWorkerSession(worker_id) { }
  ~ShenandoahParallelWorkerSession();
};

// Regions cannot be uncommitted when concurrent reset is zeroing out the bitmaps.
// This CADR class enforces this by forbidding region uncommits while it is in scope.
class ShenandoahNoUncommitMark : public StackObj {
  ShenandoahHeap* const _heap;
public:

src/hotspot/share/gc/g1/g1GCParPhaseTimesTracker.hpp:

#ifndef SHARE_GC_G1_G1GCPARPHASETIMESTRACKER_HPP
#define SHARE_GC_G1_G1GCPARPHASETIMESTRACKER_HPP

#include "gc/g1/g1GCPhaseTimes.hpp"
#include "jfr/jfrEvents.hpp"
#include "utilities/ticks.hpp"

class G1GCParPhaseTimesTracker : public CHeapObj<mtGC> {
protected:
  Ticks _start_time;
  G1GCPhaseTimes::GCParPhases _phase;
  G1GCPhaseTimes* _phase_times;
  uint _worker_id;
  EventGCPhaseParallel _event;
  bool _allow_multiple_record;

public:
  G1GCParPhaseTimesTracker(G1GCPhaseTimes* phase_times, G1GCPhaseTimes::GCParPhases phase, uint worker_id, bool allow_multiple_record = false);
  virtual ~G1GCParPhaseTimesTracker();
};

class G1EvacPhaseTimesTracker : public G1GCParPhaseTimesTracker {
  Tickspan _total_time;
  Tickspan _trim_time;

src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.cpp:

  void account_evacuated_region(G1HeapRegion* r) {
    size_t used = r->used();
    assert(used > 0, "region %u %s zero used", r->hrm_index(), r->get_short_type_str());
    _before_used_bytes += used;
    _regions_freed += 1;
  }
};

// Closure applied to all regions in the collection set.
class FreeCSetClosure : public G1HeapRegionClosure {
  // Helper to send JFR events for regions.
  class JFREventForRegion {
    EventGCPhaseParallel _event;

  public:
    JFREventForRegion(G1HeapRegion* region, uint worker_id) : _event() {
      _event.set_gcId(GCId::current());
      _event.set_gcWorkerId(worker_id);
      if (region->is_young()) {
        _event.set_name(G1GCPhaseTimes::phase_name(G1GCPhaseTimes::YoungFreeCSet));
      } else {
        _event.set_name(G1GCPhaseTimes::phase_name(G1GCPhaseTimes::NonYoungFreeCSet));
      }
    }

src/hotspot/share/gc/g1/g1RemSet.cpp:

  size_t cards_scanned_empty() const { return _cards_empty; }
  size_t cards_scanned() const { return _cards_scanned; }
  size_t blocks_scanned() const { return _blocks_scanned; }
  size_t chunks_claimed() const { return _chunks_claimed; }
  size_t heap_roots_found() const { return _heap_roots_found; }
};

void G1RemSet::scan_heap_roots(G1ParScanThreadState* pss,
                               uint worker_id,
                               G1GCPhaseTimes::GCParPhases scan_phase,
                               G1GCPhaseTimes::GCParPhases objcopy_phase,
                               bool remember_already_scanned_cards) {
  EventGCPhaseParallel event;
  G1ScanHRForRegionClosure cl(_scan_state, pss, worker_id, scan_phase, remember_already_scanned_cards);
  _scan_state->iterate_dirty_regions_from(&cl, worker_id);

  event.commit(GCId::current(), worker_id, G1GCPhaseTimes::phase_name(scan_phase));

  G1GCPhaseTimes* p = _g1p->phase_times();

  p->record_or_add_time_secs(objcopy_phase, worker_id, cl.rem_set_trim_partially_time().seconds());

  p->record_or_add_time_secs(scan_phase, worker_id, cl.rem_set_root_scan_time().seconds());

src/hotspot/share/gc/g1/g1RemSet.cpp:

    r->code_roots_do(&cl);
    _code_roots_scanned += cl.count();
    return false;
  }

  size_t code_roots_scanned() const { return _code_roots_scanned; }
};

void G1RemSet::scan_collection_set_code_roots(G1ParScanThreadState* pss,
                                              uint worker_id,
                                              G1GCPhaseTimes::GCParPhases coderoots_phase,
                                              G1GCPhaseTimes::GCParPhases objcopy_phase) {
  EventGCPhaseParallel event;
  Tickspan code_root_scan_time;
  Tickspan code_root_trim_partially_time;

  G1GCPhaseTimes* p = _g1h->phase_times();
  {
    G1EvacPhaseWithTrimTimeTracker timer(pss, code_root_scan_time, code_root_trim_partially_time);

    G1ScanCodeRootsClosure cl(_scan_state, pss, worker_id);
    // Code roots work distribution occurs inside the iteration method. So scan all collection
    // set regions for all threads.

src/hotspot/share/gc/g1/g1RemSet.cpp:

  size_t opt_roots_scanned() const { return _opt_roots_scanned; }
  size_t opt_refs_scanned() const { return _opt_refs_scanned; }
  size_t opt_refs_memory_used() const { return _opt_refs_memory_used; }
};

void G1RemSet::scan_collection_set_optional_roots(G1ParScanThreadState* pss,
                                                  uint worker_id,
                                                  G1GCPhaseTimes::GCParPhases scan_phase,
                                                  G1GCPhaseTimes::GCParPhases objcopy_phase) {
  assert(scan_phase == G1GCPhaseTimes::OptScanHR, "must be");

  EventGCPhaseParallel event;

  Tickspan rem_set_opt_root_scan_time;
  Tickspan rem_set_opt_trim_partially_time;
  G1EvacPhaseWithTrimTimeTracker timer(pss, rem_set_opt_root_scan_time, rem_set_opt_trim_partially_time);

  G1GCPhaseTimes* p = _g1h->phase_times();

  G1ScanOptionalRemSetRootsClosure cl(pss, worker_id, scan_phase);
  // The individual references for the optional remembered set are per-worker, so every worker
  // always need to scan all regions (no claimer).

src/hotspot/share/gc/g1/g1HeapRegionManager.cpp:

      _worker_freelists[worker].~G1FreeRegionList();
    }
    FREE_C_HEAP_ARRAY(_worker_freelists);
  }

  G1FreeRegionList* worker_freelist(uint worker) {
    return &_worker_freelists[worker];
  }

  // Each worker creates a free list for a chunk of the heap. The chunks won't
  // be overlapping so we don't need to do any claiming.
  void work(uint worker_id) {
    Ticks start_time = Ticks::now();
    EventGCPhaseParallel event;

    uint start = worker_id * _worker_chunk_size;
    uint end = MIN2(start + _worker_chunk_size, _hrm->max_num_regions());

    // If start is outside the heap, this worker has nothing to do.
    if (start > end) {
      return;
    }

    G1FreeRegionList* free_list = worker_freelist(worker_id);
    for (uint i = start; i < end; i++) {

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
gcWorkerId uint GC Worker Identifier
name string Name

Examples 3
Example event data values and properties
gcId uint
287
gcWorkerId uint
0
name string
Finish Mark
startTime long: millis
565645766754
Example event data values and properties
gcId uint
1
gcWorkerId uint
3
name string
ScanHR
startTime long: millis
564434626
Example event data values and properties
gcId uint
1065
gcWorkerId uint
0
name string
YoungFreeCSet
startTime long: millis
453046830855

JVM: GC: Reference

GCReferenceStatistics

default profiling startTime 11 17 21 25 27 28

Category: Java Virtual Machine / GC / Reference

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Total count of processed references during 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/shared/gcTraceSend.cpp:

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;
  if (e.should_commit()) {
      e.set_gcId(GCId::current());
      e.set_type((u1)type);
      e.set_count(count);
      e.commit();
  }
}

void GCTracer::send_metaspace_chunk_free_list_summary(GCWhen::Type when, Metaspace::MetadataType mdtype,
                                                      const MetaspaceChunkFreeListSummary& summary) const {
  EventMetaspaceChunkFreeListSummary e;

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
type ReferenceType Type
count ulong Total Count

Examples 3
Example event data values and properties
count ulong
54525
gcId uint
357
startTime long: millis
473621529512
type ReferenceType
Weak reference
Example event data values and properties
count ulong
0
gcId uint
2
startTime long: millis
567389316
type ReferenceType
Soft reference
Example event data values and properties
count ulong
0
gcId uint
1090
startTime long: millis
458783916454
type ReferenceType
Final reference

JVM: Heap

GCHeapMemoryUsage

default profiling startTime every chunk 21 25 27 28

Category: Java Virtual Machine / Heap

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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(JavaThreadStatistics) {
  EventJavaThreadStatistics event;
  event.set_activeCount(ThreadService::get_live_thread_count());
  event.set_daemonCount(ThreadService::get_daemon_thread_count());
  event.set_accumulatedCount(ThreadService::get_total_thread_count());
  event.set_peakCount(ThreadService::get_peak_thread_count());
  event.commit();
}

TRACE_REQUEST_FUNC(GCHeapMemoryUsage) {
  MemoryUsage usage = Universe::heap()->memory_usage();
  EventGCHeapMemoryUsage event(UNTIMED);
  event.set_used(usage.used());
  event.set_committed(usage.committed());
  event.set_max(usage.max_size());
  event.set_starttime(timestamp());
  event.set_endtime(timestamp());
  event.commit();
}

TRACE_REQUEST_FUNC(GCHeapMemoryPoolUsage) {
  ResourceMark mark;
  GrowableArray<MemoryPool*> pools = Universe::heap()->memory_pools();

Event configuration settings across JFR profiles
Configuration enabled period
default true everyChunk
profiling true everyChunk

Event fields with their types and descriptions
Field Type Description
used ulong: bytes Heap Used Bytes allocated for storing objects on the heap
committed ulong: bytes Heap Committed Bytes committed for storing objects on the heap
max ulong: bytes Heap Max Max size for the heap

Examples 3
Example event data values and properties
committed ulong: bytes
878706688
max ulong: bytes
4192206848
startTime long: millis
456680192546
used ulong: bytes
664224136
Example event data values and properties
committed ulong: bytes
264241152
max ulong: bytes
4192206848
startTime long: millis
364306381
used ulong: bytes
17883848
Example event data values and properties
committed ulong: bytes
3535798272
max ulong: bytes
3726639104
startTime long: millis
454119343746
used ulong: bytes
301528792

GCHeapMemoryPoolUsage

default profiling startTime every chunk 21 25 27 28

Category: Java Virtual Machine / Heap

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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_max(usage.max_size());
  event.set_starttime(timestamp());
  event.set_endtime(timestamp());
  event.commit();
}

TRACE_REQUEST_FUNC(GCHeapMemoryPoolUsage) {
  ResourceMark mark;
  GrowableArray<MemoryPool*> pools = Universe::heap()->memory_pools();
  for (int i = 0; i < pools.length(); i++) {
    MemoryPool* pool = pools.at(i);
    if (pool->is_heap()) {
      MemoryUsage usage = pool->get_memory_usage();
      EventGCHeapMemoryPoolUsage event(UNTIMED);
      event.set_name(pool->name());
      event.set_used(usage.used());
      event.set_committed(usage.committed());
      event.set_max(usage.max_size());
      event.set_starttime(timestamp());
      event.set_endtime(timestamp());
      event.commit();
    }
  }
}

Event configuration settings across JFR profiles
Configuration enabled period
default true everyChunk
profiling true everyChunk

Event fields with their types and descriptions
Field Type Description
name string Name GC Heap Memory Pool Name
used ulong: bytes GC Heap Memory Pool Used Bytes used for storing objects in this memory pool
committed ulong: bytes GC Heap Memory Pool Committed Bytes committed for storing objects in this memory pool
max ulong: bytes GC Heap Memory Pool Max Max size for storing objects in this memory pool

Examples 3
Example event data values and properties
committed ulong: bytes
2097152
max ulong: bytes
-1
name string
G1 Survivor Space
startTime long: millis
457152012694
used ulong: bytes
437376
Example event data values and properties
committed ulong: bytes
29360128
max ulong: bytes
-1
name string
G1 Eden Space
startTime long: millis
364306381
used ulong: bytes
16777216
Example event data values and properties
committed ulong: bytes
2231369728
max ulong: bytes
2795503616
name string
PS Old Gen
startTime long: millis
450537657617
used ulong: bytes
240565784

JVM: Internal

Duration

internal startTime duration eventThread 18 21 25 27 28

Category: Java Virtual Machine / Internal

Instant

internal startTime eventThread 18 21 25 27 28

Category: Java Virtual Machine / Internal

Value

internal startTime eventThread 18 21 25 27 28

Category: Java Virtual Machine / Internal

Event fields with their types and descriptions
Field Type Description
value ulong Value

Text

internal startTime eventThread 18 21 25 27 28

Category: Java Virtual Machine / Internal

Event fields with their types and descriptions
Field Type Description
text string Text

JVM: Memory

ResidentSetSize

default profiling startTime duration every chunk 21 25 27 28

Category: Java Virtual Machine / Memory

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Resident set size of the process

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/os/linux/os_linux.cpp:

  if (!print_model_name_and_flags(st, buf, buflen)) {
    _print_ascii_file_h("/proc/cpuinfo", "/proc/cpuinfo", st, false);
  }
  st->cr();
  print_sys_devices_cpu_info(st);
}

#if INCLUDE_JFR

void os::jfr_report_memory_info() {
  os::Linux::meminfo_t info;
  if (os::Linux::query_process_memory_info(&info)) {
    // Send the RSS JFR event
    EventResidentSetSize event;
    event.set_size(info.vmrss * K);
    event.set_peak(info.vmhwm * K);
    event.commit();
  } else {
    // Log a warning
    static bool first_warning = true;
    if (first_warning) {
      log_warning(jfr)("Error fetching RSS values: query_process_memory_info failed");
      first_warning = false;
    }
  }

src/hotspot/os/windows/os_windows.cpp:

#if INCLUDE_JFR

void os::jfr_report_memory_info() {
  PROCESS_MEMORY_COUNTERS_EX pmex;
  ZeroMemory(&pmex, sizeof(PROCESS_MEMORY_COUNTERS_EX));
  pmex.cb = sizeof(pmex);

  BOOL ret = GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*) &pmex, sizeof(pmex));
  if (ret != 0) {
    // Send the RSS JFR event
    EventResidentSetSize event;
    event.set_size(pmex.WorkingSetSize);
    event.set_peak(pmex.PeakWorkingSetSize);
    event.commit();
  } else {
    // Log a warning
    static bool first_warning = true;
    if (first_warning) {
      log_warning(jfr)("Error fetching RSS values: GetProcessMemoryInfo failed");
      first_warning = false;
    }
  }

src/hotspot/os/bsd/os_bsd.cpp:

void os::print_memory_mappings(char* addr, size_t bytes, outputStream* st) {}

#if INCLUDE_JFR

void os::jfr_report_memory_info() {
#ifdef __APPLE__
  mach_task_basic_info info;
  mach_msg_type_number_t count = MACH_TASK_BASIC_INFO_COUNT;

  kern_return_t ret = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&info, &count);
  if (ret == KERN_SUCCESS) {
    // Send the RSS JFR event
    EventResidentSetSize event;
    event.set_size(info.resident_size);
    // We've seen that resident_size_max sometimes trails resident_size with one page.
    // Make sure we always report size <= peak
    event.set_peak(MAX2(info.resident_size_max, info.resident_size));
    event.commit();
  } else {
    // Log a warning
    static bool first_warning = true;
    if (first_warning) {
      log_warning(jfr)("Error fetching RSS values: task_info failed");
      first_warning = false;

Event configuration settings across JFR profiles
Configuration enabled period
default true 1000 ms
profiling true 1000 ms

Event fields with their types and descriptions
Field Type Description
size ulong: bytes Resident Set Size Resident set size of the process
peak ulong: bytes Resident Set Size Peak Value Resident set size peak value of the process

Examples 3
Example event data values and properties
peak ulong: bytes
5194817536
size ulong: bytes
2597814272
startTime long: millis
491897140278
Example event data values and properties
peak ulong: bytes
7890067456
size ulong: bytes
6008905728
startTime long: millis
449656622346
Example event data values and properties
peak ulong: bytes
389955584
size ulong: bytes
198737920
startTime long: millis
11612495541

NativeMemoryUsage

default profiling startTime duration every chunk 20 21 25 27 28

Category: Java Virtual Machine / Memory

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Native memory usage for a given memory tag in 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/jfrNativeMemoryEvent.cpp:

    return;
  }

  NMTUsage* usage = get_usage(timestamp);

  EventNativeMemoryUsageTotal event(UNTIMED);
  event.set_starttime(timestamp);
  event.set_reserved(usage->total_reserved());
  event.set_committed(usage->total_committed());
  event.commit();
}

void JfrNativeMemoryEvent::send_type_event(const Ticks& starttime, MemTag mem_tag, size_t reserved, size_t committed) {
  EventNativeMemoryUsage event(UNTIMED);
  event.set_starttime(starttime);
  event.set_type(NMTUtil::tag_to_index(mem_tag));
  event.set_reserved(reserved);
  event.set_committed(committed);
  event.commit();
}

void JfrNativeMemoryEvent::send_type_events(const Ticks& timestamp) {
  if (!MemTracker::enabled()) {
    return;
  }

Event configuration settings across JFR profiles
Configuration enabled period
default true 1000 ms
profiling true 1000 ms

Event fields with their types and descriptions
Field Type Description
type NMTType Memory Type Type used for the native memory allocation
reserved ulong: bytes Reserved Memory Reserved bytes for this type
committed ulong: bytes Committed Memory Committed bytes for this type

Examples 3
Example event data values and properties
committed ulong: bytes
1092192
reserved ulong: bytes
1092192
startTime long: millis
3370351280
type NMTType
Native Memory Tracking
Example event data values and properties
committed ulong: bytes
90
reserved ulong: bytes
90
startTime long: millis
2407296411
type NMTType
Arguments
Example event data values and properties
committed ulong: bytes
8192
reserved ulong: bytes
8192
startTime long: millis
1229976068
type NMTType
Safepoint

NativeMemoryUsageTotal

default profiling startTime duration every chunk 20 21 25 27 28

Category: Java Virtual Machine / Memory

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Total native memory usage for the JVM. Might not be the exact sum of the NativeMemoryUsage events due to timeing.

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/jfrNativeMemoryEvent.cpp:

    usage->refresh();
    last_timestamp = timestamp;
  }
  return usage;
}

void JfrNativeMemoryEvent::send_total_event(const Ticks& timestamp) {
  if (!MemTracker::enabled()) {
    return;
  }

  NMTUsage* usage = get_usage(timestamp);

  EventNativeMemoryUsageTotal event(UNTIMED);
  event.set_starttime(timestamp);
  event.set_reserved(usage->total_reserved());
  event.set_committed(usage->total_committed());
  event.commit();
}

void JfrNativeMemoryEvent::send_type_event(const Ticks& starttime, MemTag mem_tag, size_t reserved, size_t committed) {
  EventNativeMemoryUsage event(UNTIMED);
  event.set_starttime(starttime);
  event.set_type(NMTUtil::tag_to_index(mem_tag));
  event.set_reserved(reserved);

Event configuration settings across JFR profiles
Configuration enabled period
default true 1000 ms
profiling true 1000 ms

Event fields with their types and descriptions
Field Type Description
reserved ulong: bytes Reserved Memory Total amount of reserved bytes for the JVM
committed ulong: bytes Committed Memory Total amount of committed bytes for the JVM

Examples 3
Example event data values and properties
committed ulong: bytes
351630810
reserved ulong: bytes
5696030170
startTime long: millis
2358935193
Example event data values and properties
committed ulong: bytes
862316418
reserved ulong: bytes
5765859202
startTime long: millis
8327944213
Example event data values and properties
committed ulong: bytes
273457897
reserved ulong: bytes
5802697449
startTime long: millis
8451074209

JVM: Method Tracing

MethodTiming

default profiling startTime duration stackTrace 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/MethodTimingEvent.java

Category: Java Virtual Machine / Method Tracing

Measures the approximate time it takes for a method to execute, including all delays, not just CPU processing time

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/tracing/MethodTracer.java:

    public static void timingObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addObjectTiming(duration);
        }
    }

    public static void traceTimingObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration) && JVM.getEventWriter() != null) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addObjectTiming(duration);
        }
    }

    public static void trace(long startTime, long methodId) {

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void timing(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addTiming(methodId, duration);
        }
    }

    public static void traceTiming(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addTiming(methodId, duration);
        }
        if (MethodTraceEvent.shouldCommit(duration)) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void timingObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addObjectTiming(duration);
        }
    }

    public static void traceTimingObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration) && JVM.getEventWriter() != null) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addObjectTiming(duration);
        }
    }

    public static void trace(long startTime, long methodId) {

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void timing(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addTiming(methodId, duration);
        }
    }

    public static void traceTiming(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addTiming(methodId, duration);
        }
        if (MethodTraceEvent.shouldCommit(duration)) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }

src/jdk.jfr/share/classes/jdk/jfr/internal/tracing/PlatformTracer.java:

        s.append(message);
        s.append(" for ");
        s.append(className.replace("/", "."));
        s.append(" in module ");
        s.append(module.getName());
        s.append(" and class loader " + module.getClassLoader());
        Logger.log(LogTag.JFR_METHODTRACE, level, s.toString());
    }

    public static void emitTiming() {
        // Metadata lock prevents rotation/flush while emitting events.
        synchronized (MetadataRepository.getInstance()) {
            removeClasses(JVM.drainStaleMethodTracerIds());
            long timestamp = MethodTimingEvent.timestamp();
            for (var tc : timedClasses.values()) {
                tc.emit(timestamp);
            }
        }
    }

    public static void addObjectTiming(long duration) {
        OBJECT.invocations().getAndIncrement();
        OBJECT.time().addAndGet(duration);
        OBJECT.updateMinMax(duration);
    }

src/jdk.jfr/share/classes/jdk/jfr/internal/tracing/PlatformTracer.java:

        s.append(message);
        s.append(" for ");
        s.append(className.replace("/", "."));
        s.append(" in module ");
        s.append(module.getName());
        s.append(" and class loader " + module.getClassLoader());
        Logger.log(LogTag.JFR_METHODTRACE, level, s.toString());
    }

    public static void emitTiming() {
        // Metadata lock prevents rotation/flush while emitting events.
        synchronized (MetadataRepository.getInstance()) {
            removeClasses(JVM.drainStaleMethodTracerIds());
            long timestamp = MethodTimingEvent.timestamp();
            for (var tc : timedClasses.values()) {
                tc.emit(timestamp);
            }
        }
    }

    public static void addObjectTiming(long duration) {
        OBJECT.invocations().getAndIncrement();
        OBJECT.time().addAndGet(duration);
        OBJECT.updateMinMax(duration);
    }

src/jdk.jfr/share/classes/jdk/jfr/internal/tracing/TimedClass.java:

    public void emit(long timestamp) {
        for (var tm : methods.values()) {
            if (tm.published().get()) {
                long methodId = tm.method().methodId();
                long invocations = tm.invocations().get();
                long time = tm.time().get();
                long min = tm.minimum().get();
                long max = tm.maximum().get();
                if (time == 0 || invocations == 0) {
                    // If time is zero, it's a low resolution clock and more invocations are needed.
                    MethodTimingEvent.commit(timestamp, methodId, invocations, MISSING, MISSING, MISSING);
                } else {
                    long average = (time + invocations / 2) / invocations;
                    if (min == Long.MAX_VALUE) {
                        min = average;
                    }
                    if (max == Long.MIN_VALUE) {
                        max = average;
                    }
                    min = Math.min(min, average);
                    max = Math.max(max, average);
                    MethodTimingEvent.commit(timestamp, methodId, invocations, min, average, max);
                }
                tm.method().log("Emitted event");
            }
        }
    }
}

src/jdk.jfr/share/classes/jdk/jfr/internal/tracing/TimedClass.java:

    public void emit(long timestamp) {
        for (var tm : methods.values()) {
            if (tm.published().get()) {
                long methodId = tm.method().methodId();
                long invocations = tm.invocations().get();
                long time = tm.time().get();
                long min = tm.minimum().get();
                long max = tm.maximum().get();
                if (time == 0 || invocations == 0) {
                    // If time is zero, it's a low resolution clock and more invocations are needed.
                    MethodTimingEvent.commit(timestamp, methodId, invocations, MISSING, MISSING, MISSING);
                } else {
                    long average = (time + invocations / 2) / invocations;
                    if (min == Long.MAX_VALUE) {
                        min = average;
                    }
                    if (max == Long.MIN_VALUE) {
                        max = average;
                    }
                    min = Math.min(min, average);
                    max = Math.max(max, average);
                    MethodTimingEvent.commit(timestamp, methodId, invocations, min, average, max);
                }
                tm.method().log("Emitted event");
            }
        }
    }
}

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.class,
        jdk.internal.event.FinalFieldMutationEvent.class,
        DirectBufferStatisticsEvent.class,
        InitialSecurityPropertyEvent.class,
        MethodTraceEvent.class,
        MethodTimingEvent.class,
    };

    private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
    private static final Runnable emitDirectBufferStatistics = JDKEvents::emitDirectBufferStatistics;
    private static final Runnable emitContainerConfiguration = JDKEvents::emitContainerConfiguration;
    private static final Runnable emitContainerCPUUsage = JDKEvents::emitContainerCPUUsage;
    private static final Runnable emitContainerCPUThrottling = JDKEvents::emitContainerCPUThrottling;

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        try {
            if (initializationTriggered == false) {
                for (Class<?> eventClass : eventClasses) {
                    MetadataRepository.getInstance().register((Class<? extends Event>) eventClass);
                }
                PeriodicEvents.addJavaEvent(jdk.internal.event.ExceptionStatisticsEvent.class, emitExceptionStatistics);
                PeriodicEvents.addJavaEvent(DirectBufferStatisticsEvent.class, emitDirectBufferStatistics);
                PeriodicEvents.addJavaEvent(InitialSecurityPropertyEvent.class, emitInitialSecurityProperties);
                PeriodicEvents.addJavaEvent(MethodTimingEvent.class, emitMethodTiming);

                initializeContainerEvents();
                JFRTracing.enable();
                initializationTriggered = true;
            }
        } catch (Exception e) {
            Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

            for (String key : p.stringPropertyNames()) {
                InitialSecurityPropertyEvent e = new InitialSecurityPropertyEvent();
                e.key = key;
                e.value = p.getProperty(key);
                e.commit();
            }
        }
    }

    private static void emitMethodTiming() {
        if (MethodSetting.isInitialized() && MethodTimingEvent.enabled()) {
            PlatformTracer.emitTiming();
        }
    }
}

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.class,
        jdk.internal.event.FinalFieldMutationEvent.class,
        DirectBufferStatisticsEvent.class,
        InitialSecurityPropertyEvent.class,
        MethodTraceEvent.class,
        MethodTimingEvent.class,
    };

    private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
    private static final Runnable emitDirectBufferStatistics = JDKEvents::emitDirectBufferStatistics;
    private static final Runnable emitContainerConfiguration = JDKEvents::emitContainerConfiguration;
    private static final Runnable emitContainerCPUUsage = JDKEvents::emitContainerCPUUsage;
    private static final Runnable emitContainerCPUThrottling = JDKEvents::emitContainerCPUThrottling;

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        try {
            if (initializationTriggered == false) {
                for (Class<?> eventClass : eventClasses) {
                    MetadataRepository.getInstance().register((Class<? extends Event>) eventClass);
                }
                PeriodicEvents.addJavaEvent(jdk.internal.event.ExceptionStatisticsEvent.class, emitExceptionStatistics);
                PeriodicEvents.addJavaEvent(DirectBufferStatisticsEvent.class, emitDirectBufferStatistics);
                PeriodicEvents.addJavaEvent(InitialSecurityPropertyEvent.class, emitInitialSecurityProperties);
                PeriodicEvents.addJavaEvent(MethodTimingEvent.class, emitMethodTiming);

                initializeContainerEvents();
                JFRTracing.enable();
                initializationTriggered = true;
            }
        } catch (Exception e) {
            Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

            for (String key : p.stringPropertyNames()) {
                InitialSecurityPropertyEvent e = new InitialSecurityPropertyEvent();
                e.key = key;
                e.value = p.getProperty(key);
                e.commit();
            }
        }
    }

    private static void emitMethodTiming() {
        if (MethodSetting.isInitialized() && MethodTimingEvent.enabled()) {
            PlatformTracer.emitTiming();
        }
    }
}

src/jdk.jfr/share/classes/jdk/jfr/events/MethodTimingEvent.java:

@Name("jdk.MethodTiming")
@Label("Method Timing")
@Category({ "Java Virtual Machine", "Method Tracing" })
@RemoveFields({ "duration", "eventThread", "stackTrace" })
@Description("Measures the approximate time it takes for a method to execute, including all delays, not just CPU processing time")
public final class MethodTimingEvent extends AbstractJDKEvent {

    @Label("Method")
    public long method;

    @Label("Invocations")
    public long invocations;

    @Label("Minimum Time")
    @Description("The value may be missing (Long.MIN_VALUE) if the clock-resolution is too low to establish a minimum time")
    @Timespan(Timespan.TICKS)
    public long minimum;

src/jdk.jfr/share/classes/jdk/jfr/events/MethodTimingEvent.java:

@Name("jdk.MethodTiming")
@Label("Method Timing")
@Category({ "Java Virtual Machine", "Method Tracing" })
@RemoveFields({ "duration", "eventThread", "stackTrace" })
@Description("Measures the approximate time it takes for a method to execute, including all delays, not just CPU processing time")
public final class MethodTimingEvent extends AbstractJDKEvent {

    @Label("Method")
    public long method;

    @Label("Invocations")
    public long invocations;

    @Label("Minimum Time")
    @Description("The value may be missing (Long.MIN_VALUE) if the clock-resolution is too low to establish a minimum time")
    @Timespan(Timespan.TICKS)
    public long minimum;

Event configuration settings across JFR profiles
Configuration enabled filter period
default true null endChunk
profiling true null endChunk

Event fields with their types and descriptions
Field Type Description
method long Method
invocations long Invocations
minimum long: tickspan Minimum Time The value may be missing (Long.MIN_VALUE) if the clock-resolution is too low to establish a minimum time
average long: tickspan Average Time The value may be missing (Long.MIN_VALUE) if the clock-resolution is too low to establish an average time
maximum long: tickspan Maximum Time The value may be missing (Long.MIN_VALUE) if the clock-resolution is too low to establish a maximum time

MethodTrace

default profiling startTime duration stackTrace 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/MethodTraceEvent.java

Category: Java Virtual Machine / Method Tracing

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/tracing/MethodTracer.java:

    public static void traceObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration) && JVM.getEventWriter() != null) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
    }

    public static void timingObjectInit(long startTime, long methodId) {

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void traceTimingObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration) && JVM.getEventWriter() != null) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addObjectTiming(duration);
        }

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void trace(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration)) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
    }

    public static void timing(long startTime, long methodId) {

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addTiming(methodId, duration);
        }
        if (MethodTraceEvent.shouldCommit(duration)) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
    }
}

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void traceObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration) && JVM.getEventWriter() != null) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
    }

    public static void timingObjectInit(long startTime, long methodId) {

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void traceTimingObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration) && JVM.getEventWriter() != null) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addObjectTiming(duration);
        }

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void trace(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration)) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
    }

    public static void timing(long startTime, long methodId) {

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addTiming(methodId, duration);
        }
        if (MethodTraceEvent.shouldCommit(duration)) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
    }
}

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        jdk.internal.event.SerializationMisdeclarationEvent.class,
        jdk.internal.event.SocketReadEvent.class,
        jdk.internal.event.SocketWriteEvent.class,
        jdk.internal.event.ThreadSleepEvent.class,
        jdk.internal.event.TLSHandshakeEvent.class,
        jdk.internal.event.VirtualThreadStartEvent.class,
        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.class,
        jdk.internal.event.FinalFieldMutationEvent.class,
        DirectBufferStatisticsEvent.class,
        InitialSecurityPropertyEvent.class,
        MethodTraceEvent.class,
        MethodTimingEvent.class,
    };

    private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
    private static final Runnable emitDirectBufferStatistics = JDKEvents::emitDirectBufferStatistics;
    private static final Runnable emitContainerConfiguration = JDKEvents::emitContainerConfiguration;
    private static final Runnable emitContainerCPUUsage = JDKEvents::emitContainerCPUUsage;
    private static final Runnable emitContainerCPUThrottling = JDKEvents::emitContainerCPUThrottling;
    private static final Runnable emitContainerMemoryUsage = JDKEvents::emitContainerMemoryUsage;
    private static final Runnable emitContainerIOUsage = JDKEvents::emitContainerIOUsage;
    private static final Runnable emitInitialSecurityProperties = JDKEvents::emitInitialSecurityProperties;

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        jdk.internal.event.SerializationMisdeclarationEvent.class,
        jdk.internal.event.SocketReadEvent.class,
        jdk.internal.event.SocketWriteEvent.class,
        jdk.internal.event.ThreadSleepEvent.class,
        jdk.internal.event.TLSHandshakeEvent.class,
        jdk.internal.event.VirtualThreadStartEvent.class,
        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.class,
        jdk.internal.event.FinalFieldMutationEvent.class,
        DirectBufferStatisticsEvent.class,
        InitialSecurityPropertyEvent.class,
        MethodTraceEvent.class,
        MethodTimingEvent.class,
    };

    private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
    private static final Runnable emitDirectBufferStatistics = JDKEvents::emitDirectBufferStatistics;
    private static final Runnable emitContainerConfiguration = JDKEvents::emitContainerConfiguration;
    private static final Runnable emitContainerCPUUsage = JDKEvents::emitContainerCPUUsage;
    private static final Runnable emitContainerCPUThrottling = JDKEvents::emitContainerCPUThrottling;
    private static final Runnable emitContainerMemoryUsage = JDKEvents::emitContainerMemoryUsage;
    private static final Runnable emitContainerIOUsage = JDKEvents::emitContainerIOUsage;
    private static final Runnable emitInitialSecurityProperties = JDKEvents::emitInitialSecurityProperties;

src/jdk.jfr/share/classes/jdk/jfr/events/MethodTraceEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Contextual;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.StackTrace;

@Name("jdk.MethodTrace")
@Label("Method Trace")
@Category({ "Java Virtual Machine", "Method Tracing" })
@StackTrace(true)
public final class MethodTraceEvent extends AbstractJDKEvent {

    @Contextual
    @Label("Method")
    private long method;

    public static void commit(long start, long duration, long method) {
        // Generated by JFR
    }

    public static long timestamp() {
        // Generated by JFR
        return 0;

src/jdk.jfr/share/classes/jdk/jfr/events/MethodTraceEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Contextual;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.StackTrace;

@Name("jdk.MethodTrace")
@Label("Method Trace")
@Category({ "Java Virtual Machine", "Method Tracing" })
@StackTrace(true)
public final class MethodTraceEvent extends AbstractJDKEvent {

    @Contextual
    @Label("Method")
    private long method;

    public static void commit(long start, long duration, long method) {
        // Generated by JFR
    }

    public static long timestamp() {
        // Generated by JFR
        return 0;

Event configuration settings across JFR profiles
Configuration enabled filter stackTrace threshold
default true null true 0 ms
profiling true null true 0 ms

JVM: Profiling

OldObjectSample

cutoff default profiling startTime eventThread stackTrace 11 17 21 25 27 28

Category: Java Virtual Machine / Profiling

Appearing in: graalvm_linux_G1GC, graalvm_linux_native, linux_G1GC, linux_ParallelGC, linux_SerialGC

Missing in: linux_ShenandoahGC, linux_ZGC

A potential memory leak

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/leakprofiler/checkpoint/eventEmitter.cpp:

  assert(!sample->is_dead(), "invariant");
  assert(edge_store != nullptr, "invariant");
  assert(_jfr_thread_local != nullptr, "invariant");

  const StoredEdge* const edge = edge_store->get(sample);
  assert(edge != nullptr, "invariant");
  assert(edge->pointee() == sample->object(), "invariant");
  const traceid object_id = edge_store->get_id(edge);
  assert(object_id != 0, "invariant");
  const traceid gc_root_id = edge->gc_root_id();

  Tickspan object_age = Ticks(_start_time.value()) - sample->allocation_time();

  EventOldObjectSample e(UNTIMED);
  e.set_starttime(_start_time);
  e.set_endtime(_end_time);
  e.set_allocationTime(sample->allocation_time());
  e.set_objectSize(sample->allocated());
  e.set_objectAge(object_age);
  e.set_lastKnownHeapUsage(sample->heap_used_at_last_gc());
  e.set_object(object_id);
  e.set_arrayElements(array_size(edge->pointee()));
  e.set_root(gc_root_id);

  // Temporarily assigning both the stack trace id and thread id

src/hotspot/share/jfr/leakprofiler/sampling/objectSampler.cpp:

    // for regular threads, the blob is cached in the thread local data structure
    tl->set_thread_blob(JfrCheckpointManager::create_thread_blob(thread, tid));
    assert(tl->has_thread_blob(), "invariant");
  }
  return tl->thread_blob();
}

class RecordStackTrace {
 private:
  JavaThread* _jt;
  bool _enabled;
 public:
  RecordStackTrace(JavaThread* jt) : _jt(jt),
    _enabled(JfrEventSetting::has_stacktrace(EventOldObjectSample::eventId)) {
    if (_enabled) {
      JfrStackTraceRepository::record_for_leak_profiler(jt);
    }
  }
  ~RecordStackTrace() {
    if (_enabled) {
      _jt->jfr_thread_local()->clear_cached_stack_trace();
    }
  }
};

src/hotspot/share/jfr/recorder/service/jfrRecorderService.cpp:

                                                  bool skip_bfs) {
  JavaThread* const jt = JavaThread::current();
  DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(jt);)
  if (exclude_paths_to_gc_roots(cutoff_ticks)) {
    ::emit_leakprofiler_events(emit_all, skip_bfs, jt);
    return;
  }
  emit_leakprofiler_events_paths_to_gc_roots(cutoff_ticks, emit_all, skip_bfs, /* oom */ false, jt);
}

// Leakprofiler serialization request, the report_on_java_out_of_memory VM entry point.
void JfrRecorderService::emit_leakprofiler_events_on_oom() {
  assert(CrashOnOutOfMemoryError, "invariant");
  if (EventOldObjectSample::is_enabled()) {
    JavaThread* const jt = JavaThread::current();
    DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(jt);)
    ThreadToNativeFromVM transition(jt);
    emit_leakprofiler_events_paths_to_gc_roots(max_jlong, false, false, /* oom */ true, jt);
  }
}

// The worker routine for the JFR Recorder Thread when processing MSG_EMIT_LEAKP_REFCHAINS messages.
void JfrRecorderService::emit_leakprofiler_events() {
  JavaThread* const jt = JavaThread::current();
  DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(jt));

src/hotspot/share/jfr/jni/jfrJniMethod.cpp:

NO_TRANSITION(jlong, jfr_elapsed_counter(JNIEnv* env, jclass jvm))
  return JfrTicks::now();
NO_TRANSITION_END

NO_TRANSITION(void, jfr_retransform_classes(JNIEnv* env, jclass jvm, jobjectArray classes))
  JfrJvmtiAgent::retransform_classes(env, classes, JavaThread::thread_from_jni_environment(env));
NO_TRANSITION_END

NO_TRANSITION(void, jfr_set_enabled(JNIEnv* env, jclass jvm, jlong event_type_id, jboolean enabled))
  JfrEventSetting::set_enabled(event_type_id, JNI_TRUE == enabled);
  if (EventOldObjectSample::eventId == event_type_id) {
    JavaThread* thread = JavaThread::thread_from_jni_environment(env);
    MACOS_AARCH64_ONLY(ThreadWXEnable __wx(WXWrite, thread));
    ThreadInVMfromNative transition(thread);
    if (JNI_TRUE == enabled) {
      LeakProfiler::start(JfrOptionSet::old_object_queue_size());
    } else {
      LeakProfiler::stop();
    }
  }
NO_TRANSITION_END

Event configuration settings across JFR profiles
Configuration cutoff enabled stackTrace
default 0 ns true false
profiling 0 ns true true

Event fields with their types and descriptions
Field Type Description
allocationTime Ticks Allocation Time
objectSize ulong: bytes 18+ Object Size
objectAge Tickspan 14+ Object Age
lastKnownHeapUsage ulong: bytes Last Known Heap Usage
object OldObject Object
arrayElements int Array Elements If the object is an array, the number of elements, or minimum value for the type int if it is not an array
root OldObjectGcRoot GC Root

Examples 3
Example event data values and properties
allocationTime Ticks
25416580641
arrayElements int
4096
lastKnownHeapUsage ulong: bytes
9761944
object OldObject
address ulong: address
30175708344
description string
null
referrer Reference
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[B
package Package
null
objectAge Tickspan
24160557
objectSize ulong: bytes
4112
root OldObjectGcRoot
null
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.4.1
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.4.1
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
25440741198
Example event data values and properties
allocationTime Ticks
491912790774
arrayElements int
-2147483648
lastKnownHeapUsage ulong: bytes
277438664
object OldObject
address ulong: address
30404871592
description string
Size: 1
referrer Reference
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
8
name string
java/lang/ThreadLocal$ThreadLocalMap
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.4.1
name string
java/lang
objectAge Tickspan
8265087881
objectSize ulong: bytes
24
root OldObjectGcRoot
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
299
method Method
descriptor string
(Ljava/lang/Thread;Ljava/lang/Object;)V
hidden boolean
false
modifiers int
0
name string
createMap
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/ThreadLocal
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.4.1
name string
java/lang
type FrameType
Inlined
truncated boolean
false
startTime long: millis
500177878655
Example event data values and properties
allocationTime Ticks
212792698066
arrayElements int
-2147483648
lastKnownHeapUsage ulong: bytes
90535488
object OldObject
address ulong: address
30252914504
description string
null
referrer Reference
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/jar/Attributes
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.4.1
name string
java/util/jar
objectAge Tickspan
297598772699
objectSize ulong: bytes
16
root OldObjectGcRoot
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
339
lineNumber int
333
method Method
descriptor string
(Ljava/io/InputStream;Ljava/lang/String;)V
hidden boolean
false
modifiers int
2
name string
read
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/jar/Manifest
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.4.1
name string
java/util/jar
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
510391470765

ExecutionSample

default profiling startTime every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Profiling

Snapshot of a thread executing Java code. Threads that are not executing Java code, including those waiting or executing native code, are not included.

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/jni/jfrJniMethod.cpp:

JVM_ENTRY_NO_ENV(void, jfr_subscribe_log_level(JNIEnv* env, jclass jvm, jobject log_tag, jint id))
  JfrJavaLog::subscribe_log_level(log_tag, id, thread);
JVM_END

JVM_ENTRY_NO_ENV(void, jfr_set_output(JNIEnv* env, jclass jvm, jstring path))
  JfrRepository::set_chunk_path(path, thread);
JVM_END

JVM_ENTRY_NO_ENV(void, jfr_set_method_sampling_period(JNIEnv* env, jclass jvm, jlong type, jlong periodMillis))
  if (periodMillis < 0) {
    periodMillis = 0;
  }
  JfrEventId typed_event_id = (JfrEventId)type;
  assert(EventExecutionSample::eventId == typed_event_id || EventNativeMethodSample::eventId == typed_event_id, "invariant");
  JfrEventSetting::set_enabled(typed_event_id, periodMillis > 0);
  if (EventExecutionSample::eventId == type) {
    JfrThreadSampler::set_java_sample_period(periodMillis);
  } else {
    JfrThreadSampler::set_native_sample_period(periodMillis);
  }
JVM_END

JVM_ENTRY_NO_ENV(void, jfr_store_metadata_descriptor(JNIEnv* env, jclass jvm, jbyteArray descriptor))
  JfrMetadataEvent::update(descriptor);
JVM_END

// trace thread id for a thread object

src/hotspot/share/jfr/periodic/sampling/jfrThreadSampling.cpp:

  traceid sid;
  {
    ResourceMark rm(current);
    JfrStackTrace stacktrace;
    if (!stacktrace.record(jt, top_frame, in_continuation, request)) {
      // Unable to record stacktrace. Fail.
      return;
    }
    sid = JfrStackTraceRepository::add(stacktrace);
  }
  assert(sid != 0, "invariant");
  const traceid tid = in_continuation ? tl->vthread_id_with_epoch_update(jt) : JfrThreadLocal::jvm_thread_id(jt);
  send_sample_event<EventExecutionSample>(request._sample_ticks, now, sid, tid);
  if (current == jt) {
    send_safepoint_latency_event(request, now, sid, jt);
  }
}

#ifdef LINUX
static void record_cpu_time_thread(const JfrCPUTimeSampleRequest& request, const JfrTicks& now, const JfrThreadLocal* tl, JavaThread* jt, Thread* current) {
  assert(jt != nullptr, "invariant");
  assert(tl != nullptr, "invariant");
  assert(current != nullptr, "invariant");
  frame top_frame;

Event configuration settings across JFR profiles
Configuration enabled period
default true 20 ms
profiling true 10 ms

Event fields with their types and descriptions
Field Type Description
sampledThread Thread Thread
stackTrace StackTrace Stack Trace
state ThreadState Thread State

Examples 3
Example event data values and properties
sampledThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Executor task launch worker for task 3.0 in stage 38.0 (TID 149)
javaThreadId long
1709
osName string
Executor task launch worker for task 3.0 in stage 38.0 (TID 149)
osThreadId long
4230
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
8
lineNumber int
166
method Method
descriptor string
(Ljava/lang/Object;Lbreeze/generic/UFunc$InPlaceImpl2;)Ljava/lang/Object;
hidden boolean
false
modifiers int
1
name string
$colon$plus$eq
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.4.1
name string
java/net
hidden boolean
false
modifiers int
1537
name string
breeze/linalg/NumericOps
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
breeze/linalg
type FrameType
Inlined
truncated boolean
false
startTime long: millis
448438799662
state ThreadState
STATE_RUNNABLE
Example event data values and properties
sampledThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Executor task launch worker for task 2.0 in stage 47.0 (TID 184)
javaThreadId long
1733
osName string
Executor task launch worker for task 2.0 in stage 47.0 (TID 184)
osThreadId long
4650
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
162
lineNumber int
3387
method Method
descriptor string
(Lbreeze/linalg/DenseMatrix;Lbreeze/linalg/Vector;)Lbreeze/linalg/DenseVector;
hidden boolean
false
modifiers int
1
name string
bindingMissing
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
breeze/linalg/operators/DenseMatrixMultOps$$anon$178
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
breeze/linalg/operators
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
452987839503
state ThreadState
STATE_RUNNABLE
Example event data values and properties
sampledThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
main
javaThreadId long
3
osName string
main
osThreadId long
5014
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
84
lineNumber int
749
method Method
descriptor string
(Lsun/security/util/math/IntegerModuloP;)Lsun/security/util/math/intpoly/IntegerPolynomial$MutableElement;
hidden boolean
false
modifiers int
1
name string
setProduct
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
4
name string
sun/security/util/math/intpoly/IntegerPolynomial$MutableElement
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.4.1
name string
sun/security/util/math/intpoly
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
951769879
state ThreadState
STATE_RUNNABLE

NativeMethodSample

default profiling startTime every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Profiling

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Snapshot of a thread in native code, executing or waiting. Threads that are executing Java code are not included.

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/jni/jfrJniMethod.cpp:

JVM_ENTRY_NO_ENV(void, jfr_subscribe_log_level(JNIEnv* env, jclass jvm, jobject log_tag, jint id))
  JfrJavaLog::subscribe_log_level(log_tag, id, thread);
JVM_END

JVM_ENTRY_NO_ENV(void, jfr_set_output(JNIEnv* env, jclass jvm, jstring path))
  JfrRepository::set_chunk_path(path, thread);
JVM_END

JVM_ENTRY_NO_ENV(void, jfr_set_method_sampling_period(JNIEnv* env, jclass jvm, jlong type, jlong periodMillis))
  if (periodMillis < 0) {
    periodMillis = 0;
  }
  JfrEventId typed_event_id = (JfrEventId)type;
  assert(EventExecutionSample::eventId == typed_event_id || EventNativeMethodSample::eventId == typed_event_id, "invariant");
  JfrEventSetting::set_enabled(typed_event_id, periodMillis > 0);
  if (EventExecutionSample::eventId == type) {
    JfrThreadSampler::set_java_sample_period(periodMillis);
  } else {
    JfrThreadSampler::set_native_sample_period(periodMillis);
  }
JVM_END

JVM_ENTRY_NO_ENV(void, jfr_store_metadata_descriptor(JNIEnv* env, jclass jvm, jbyteArray descriptor))
  JfrMetadataEvent::update(descriptor);
JVM_END

src/hotspot/share/jfr/periodic/sampling/jfrThreadSampling.cpp:

      const frame top_frame = jt->last_frame();
      if (!stacktrace.record_inner(jt, top_frame, is_in_continuation(top_frame, jt), 0 /* skip level */)) {
        // Unable to record stacktrace. Fail.
        return false;
      }
      sid = JfrStackTraceRepository::add(stacktrace);
    }
    // Read the tid under the monitor to ensure that if its a virtual thread,
    // it is not unmounted until we are done with it.
    tid = JfrThreadLocal::thread_id(jt);
  }

  assert(tl->sample_state() == NO_SAMPLE, "invariant");
  send_sample_event<EventNativeMethodSample>(start_time, start_time, sid, tid);
  return true;
}

// Entry point for a sampled thread that discovered pending Jfr Sample Requests as part of a safepoint poll.
void JfrThreadSampling::process_sample_request(JavaThread* jt) {
  assert(JavaThread::current() == jt, "should be current thread");
  assert(jt->thread_state() == _thread_in_vm || jt->thread_state() == _thread_in_Java, "invariant");

  const JfrTicks now = JfrTicks::now();

  JfrThreadLocal* const tl = jt->jfr_thread_local();

Event configuration settings across JFR profiles
Configuration enabled period
default true 20 ms
profiling true 20 ms

Event fields with their types and descriptions
Field Type Description
sampledThread Thread Thread
stackTrace StackTrace Stack Trace
state ThreadState Thread State

Examples 3
Example event data values and properties
sampledThread Thread
group ThreadGroup
name string
finagle/netty4
parent ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
finagle/netty4-2-1
javaThreadId long
895
osName string
finagle/netty4-2-1
osThreadId long
3710
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(IJII)I
hidden boolean
false
modifiers int
266
name string
epollWait
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
io/netty/channel/epoll/Native
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
io/netty/channel/epoll
type FrameType
Native
truncated boolean
false
startTime long: millis
455355595420
state ThreadState
STATE_RUNNABLE
Example event data values and properties
sampledThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
main
javaThreadId long
3
osName string
main
osThreadId long
5014
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(Ljava/io/FileDescriptor;Z)I
hidden boolean
false
modifiers int
264
name string
force0
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
0
name string
sun/nio/ch/UnixFileDispatcherImpl
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.4.1
name string
sun/nio/ch
type FrameType
Native
truncated boolean
false
startTime long: millis
12003165068
state ThreadState
STATE_RUNNABLE
Example event data values and properties
sampledThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
SparkUI-1685
javaThreadId long
1685
osName string
SparkUI-1685
osThreadId long
4204
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(IJII)I
hidden boolean
false
modifiers int
264
name string
wait
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
0
name string
sun/nio/ch/EPoll
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.4.1
name string
sun/nio/ch
type FrameType
Native
truncated boolean
false
startTime long: millis
449948450477
state ThreadState
STATE_RUNNABLE

CPUTimeSample

experimental throttle startTime 25 27 28

Category: Java Virtual Machine / Profiling

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Snapshot of a threads state from the CPU time sampler, both threads executing native and Java code are included. The throttle setting can be either an upper bound for the event emission rate, e.g. 100/s, or the cpu-time period, e.g. 10ms, with s, ms, us and ns supported as time units.

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/sampling/jfrCPUTimeThreadSampler.cpp:

      if (jt->has_last_Java_frame()) {
        JfrThreadSampling::process_cpu_time_request(jt, tl, current, false);
      } else {
        tl->set_do_async_processing_of_cpu_time_jfr_requests(false);
      }
      tl->release_cpu_time_jfr_queue_lock();
    }
  }
}

static volatile size_t count = 0;

void JfrCPUTimeThreadSampling::send_empty_event(const JfrTicks &start_time, traceid tid, Tickspan cpu_time_period) {
  EventCPUTimeSample event(UNTIMED);
  event.set_failed(true);
  event.set_starttime(start_time);
  event.set_eventThread(tid);
  event.set_stackTrace(0);
  event.set_samplingPeriod(cpu_time_period);
  event.set_biased(false);
  event.commit();
}


static volatile size_t biased_count = 0;

void JfrCPUTimeThreadSampling::send_event(const JfrTicks &start_time, traceid sid, traceid tid, Tickspan cpu_time_period, bool biased) {
  EventCPUTimeSample event(UNTIMED);
  event.set_failed(false);
  event.set_starttime(start_time);
  event.set_eventThread(tid);
  event.set_stackTrace(sid);
  event.set_samplingPeriod(cpu_time_period);
  event.set_biased(biased);
  event.commit();
  AtomicAccess::inc(&count);
  if (biased) {
    AtomicAccess::inc(&biased_count);
  }

Event configuration settings across JFR profiles
Configuration enabled stackTrace throttle
default false true 500/s
profiling false true 10ms

Event fields with their types and descriptions
Field Type Description
stackTrace StackTrace Stack Trace
eventThread Thread Thread
failed boolean Failed Failed to obtain the stack trace
samplingPeriod Tickspan CPU Time Sampling Period
biased boolean Biased The sample is safepoint-biased

Examples 3
Example event data values and properties
biased boolean
false
eventThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Executor task launch worker for task 3.0 in stage 47.0 (TID 185)
javaThreadId long
1729
osName string
Executor task launch worker for task 3.0 in stage 47.0 (TID 185)
osThreadId long
4645
virtual boolean
false
failed boolean
false
samplingPeriod Tickspan
10000000
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
162
lineNumber int
3387
method Method
descriptor string
(Lbreeze/linalg/DenseMatrix;Lbreeze/linalg/Vector;)Lbreeze/linalg/DenseVector;
hidden boolean
false
modifiers int
1
name string
bindingMissing
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
breeze/linalg/operators/DenseMatrixMultOps$$anon$178
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
breeze/linalg/operators
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
453369399391
Example event data values and properties
biased boolean
false
eventThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
main
javaThreadId long
3
osName string
main
osThreadId long
5014
virtual boolean
false
failed boolean
false
samplingPeriod Tickspan
10000000
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
1
lineNumber int
66
method Method
descriptor string
()V
hidden boolean
false
modifiers int
16
name string
validate
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
0
name string
jdk/jfr/internal/jfc/model/XmlElement
package Package
exported boolean
false
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/jdk.jfr
name string
jdk.jfr
version string
25.0.4.1
name string
jdk/jfr/internal/jfc/model
type FrameType
Inlined
truncated boolean
false
startTime long: millis
1272393669
Example event data values and properties
biased boolean
false
eventThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Executor task launch worker for task 2.0 in stage 38.0 (TID 148)
javaThreadId long
1712
osName string
Executor task launch worker for task 2.0 in stage 38.0 (TID 148)
osThreadId long
4235
virtual boolean
false
failed boolean
false
samplingPeriod Tickspan
10000000
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
15
lineNumber int
278
method Method
descriptor string
([D)Lbreeze/linalg/DenseVector;
hidden boolean
false
modifiers int
1
name string
apply$mDc$sp
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
breeze/linalg/DenseVector$
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
breeze/linalg
type FrameType
Inlined
truncated boolean
false
startTime long: millis
448218433428

CPUTimeSamplesLost

experimental default profiling startTime 25 27 28

Category: Java Virtual Machine / Profiling

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Records that the CPU time sampler lost samples

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/sampling/jfrCPUTimeThreadSampler.cpp:

  event.set_samplingPeriod(cpu_time_period);
  event.set_biased(biased);
  event.commit();
  AtomicAccess::inc(&count);
  if (biased) {
    AtomicAccess::inc(&biased_count);
  }
  if (AtomicAccess::load(&count) % 1000 == 0) {
    log_debug(jfr)("CPU thread sampler sent %zu events, lost %d, biased %zu\n", AtomicAccess::load(&count), AtomicAccess::load(&_lost_samples_sum), AtomicAccess::load(&biased_count));
  }
}

void JfrCPUTimeThreadSampling::send_lost_event(const JfrTicks &time, traceid tid, s4 lost_samples) {
  if (!EventCPUTimeSamplesLost::is_enabled()) {
    return;
  }
  EventCPUTimeSamplesLost event(UNTIMED);
  event.set_starttime(time);
  event.set_lostSamples(lost_samples);
  event.set_eventThread(tid);
  event.commit();
}

void JfrCPUSamplerThread::post_run() {
  this->NonJavaThread::post_run();
  delete this;
}

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
lostSamples int Lost Samples
eventThread Thread Thread

Examples 3
Example event data values and properties
eventThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
main
javaThreadId long
3
osName string
main
osThreadId long
5014
virtual boolean
false
lostSamples int
1
startTime long: millis
3994398549
Example event data values and properties
eventThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Executor task launch worker for task 2.0 in stage 47.0 (TID 184)
javaThreadId long
1733
osName string
Executor task launch worker for task 2.0 in stage 47.0 (TID 184)
osThreadId long
4650
virtual boolean
false
lostSamples int
3
startTime long: millis
453620412421
Example event data values and properties
eventThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Executor task launch worker for task 2.0 in stage 38.0 (TID 148)
javaThreadId long
1712
osName string
Executor task launch worker for task 2.0 in stage 38.0 (TID 148)
osThreadId long
4235
virtual boolean
false
lostSamples int
4
startTime long: millis
449867438634

JVM: Runtime

ContinuationFreeze

experimental startTime duration eventThread stackTrace 19 21 25 27 28

Category: Java Virtual Machine / Runtime

Invocation of Continuation.yield()

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/continuationFreezeThaw.cpp:

  DEBUG_ONLY(log_preempt_after_freeze(cont);)
  return freeze_epilog(cont);
}

template<typename ConfigT, bool preempt>
static inline freeze_result freeze_internal(JavaThread* current, intptr_t* const sp) {
  assert(!current->has_pending_exception(), "");

#ifdef ASSERT
  log_trace(continuations)("~~~~ freeze sp: " INTPTR_FORMAT "JavaThread: " INTPTR_FORMAT, p2i(current->last_continuation()->entry_sp()), p2i(current));
  log_frames(current);
#endif

  CONT_JFR_ONLY(EventContinuationFreeze event;)

  ContinuationEntry* entry = current->last_continuation();

  oop oopCont = entry->cont_oop(current);
  assert(oopCont == current->last_continuation()->cont_oop(current), "");
  assert(ContinuationEntry::assert_entry_frame_laid_out(current), "");

  verify_continuation(oopCont);
  ContinuationWrapper cont(current, oopCont);
  log_develop_debug(continuations)("FREEZE #" INTPTR_FORMAT " " INTPTR_FORMAT, cont.hash(), p2i((oopDesc*)oopCont));

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default false false 0 ms
profiling false false 0 ms

Event fields with their types and descriptions
Field Type Description
carrierThread Thread Carrier Thread Thread enlisted as a carrier
continuationClass Class Continuation Class
interpretedFrames ushort Interpreted Frames
size ushort: bytes Stack Size

ContinuationThaw

experimental startTime duration eventThread stackTrace 19 21 25 27 28

Category: Java Virtual Machine / Runtime

Invocation of Continuation.run() on a started continuation

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/continuationFreezeThaw.cpp:

    " to: " INTPTR_FORMAT " top_address: " INTPTR_FORMAT, p2i(f.sp() - frame::metadata_words), p2i(_top_stack_address));
  ContinuationHelper::Frame::patch_pc(f, f.raw_pc()); // in case we want to deopt the frame in a full transition, this is checked.
  ContinuationHelper::push_pd(f);

  assert(ContinuationHelper::Frame::assert_frame_laid_out(f), "");
}

// returns new top sp
// called after preparations (stack overflow check and making room)
template<typename ConfigT>
static inline intptr_t* thaw_internal(JavaThread* thread, const Continuation::thaw_kind kind) {
  assert(thread == JavaThread::current(), "Must be current thread");

  CONT_JFR_ONLY(EventContinuationThaw event;)

  log_develop_trace(continuations)("~~~~ thaw kind: %d sp: " INTPTR_FORMAT, kind, p2i(thread->last_continuation()->entry_sp()));

  ContinuationEntry* entry = thread->last_continuation();
  assert(entry != nullptr, "");
  oop oopCont = entry->cont_oop(thread);

  assert(!jdk_internal_vm_Continuation::done(oopCont), "");
  assert(oopCont == get_continuation(thread), "");
  verify_continuation(oopCont);

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default false false 0 ms
profiling false false 0 ms

Event fields with their types and descriptions
Field Type Description
carrierThread Thread Carrier Thread Thread enlisted as a carrier
continuationClass Class Continuation Class
interpretedFrames ushort Interpreted Frames
size ushort: bytes Stack Size

ContinuationFreezeFast

experimental startTime eventThread 20 21 25 27 28

Category: Java Virtual Machine / Runtime

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/continuationFreezeThaw.cpp:

  log_develop_trace(continuations)("FREEZE CHUNK #" INTPTR_FORMAT " (young)", _cont.hash());
  LogTarget(Trace, continuations) lt;
  if (lt.develop_is_enabled()) {
    LogStream ls(lt);
    chunk->print_on(true, &ls);
  }

  // Verification
  assert(_cont.chunk_invariant(), "");
  chunk->verify();

#if CONT_JFR
  EventContinuationFreezeFast e;
  if (e.should_commit()) {
    e.set_id(cast_from_oop<u8>(chunk));
    DEBUG_ONLY(e.set_allocate(chunk_is_allocated);)
    e.set_size(cont_size() << LogBytesPerWord);
    e.commit();
  }
#endif
}

NOINLINE freeze_result FreezeBase::freeze_slow() {
#ifdef ASSERT

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling false

Event fields with their types and descriptions
Field Type Description
id ulong Continuation ID
size uint Size
allocate boolean Allocated New

ContinuationFreezeSlow

experimental startTime eventThread 20 21 25 27 28

Category: Java Virtual Machine / Runtime

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/continuationFreezeThaw.cpp:

NOINLINE freeze_result FreezeBase::freeze_slow() {
#ifdef ASSERT
  ResourceMark rm;
#endif

  log_develop_trace(continuations)("freeze_slow  #" INTPTR_FORMAT, _cont.hash());
  assert(_thread->thread_state() == _thread_in_vm || _thread->thread_state() == _thread_blocked, "");

#if CONT_JFR
  EventContinuationFreezeSlow e;
  if (e.should_commit()) {
    e.set_id(cast_from_oop<u8>(_cont.continuation()));
    e.commit();
  }
#endif

  init_rest();

  HandleMark hm(Thread::current());

  frame f = freeze_start_frame();

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling false

Event fields with their types and descriptions
Field Type Description
id ulong Continuation ID

ContinuationThawFast

experimental startTime eventThread 20 21 25 27 28

Category: Java Virtual Machine / Runtime

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/continuationFreezeThaw.cpp:

  log_develop_trace(continuations)("setting entry argsize: %d", _cont.argsize());
  assert(rs.bottom_sp() == _cont.entry()->bottom_sender_sp(), "");

  // install the return barrier if not last frame, or the entry's pc if last
  patch_return(rs.bottom_sp(), is_last);

  // insert the back links from callee to caller frames
  patch_caller_links(rs.top(), rs.top() + rs.total_size());

  assert(is_last == _cont.is_empty(), "");
  assert(_cont.chunk_invariant(), "");

#if CONT_JFR
  EventContinuationThawFast e;
  if (e.should_commit()) {
    e.set_id(cast_from_oop<u8>(chunk));
    e.set_size(thaw_size << LogBytesPerWord);
    e.set_full(!partial);
    e.commit();
  }
#endif

#ifdef ASSERT
  if (LoomDeoptAfterThaw) {
    frame top(rs.sp());

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling false

Event fields with their types and descriptions
Field Type Description
id ulong Continuation ID
full boolean Full
size uint Size

ContinuationThawSlow

experimental startTime eventThread 20 21 25 27 28

Category: Java Virtual Machine / Runtime

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/continuationFreezeThaw.cpp:

  LogTarget(Trace, continuations) lt;
  if (lt.develop_is_enabled()) {
    LogStream ls(lt);
    ls.print_cr("thaw slow return_barrier: %d " INTPTR_FORMAT, kind, p2i(chunk));
    chunk->print_on(true, &ls);
  }

#if CONT_JFR
  EventContinuationThawSlow e;
  if (e.should_commit()) {
    e.set_id(cast_from_oop<u8>(_cont.continuation()));
    e.commit();
  }
#endif

  DEBUG_ONLY(_frames = 0;)
  _align_size = 0;
  int num_frames = kind == Continuation::thaw_top ? 2 : 1;

  _stream = StackChunkFrameStream<ChunkFrames::Mixed>(chunk);

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling false

Event fields with their types and descriptions
Field Type Description
id ulong Continuation ID

ReservedStackActivation

default profiling startTime eventThread stackTrace 11 17 21 25 27 28

Category: Java Virtual Machine / Runtime

Activation of Reserved Stack Area caused by stack overflow with ReservedStackAccess annotated method in call stack

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/sharedRuntime.cpp:

        for (ScopeDesc *sd = nm->scope_desc_near(fr.pc()); sd != nullptr; sd = sd->sender()) {
          method = sd->method();
          if (method != nullptr && method->has_reserved_stack_access()) {
            found = true;
          }
        }
      }
    }
    if (found) {
      activation = fr;
      warning("Potentially dangerous stack overflow in "
              "ReservedStackAccess annotated method %s [%d]",
              method->name_and_sig_as_C_string(), count++);
      EventReservedStackActivation event;
      if (event.should_commit()) {
        event.set_method(method);
        event.commit();
      }
    }
  }
  return activation;
}

void SharedRuntime::on_slowpath_allocation_exit(JavaThread* current) {
  // After any safepoint, just before going back to compiled code,

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default true true
profiling true true

Event fields with their types and descriptions
Field Type Description
method Method Java Method

SafepointBegin

default profiling startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / Runtime / Safepoint

Safepointing begin

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/safepoint.cpp:

static void post_safepoint_begin_event(EventSafepointBegin& event,
                                       uint64_t safepoint_id,
                                       int thread_count,
                                       int critical_thread_count) {
  if (event.should_commit()) {
    event.set_safepointId(safepoint_id);
    event.set_totalThreadCount(thread_count);
    event.set_jniCriticalThreadCount(critical_thread_count);
    event.commit();
  }
}

src/hotspot/share/runtime/safepoint.cpp:

    SafepointMechanism::arm_local_poll(cur);
  }
  if (UseSystemMemoryBarrier) {
    SystemMemoryBarrier::emit(); // storestore|storeload, global state -> local state
  } else {
    OrderAccess::fence(); // storestore|storeload, global state -> local state
  }
}

// Roll all threads forward to a safepoint and suspend them all
void SafepointSynchronize::begin() {
  assert(Thread::current()->is_VM_thread(), "Only VM thread may execute a safepoint");

  EventSafepointBegin begin_event;
  SafepointTracing::begin(VMThread::vm_op_type());

  log_trace(safepoint)("Suspending GC threads");
  Universe::heap()->safepoint_synchronize_begin();

  // By getting the Threads_lock, we assure that no threads are about to start or
  // exit. It is released again in SafepointSynchronize::end().
  log_trace(safepoint)("Blocking threads from starting/exiting");
  Threads_lock->lock();

  assert( _state == _not_synchronized, "trying to safepoint synchronize with wrong state");

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 10 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
safepointId ulong Safepoint Identifier
totalThreadCount int Total Threads The total number of threads at the start of safe point
jniCriticalThreadCount int JNI Critical Threads The number of threads in JNI critical sections

Examples 3
Example event data values and properties
jniCriticalThreadCount int
0
safepointId ulong
21
startTime long: millis
777360519
totalThreadCount int
25
Example event data values and properties
jniCriticalThreadCount int
0
safepointId ulong
570
startTime long: millis
498757324745
totalThreadCount int
75
Example event data values and properties
jniCriticalThreadCount int
0
safepointId ulong
1577
startTime long: millis
456901972545
totalThreadCount int
299

SafepointStateSynchronization

startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / Runtime / Safepoint

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Synchronize run state of threads

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/safepoint.cpp:

static void post_safepoint_begin_event(EventSafepointBegin& event,
                                       uint64_t safepoint_id,
                                       int thread_count,
                                       int critical_thread_count) {
  if (event.should_commit()) {
    event.set_safepointId(safepoint_id);
    event.set_totalThreadCount(thread_count);
    event.set_jniCriticalThreadCount(critical_thread_count);
    event.commit();
  }
}


static void post_safepoint_synchronize_event(EventSafepointStateSynchronization& event,
                                             uint64_t safepoint_id,
                                             int initial_number_of_threads,
                                             int threads_waiting_to_block,
                                             int iterations) {
  if (event.should_commit()) {
    event.set_safepointId(safepoint_id);
    event.set_initialThreadCount(initial_number_of_threads);
    event.set_runningThreadCount(threads_waiting_to_block);
    event.set_iterations(checked_cast<u4>(iterations));
    event.commit();
  }

src/hotspot/share/runtime/safepoint.cpp:

  _current_jni_active_count = 0;

  // Set number of threads to wait for
  _waiting_to_block = nof_threads;

  jlong safepoint_limit_time = 0;
  if (SafepointTimeout) {
    // Set the limit time, so that it can be compared to see if this has taken
    // too long to complete.
    safepoint_limit_time = SafepointTracing::start_of_safepoint() + (jlong)(SafepointTimeoutDelay * NANOSECS_PER_MILLISEC);
    timeout_error_printed = false;
  }

  EventSafepointStateSynchronization sync_event;
  int initial_running = 0;

  // Arms the safepoint, _current_jni_active_count and _waiting_to_block must be set before.
  log_trace(safepoint)("Arming safepoint using %s wait barrier", _wait_barrier->description());
  arm_safepoint();

  // Will spin until all threads are safe.
  int iterations = synchronize_threads(safepoint_limit_time, nof_threads, &initial_running);
  assert(_waiting_to_block == 0, "No thread should be running");

#ifndef PRODUCT

Event configuration settings across JFR profiles
Configuration enabled threshold
default false 10 ms
profiling false 0 ms

Event fields with their types and descriptions
Field Type Description
safepointId ulong Safepoint Identifier
initialThreadCount int Initial Threads The number of threads running at the beginning of state check
runningThreadCount int Running Threads The number of threads still running
iterations int Iterations Number of state check iterations

Examples 3
Example event data values and properties
initialThreadCount int
0
iterations int
1
runningThreadCount int
0
safepointId ulong
1639
startTime long: millis
468741440786
Example event data values and properties
initialThreadCount int
0
iterations int
1
runningThreadCount int
0
safepointId ulong
85
startTime long: millis
2050856473
Example event data values and properties
initialThreadCount int
3
iterations int
3
runningThreadCount int
0
safepointId ulong
523
startTime long: millis
459231712993

SafepointEnd

startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / Runtime / Safepoint

Safepointing end

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/safepoint.cpp:

                                             uint64_t safepoint_id,
                                             int initial_number_of_threads,
                                             int threads_waiting_to_block,
                                             int iterations) {
  if (event.should_commit()) {
    event.set_safepointId(safepoint_id);
    event.set_initialThreadCount(initial_number_of_threads);
    event.set_runningThreadCount(threads_waiting_to_block);
    event.set_iterations(checked_cast<u4>(iterations));
    event.commit();
  }
}

static void post_safepoint_end_event(EventSafepointEnd& event, uint64_t safepoint_id) {
  if (event.should_commit()) {
    event.set_safepointId(safepoint_id);
    event.commit();
  }
}

// SafepointCheck
SafepointStateTracker::SafepointStateTracker(uint64_t safepoint_id, bool at_safepoint)
  : _safepoint_id(safepoint_id), _at_safepoint(at_safepoint) {}

bool SafepointStateTracker::safepoint_state_changed() {

src/hotspot/share/runtime/safepoint.cpp:

  // Release threads lock, so threads can be created/destroyed again.
  Threads_lock->unlock();

  // Wake threads after local state is correctly set.
  _wait_barrier->disarm();
}

// Wake up all threads, so they are ready to resume execution after the safepoint
// operation has been carried out
void SafepointSynchronize::end() {
  assert(Threads_lock->owned_by_self(), "must hold Threads_lock");
  SafepointTracing::leave();

  EventSafepointEnd event;
  assert(Thread::current()->is_VM_thread(), "Only VM thread can execute a safepoint");

  log_trace(safepoint)("Disarming safepoint");
  disarm_safepoint();

  log_trace(safepoint)("Resuming GC threads");
  Universe::heap()->safepoint_synchronize_end();

  SafepointTracing::end();

  post_safepoint_end_event(event, safepoint_id());

Event configuration settings across JFR profiles
Configuration enabled threshold
default false 10 ms
profiling false 0 ms

Event fields with their types and descriptions
Field Type Description
safepointId ulong Safepoint Identifier

Examples 3
Example event data values and properties
safepointId ulong
19
startTime long: millis
710141675
Example event data values and properties
safepointId ulong
1604
startTime long: millis
462135844632
Example event data values and properties
safepointId ulong
504
startTime long: millis
450544834486

SafepointLatency

throttle startTime duration eventThread stackTrace 25 27 28

Category: Java Virtual Machine / Runtime / Safepoint

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

The delay for a thread to reach its next safepoint poll instruction after receiving an asynchronous sampling interrupt

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/sampling/jfrThreadSampling.cpp:

static inline void send_sample_event(const JfrTicks& start_time, const JfrTicks& end_time, traceid sid, traceid tid) {
  EventType event(UNTIMED);
  event.set_starttime(start_time);
  event.set_endtime(end_time);
  event.set_sampledThread(tid);
  event.set_state(static_cast<u8>(JavaThreadStatus::RUNNABLE));
  event.set_stackTrace(sid);
  event.commit();
}

static inline void send_safepoint_latency_event(const JfrSampleRequest& request, const JfrTicks& end_time, traceid sid, const JavaThread* jt) {
  assert(jt != nullptr, "invariant");
  assert(!jt->jfr_thread_local()->has_cached_stack_trace(), "invariant");
  EventSafepointLatency event(UNTIMED);
  event.set_starttime(request._sample_ticks);
  event.set_endtime(end_time);
  if (event.should_commit()) {
    event.set_threadState(_thread_in_Java);
    jt->jfr_thread_local()->set_cached_stack_trace_id(sid);
    event.commit();
    jt->jfr_thread_local()->clear_cached_stack_trace();
  }
}

static inline bool is_interpreter(const JfrSampleRequest& request) {

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold throttle
default false true 0 ms off
profiling false false 0 ms off

Event fields with their types and descriptions
Field Type Description
threadState VMThreadState VM Thread State

Examples 3
Example event data values and properties
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
19
lineNumber int
39
method Method
descriptor string
(I)V
hidden boolean
false
modifiers int
17
name string
ensureSize
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.4.1
name string
java/net
hidden boolean
false
modifiers int
1025
name string
scala/collection/mutable/ArrayBuilder
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
scala/collection/mutable
type FrameType
Inlined
truncated boolean
false
startTime long: millis
453720760690
threadState VMThreadState
_thread_in_Java
Example event data values and properties
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
8
lineNumber int
166
method Method
descriptor string
(Ljava/lang/Object;Lbreeze/generic/UFunc$InPlaceImpl2;)Ljava/lang/Object;
hidden boolean
false
modifiers int
1
name string
$colon$plus$eq
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.4.1
name string
java/net
hidden boolean
false
modifiers int
1537
name string
breeze/linalg/NumericOps
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
breeze/linalg
type FrameType
Inlined
truncated boolean
false
startTime long: millis
448271430019
threadState VMThreadState
_thread_in_Java
Example event data values and properties
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
2
lineNumber int
164
method Method
descriptor string
([J[J[J)V
hidden boolean
false
modifiers int
4
name string
mult
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
sun/security/util/math/intpoly/MontgomeryIntegerPolynomialP256
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.4.1
name string
sun/security/util/math/intpoly
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
931351800
threadState VMThreadState
_thread_in_Java

ExecuteVMOperation

default profiling startTime duration eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / Runtime

Execution of a VM Operation

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/vmThread.cpp:

  // Wait until VM thread is terminated
  // Note: it should be OK to use Terminator_lock here. But this is called
  // at a very delicate time (VM shutdown) and we are operating in non- VM
  // thread at Safepoint. It's safer to not share lock with other threads.
  {
    MonitorLocker ml(_terminate_lock, Mutex::_no_safepoint_check_flag);
    while (!VMThread::is_terminated()) {
      ml.wait();
    }
  }
}

static void post_vm_operation_event(EventExecuteVMOperation* event, VM_Operation* op) {
  assert(event != nullptr, "invariant");
  assert(op != nullptr, "invariant");
  const bool evaluate_at_safepoint = op->evaluate_at_safepoint();
  event->set_operation(op->type());
  event->set_safepoint(evaluate_at_safepoint);
  event->set_blocking(true);
  event->set_caller(JFR_THREAD_ID(op->calling_thread()));
  event->set_safepointId(evaluate_at_safepoint ? SafepointSynchronize::safepoint_id() : 0);
  event->commit();
}

void VMThread::evaluate_operation(VM_Operation* op) {
  ResourceMark rm;

  {
    PerfTraceTime vm_op_timer(perf_accumulated_vm_operation_time());
    HOTSPOT_VMOPS_BEGIN(
                     (char*) op->name(), strlen(op->name()),
                     op->evaluate_at_safepoint() ? 0 : 1);

    EventExecuteVMOperation event;
    VMThreadCPUTimeScope CPUTimeScope(this, op->is_gc_operation());
    op->evaluate();
    if (event.should_commit()) {
      post_vm_operation_event(&event, op);
    }

    HOTSPOT_VMOPS_END(
                     (char*) op->name(), strlen(op->name()),
                     op->evaluate_at_safepoint() ? 0 : 1);
  }
}

Event configuration settings across JFR profiles
Configuration enabled threshold
default true 10 ms
profiling true 0 ms

Event fields with their types and descriptions
Field Type Description
operation VMOperationType Operation
safepoint boolean At Safepoint If the operation occurred at a safepoint
blocking boolean Caller Blocked If the calling thread was blocked until the operation was complete
caller Thread Caller Thread requesting operation. If non-blocking, will be set to 0 indicating thread is unknown
safepointId ulong Safepoint Identifier The safepoint (if any) under which this operation was completed

Examples 3
Example event data values and properties
blocking boolean
true
caller Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Executor task launch worker for task 1.0 in stage 47.0 (TID 183)
javaThreadId long
1732
osName string
Executor task launch worker for task 1.0 in stage 47.0 (TID 183)
osThreadId long
4649
virtual boolean
false
operation VMOperationType
G1TryInitiateConcMark
safepoint boolean
true
safepointId ulong
1565
startTime long: millis
454982135094
Example event data values and properties
blocking boolean
true
caller Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
pool-1-thread-3
javaThreadId long
36
osName string
pool-1-thread-3
osThreadId long
5046
virtual boolean
false
operation VMOperationType
G1CollectForAllocation
safepoint boolean
true
safepointId ulong
25
startTime long: millis
978713920
Example event data values and properties
blocking boolean
true
caller Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
JFR Periodic Tasks
javaThreadId long
19
osName string
JFR Periodic Tasks
osThreadId long
2167
virtual boolean
false
operation VMOperationType
GC_HeapInspection
safepoint boolean
true
safepointId ulong
532
startTime long: millis
470826663875

Shutdown

default profiling startTime eventThread stackTrace 11 17 21 25 27 28

Category: Java Virtual Machine / Runtime

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

JVM shutting down

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:

JVM_ENTRY(jstring, JVM_GetTemporaryDirectory(JNIEnv *env))
  HandleMark hm(THREAD);
  const char* temp_dir = os::get_temp_directory();
  Handle h = java_lang_String::create_from_platform_dependent_str(temp_dir, CHECK_NULL);
  return (jstring) JNIHandles::make_local(THREAD, h());
JVM_END


// java.lang.Runtime /////////////////////////////////////////////////////////////////////////

extern volatile jint vm_created;

JVM_ENTRY_NO_ENV(void, JVM_BeforeHalt())
  EventShutdown event;
  if (event.should_commit()) {
    event.set_reason("Shutdown requested from Java");
    event.commit();
  }
JVM_END


JVM_ENTRY_NO_ENV(void, JVM_Halt(jint code))
  before_exit(thread, true);
  vm_exit(code);
JVM_END

src/hotspot/share/runtime/threads.cpp:

  // Wait until we are the last non-daemon thread to execute, or
  // if we are a daemon then wait until the last non-daemon thread has
  // executed.
  bool daemon = java_lang_Thread::is_daemon(thread->threadObj());
  int expected = daemon ? 0 : 1;
  {
    MonitorLocker nu(Threads_lock);
    while (Threads::number_of_non_daemon_threads() > expected)
      // This wait should make safepoint checks, wait without a timeout.
      nu.wait(0);
  }

  EventShutdown e;
  if (e.should_commit()) {
    e.set_reason("No remaining non-daemon Java threads");
    e.commit();
  }

  // Hang forever on exit if we are reporting an error.
  if (ShowMessageBoxOnError && VMError::is_error_reported()) {
    os::infinite_sleep();
  }
  os::wait_for_keypress_at_exit();

src/hotspot/share/jfr/recorder/repository/jfrEmergencyDump.cpp:

  void transition_to_native() {
    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;

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default true true
profiling true true

Event fields with their types and descriptions
Field Type Description
reason string Reason Reason for JVM shutdown

Examples 3
Example event data values and properties
reason string
No remaining non-daemon Java threads
stackTrace StackTrace
null
startTime long: millis
510390931826
Example event data values and properties
reason string
No remaining non-daemon Java threads
stackTrace StackTrace
null
startTime long: millis
25440309651
Example event data values and properties
reason string
No remaining non-daemon Java threads
stackTrace StackTrace
null
startTime long: millis
500177444641

SymbolTableStatistics

profiling startTime duration every chunk 13 17 21 25 27 28

Category: Java Virtual Machine / Runtime / Tables

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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_entryCount(statistics._number_of_entries);
  event.set_totalFootprint(statistics._total_footprint);
  event.set_bucketCountMaximum(statistics._maximum_bucket_size);
  event.set_bucketCountAverage(statistics._average_bucket_size);
  event.set_bucketCountVariance(statistics._variance_of_bucket_size);
  event.set_bucketCountStandardDeviation(statistics._stddev_of_bucket_size);
  event.set_insertionRate(statistics._add_rate);
  event.set_removalRate(statistics._remove_rate);
  event.commit();
}

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 configuration settings across JFR profiles
Configuration enabled period
default false 10 s
profiling true 10 s

Event fields with their types and descriptions
Field Type Description
bucketCount ulong Bucket Count Number of buckets
entryCount ulong Entry Count Number of all entries
totalFootprint ulong: bytes Total Footprint Total memory footprint (the table itself plus all of the entries)
bucketCountMaximum ulong Maximum Bucket Count The maximum bucket length (entries in a single bucket)
bucketCountAverage float Average Bucket Count The average bucket length
bucketCountVariance float Bucket Count Variance How far bucket lengths are spread out from their average value
bucketCountStandardDeviation float Bucket Count Standard Deviation How far bucket lengths are spread out from their mean (expected) value
insertionRate float Insertion Rate How many items were added since last event (per second)
removalRate float Removal Rate How many items were removed since last event (per second)

Examples 3
Example event data values and properties
bucketCount ulong
131072
bucketCountAverage float
5.2724075
bucketCountMaximum ulong
17
bucketCountStandardDeviation float
2.3010743
bucketCountVariance float
5.2949424
entryCount ulong
691065
insertionRate float
805.20953
removalRate float
1.3502675
startTime long: millis
499092773380
totalFootprint ulong: bytes
75171784
Example event data values and properties
bucketCount ulong
131072
bucketCountAverage float
4.9332733
bucketCountMaximum ulong
17
bucketCountStandardDeviation float
2.226176
bucketCountVariance float
4.9558597
entryCount ulong
646614
insertionRate float
973.59607
removalRate float
4163.1953
startTime long: millis
495898975221
totalFootprint ulong: bytes
71816936
Example event data values and properties
bucketCount ulong
32768
bucketCountAverage float
1.1372375
bucketCountMaximum ulong
7
bucketCountStandardDeviation float
1.0593047
bucketCountVariance float
1.1221266
entryCount ulong
37265
insertionRate float
41.447773
removalRate float
41.54507
startTime long: millis
20865406401
totalFootprint ulong: bytes
2451768

StringTableStatistics

profiling startTime duration every chunk 13 17 21 25 27 28

Category: Java Virtual Machine / Runtime / Tables

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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_bucketCountStandardDeviation(statistics._stddev_of_bucket_size);
  event.set_insertionRate(statistics._add_rate);
  event.set_removalRate(statistics._remove_rate);
  event.commit();
}

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 configuration settings across JFR profiles
Configuration enabled period
default false 10 s
profiling true 10 s

Event fields with their types and descriptions
Field Type Description
bucketCount ulong Bucket Count Number of buckets
entryCount ulong Entry Count Number of all entries
totalFootprint ulong: bytes Total Footprint Total memory footprint (the table itself plus all of the entries)
bucketCountMaximum ulong Maximum Bucket Count The maximum bucket length (entries in a single bucket)
bucketCountAverage float Average Bucket Count The average bucket length
bucketCountVariance float Bucket Count Variance How far bucket lengths are spread out from their average value
bucketCountStandardDeviation float Bucket Count Standard Deviation How far bucket lengths are spread out from their mean (expected) value
insertionRate float Insertion Rate How many items were added since last event (per second)
removalRate float Removal Rate How many items were removed since last event (per second)

Examples 3
Example event data values and properties
bucketCount ulong
65536
bucketCountAverage float
1.9160461
bucketCountMaximum ulong
12
bucketCountStandardDeviation float
1.38056
bucketCountVariance float
1.9059461
entryCount ulong
125570
insertionRate float
588.5212
removalRate float
11.693934
startTime long: millis
488015734107
totalFootprint ulong: bytes
13601264
Example event data values and properties
bucketCount ulong
131072
bucketCountAverage float
0.90237427
bucketCountMaximum ulong
8
bucketCountStandardDeviation float
0.9542561
bucketCountVariance float
0.9106047
entryCount ulong
118276
insertionRate float
466.37143
removalRate float
36.904026
startTime long: millis
495959938046
totalFootprint ulong: bytes
13518304
Example event data values and properties
bucketCount ulong
65536
bucketCountAverage float
0.09992981
bucketCountMaximum ulong
3
bucketCountStandardDeviation float
0.3163474
bucketCountVariance float
0.10007568
entryCount ulong
6549
insertionRate float
23.93327
removalRate float
0.09728972
startTime long: millis
20867505968
totalFootprint ulong: bytes
1039912

ThreadDump

default profiling startTime duration every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Runtime

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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:

/*
 * This is left empty on purpose, having ExecutionSample as a requestable
 * is a way of getting the period. The period is passed to ThreadSampling::update_period.
 * Implementation in periodic/sampling/jfrThreadSampler.cpp.
 */
TRACE_REQUEST_FUNC(ExecutionSample) {
}
TRACE_REQUEST_FUNC(NativeMethodSample) {
}

TRACE_REQUEST_FUNC(ThreadDump) {
  ResourceMark rm;
  EventThreadDump event;
  event.set_result(JfrDcmdEvent::thread_dump());
  event.commit();
}

static int _native_library_callback(const char* name, address base, address top, void *param) {
  EventNativeLibrary event(UNTIMED);
  event.set_name(name);
  event.set_baseAddress((u8)base);
  event.set_topAddress((u8)top);
  event.set_starttime(*(JfrTicks*)param);
  event.set_endtime(*(JfrTicks*) param);

Event configuration settings across JFR profiles
Configuration enabled period
default true everyChunk
profiling true 60 s

Event fields with their types and descriptions
Field Type Description
result string Thread Dump

Examples 3
Example event data values and properties
result string
2026-09-08 12:52:38 Full thread dump OpenJDK 64-Bit Server VM (25.0.4.1+1-LTS mixed mode, sharing): Threads class SMR info: _java_thread_list=0x00007fe407b01db0, length=77, elements={ 0x00007fe43c053c00, 0x00007fe43c141b20, 0x00007fe43c143870, 0x00007fe43c1457b0, 0x00007fe43c1474c0, 0x00007fe43c148
startTime long: millis
509506793197
Example event data values and properties
result string
2026-09-08 12:53:03 Full thread dump OpenJDK 64-Bit Server VM (25.0.4.1+1-LTS mixed mode, sharing): Threads class SMR info: _java_thread_list=0x00007fa9c9aba9b0, length=25, elements={ 0x00007fa9c8055900, 0x00007fa9c8154950, 0x00007fa9c8156810, 0x00007fa9c8158c80, 0x00007fa9c815abc0, 0x00007fa9c815c
startTime long: millis
20867510526
Example event data values and properties
result string
2026-09-13 00:33:55 Full thread dump OpenJDK 64-Bit Server VM (25.0.4.1+1-LTS mixed mode, sharing): Threads class SMR info: _java_thread_list=0x000055ffb54d2f60, length=52, elements={ 0x00007f7b84053be0, 0x00007f7b840ca9b0, 0x00007f7b840cc5a0, 0x00007f7b840ce5e0, 0x00007f7b840d02c0, 0x00007f7b840d1
startTime long: millis
484226807537

NativeLibrary

default profiling startTime every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Runtime

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Information about a dynamic library or other native image loaded by the JVM process

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(ExecutionSample) {
}
TRACE_REQUEST_FUNC(NativeMethodSample) {
}

TRACE_REQUEST_FUNC(ThreadDump) {
  ResourceMark rm;
  EventThreadDump event;
  event.set_result(JfrDcmdEvent::thread_dump());
  event.commit();
}

static int _native_library_callback(const char* name, address base, address top, void *param) {
  EventNativeLibrary event(UNTIMED);
  event.set_name(name);
  event.set_baseAddress((u8)base);
  event.set_topAddress((u8)top);
  event.set_starttime(*(JfrTicks*)param);
  event.set_endtime(*(JfrTicks*) param);
  event.commit();
  return 0;
}

TRACE_REQUEST_FUNC(NativeLibrary) {
  JfrTicks ts= JfrTicks::now();

Event configuration settings across JFR profiles
Configuration enabled period
default true everyChunk
profiling true everyChunk

Event fields with their types and descriptions
Field Type Description
name string Name
baseAddress ulong: address Base Address Starting address of the module
topAddress ulong: address Top Address Ending address of the module, if available

Examples 3
Example event data values and properties
baseAddress ulong: address
140166974930944
name string
/home/runner/.cache/JNA/temp/jna18173573244850262747.tmp
startTime long: millis
449445122662
topAddress ulong: address
140166979125248
Example event data values and properties
baseAddress ulong: address
140618381914112
name string
/opt/hostedtoolcache/Java_SapMachine_jdk/25.0.4-1/x64/bin/../lib/libjli.so
startTime long: millis
456686479618
topAddress ulong: address
140618381983744
Example event data values and properties
baseAddress ulong: address
140367328444416
name string
/lib/x86_64-linux-gnu/libc.so.6
startTime long: millis
8025053867
topAddress ulong: address
140367330615296

NativeLibraryLoad

default profiling startTime duration eventThread stackTrace 22 25 27 28

Category: Java Virtual Machine / Runtime

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Information about a dynamic library or other native image load operation

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/jfrNativeLibraryLoadEvent.cpp:

/*
 * The JfrTicks value is heap allocated inside an object of type JfrTicksWrapper.
 * The reason is that a raw value object of type Ticks is not possible at this
 * location because this code runs as part of early VM bootstrap, at a moment
 * where Ticks support is not yet initialized.
 */
template <typename EventType>
static inline JfrTicksWrapper* allocate_start_time() {
  return EventType::is_enabled() ? new JfrTicksWrapper() : nullptr;
}

NativeLibraryLoadEvent::NativeLibraryLoadEvent(const char* name, void** result) : JfrNativeLibraryEventBase(name), _result(result), _fp_env_correction_attempt(false), _fp_env_correction_success(false) {
  assert(_result != nullptr, "invariant");
  _start_time = allocate_start_time<EventNativeLibraryLoad>();
}

bool NativeLibraryLoadEvent::success() const {
  return *_result != nullptr;
}

NativeLibraryUnloadEvent::NativeLibraryUnloadEvent(const char* name) : JfrNativeLibraryEventBase(name), _result(false) {
  _start_time = allocate_start_time<EventNativeLibraryUnload>();
}

bool NativeLibraryUnloadEvent::success() const {
  return _result;
}

void NativeLibraryUnloadEvent::set_result(bool result) {
  _result = result;
}

static void set_additional_data(EventNativeLibraryLoad& event, const NativeLibraryLoadEvent& helper) {
  event.set_fpuCorrectionAttempt(helper.get_fp_env_correction_attempt());
  event.set_fpuCorrectionSuccess(helper.get_fp_env_correction_success());
}

static void set_additional_data(EventNativeLibraryUnload& event, const NativeLibraryUnloadEvent& helper) {
  // no additional entries atm. for the unload event
}

template <typename EventType, typename HelperType>
static void commit(const HelperType& helper) {
  if (!helper.has_start_time()) {

src/hotspot/share/jfr/support/jfrNativeLibraryLoadEvent.cpp:

  assert(thread != nullptr, "invariant");
  if (thread->is_Java_thread()) {
    JavaThread* jt = JavaThread::cast(thread);
    if (jt->thread_state() == _thread_in_native) {
      // For a JavaThread to take a JFR stacktrace, it must be in _thread_in_vm. Can safepoint here.
      MACOS_AARCH64_ONLY(ThreadWXEnable __wx(WXWrite, jt));
      ThreadInVMfromNative transition(jt);
      event.commit();
      return;
    }
    // If a thread comes here still _thread_in_Java, which can happen for example
    // when loading the disassembler library in response to traps in JIT code - all is ok.
    // Since there is no ljf, an event will be committed without a stacktrace.
  }
  event.commit();
}

NativeLibraryLoadEvent::~NativeLibraryLoadEvent() {
  commit<EventNativeLibraryLoad>(*this);
}

NativeLibraryUnloadEvent::~NativeLibraryUnloadEvent() {
  commit<EventNativeLibraryUnload>(*this);
}

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 0 ms
profiling true true 0 ms

Event fields with their types and descriptions
Field Type Description
name string Name
success boolean Success Success or failure of the load operation
errorMessage string Error Message In case of a load error, error description
fpuCorrectionAttempt boolean 23+ FPU Environment Correction In case of IEEE conformance issues we might reset the FP environment
fpuCorrectionSuccess boolean 23+ FPU Environment Correction Result Stores the result in the case of an FP environment correction

Examples 3
Example event data values and properties
errorMessage string
null
fpuCorrectionAttempt boolean
false
fpuCorrectionSuccess boolean
false
name string
/opt/hostedtoolcache/Java_SapMachine_jdk/25.0.4-1/x64/lib/libinstrument.so
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(Ljdk/internal/loader/NativeLibraries$NativeLibraryImpl;Ljava/lang/String;ZZ)Z
hidden boolean
false
modifiers int
266
name string
load
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
jdk/internal/loader/NativeLibraries
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.4.1
name string
jdk/internal/loader
type FrameType
Native
truncated boolean
false
startTime long: millis
555668355
success boolean
true
Example event data values and properties
errorMessage string
null
fpuCorrectionAttempt boolean
false
fpuCorrectionSuccess boolean
false
name string
/tmp/libnetty_transport_native_epoll_x86_6414095442915438556406.so
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(Ljdk/internal/loader/NativeLibraries$NativeLibraryImpl;Ljava/lang/String;ZZ)Z
hidden boolean
false
modifiers int
266
name string
load
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
jdk/internal/loader/NativeLibraries
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.4.1
name string
jdk/internal/loader
type FrameType
Native
truncated boolean
true
startTime long: millis
499328592960
success boolean
true
Example event data values and properties
errorMessage string
null
fpuCorrectionAttempt boolean
false
fpuCorrectionSuccess boolean
false
name string
/tmp/libnetty_transport_native_epoll_x86_641560986816956325075.so
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(Ljdk/internal/loader/NativeLibraries$NativeLibraryImpl;Ljava/lang/String;ZZ)Z
hidden boolean
false
modifiers int
266
name string
load
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
jdk/internal/loader/NativeLibraries
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.4.1
name string
jdk/internal/loader
type FrameType
Native
truncated boolean
true
startTime long: millis
491797530645
success boolean
true

NativeLibraryUnload

default profiling startTime duration eventThread stackTrace 22 25 27 28

Category: Java Virtual Machine / Runtime

Information about a dynamic library or other native image unload operation

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/jfrNativeLibraryLoadEvent.cpp:

static inline JfrTicksWrapper* allocate_start_time() {
  return EventType::is_enabled() ? new JfrTicksWrapper() : nullptr;
}

NativeLibraryLoadEvent::NativeLibraryLoadEvent(const char* name, void** result) : JfrNativeLibraryEventBase(name), _result(result), _fp_env_correction_attempt(false), _fp_env_correction_success(false) {
  assert(_result != nullptr, "invariant");
  _start_time = allocate_start_time<EventNativeLibraryLoad>();
}

bool NativeLibraryLoadEvent::success() const {
  return *_result != nullptr;
}

NativeLibraryUnloadEvent::NativeLibraryUnloadEvent(const char* name) : JfrNativeLibraryEventBase(name), _result(false) {
  _start_time = allocate_start_time<EventNativeLibraryUnload>();
}

bool NativeLibraryUnloadEvent::success() const {
  return _result;
}

void NativeLibraryUnloadEvent::set_result(bool result) {
  _result = result;
}

static void set_additional_data(EventNativeLibraryLoad& event, const NativeLibraryLoadEvent& helper) {
  event.set_fpuCorrectionAttempt(helper.get_fp_env_correction_attempt());
  event.set_fpuCorrectionSuccess(helper.get_fp_env_correction_success());
}

static void set_additional_data(EventNativeLibraryUnload& event, const NativeLibraryUnloadEvent& helper) {
  // no additional entries atm. for the unload event
}

template <typename EventType, typename HelperType>
static void commit(const HelperType& helper) {
  if (!helper.has_start_time()) {
    return;
  }
  EventType event(UNTIMED);
  event.set_endtime(JfrTicks::now());
  event.set_starttime(*helper.start_time());

src/hotspot/share/jfr/support/jfrNativeLibraryLoadEvent.cpp:

  assert(thread != nullptr, "invariant");
  if (thread->is_Java_thread()) {
    JavaThread* jt = JavaThread::cast(thread);
    if (jt->thread_state() == _thread_in_native) {
      // For a JavaThread to take a JFR stacktrace, it must be in _thread_in_vm. Can safepoint here.
      MACOS_AARCH64_ONLY(ThreadWXEnable __wx(WXWrite, jt));
      ThreadInVMfromNative transition(jt);
      event.commit();
      return;
    }
    // If a thread comes here still _thread_in_Java, which can happen for example
    // when loading the disassembler library in response to traps in JIT code - all is ok.
    // Since there is no ljf, an event will be committed without a stacktrace.
  }
  event.commit();
}

NativeLibraryLoadEvent::~NativeLibraryLoadEvent() {
  commit<EventNativeLibraryLoad>(*this);
}

NativeLibraryUnloadEvent::~NativeLibraryUnloadEvent() {
  commit<EventNativeLibraryUnload>(*this);
}

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 0 ms
profiling true true 0 ms

Event fields with their types and descriptions
Field Type Description
name string Name
success boolean Success Success or failure of the unload operation
errorMessage string Error Message In case of an unload error, error description

ModuleRequire

default profiling startTime every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Runtime / Modules

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

A directed edge representing a dependency

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/jfrModuleEvent.cpp:

   ModuleDependencyClosure(const ModuleEntry* module, EventFunc ef) : ModuleEventCallbackClosure(ef), _module(module) {}
   void do_module(ModuleEntry* entry);
};

class ModuleExportClosure : public ModuleEventCallbackClosure {
 private:
  const PackageEntry* const _package;
 public:
  ModuleExportClosure(const PackageEntry* pkg, EventFunc ef) : ModuleEventCallbackClosure(ef), _package(pkg) {}
  void do_module(ModuleEntry* entry);
};

static void write_module_dependency_event(const void* from_module, const ModuleEntry* to_module) {
  EventModuleRequire event(UNTIMED);
  event.set_starttime(invocation_time);
  event.set_endtime(invocation_time);
  event.set_source((const ModuleEntry*)from_module);
  event.set_requiredModule(to_module);
  event.commit();
}

static void write_module_export_event(const void* package, const ModuleEntry* qualified_export) {
  EventModuleExport event(UNTIMED);
  event.set_starttime(invocation_time);
  event.set_endtime(invocation_time);

Event configuration settings across JFR profiles
Configuration enabled period
default true endChunk
profiling true endChunk

Event fields with their types and descriptions
Field Type Description
source Module Source Module
requiredModule Module Required Module

Examples 3
Example event data values and properties
requiredModule Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.xml
name string
java.xml
version string
25.0.4.1
source Module
classLoader ClassLoader
name string
platform
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
10
name string
jdk/internal/loader/ClassLoaders$PlatformClassLoader
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.4.1
name string
jdk/internal/loader
location string
jrt:/java.sql
name string
java.sql
version string
25.0.4.1
startTime long: millis
448951600733
Example event data values and properties
requiredModule Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
source Module
classLoader ClassLoader
name string
platform
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
10
name string
jdk/internal/loader/ClassLoaders$PlatformClassLoader
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.4.1
name string
jdk/internal/loader
location string
jrt:/jdk.zipfs
name string
jdk.zipfs
version string
25.0.4.1
startTime long: millis
7832187786
Example event data values and properties
requiredModule Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
source 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.4.1
name string
jdk/internal/loader
location string
null
name string
jdk.proxy2
version string
null
startTime long: millis
454658652535

ModuleExport

profiling startTime every chunk 11 17 21 25 27 28

Category: Java Virtual Machine / Runtime / Modules

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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/jfrModuleEvent.cpp:

  void do_module(ModuleEntry* entry);
};

static void write_module_dependency_event(const void* from_module, const ModuleEntry* to_module) {
  EventModuleRequire event(UNTIMED);
  event.set_starttime(invocation_time);
  event.set_endtime(invocation_time);
  event.set_source((const ModuleEntry*)from_module);
  event.set_requiredModule(to_module);
  event.commit();
}

static void write_module_export_event(const void* package, const ModuleEntry* qualified_export) {
  EventModuleExport event(UNTIMED);
  event.set_starttime(invocation_time);
  event.set_endtime(invocation_time);
  event.set_exportedPackage((const PackageEntry*)package);
  event.set_targetModule(qualified_export);
  event.commit();
}

void ModuleDependencyClosure::do_module(ModuleEntry* to_module) {
  assert_locked_or_safepoint(Module_lock);
  assert(to_module != nullptr, "invariant");
  assert(_module != nullptr, "invariant");

Event configuration settings across JFR profiles
Configuration enabled period
default false endChunk
profiling true endChunk

Event fields with their types and descriptions
Field Type Description
exportedPackage Package Exported Package
targetModule Module Target Module Module to which the package is qualifiedly exported. If null or N/A, the package is unqualifiedly exported

Examples 3
Example event data values and properties
exportedPackage 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.4.1
name string
javax/crypto/spec
startTime long: millis
448951948567
targetModule Module
null
Example event data values and properties
exportedPackage Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.xml
name string
java.xml
version string
25.0.4.1
name string
javax/xml/catalog
startTime long: millis
7832224796
targetModule Module
null
Example event data values and properties
exportedPackage 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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
io/netty/channel/nio
startTime long: millis
454658924545
targetModule Module
null

Java Application

ThreadStart

default profiling startTime eventThread stackTrace 11 17 21 25 27 28

Category: 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/support/jfrThreadLocal.cpp:

  assert(Thread::is_starting_thread(jt), "invariant");
  assert(jt->threadObj() == nullptr, "invariant");
  assert(jt->jfr_thread_local()->_jvm_thread_id == 0, "invariant");
  jt->jfr_thread_local()->_jvm_thread_id = ThreadIdentifier::initial();
}

static void send_java_thread_start_event(JavaThread* jt) {
  assert(jt != nullptr, "invariant");
  assert(Thread::current() == jt, "invariant");
  if (!JfrJavaSupport::on_thread_start(jt)) {
    // thread is excluded
    return;
  }
  EventThreadStart event;
  traceid thread_id = JfrThreadLocal::jvm_thread_id(jt);
  assert(thread_id != 0, "invariant");
  event.set_thread(thread_id);
  event.set_parentThread(jt->jfr_thread_local()->parent_thread_id());
  event.commit();
}

void JfrThreadLocal::on_start(Thread* t) {
  JfrThreadLocal* const tl = t->jfr_thread_local();
  assert(tl != nullptr, "invariant");
  assign_thread_id(t, tl);

src/hotspot/share/jfr/support/jfrThreadLocal.cpp:

// The starter thread ensures that the startee has a valid _vm_thread_id and _contextual_id.
// This is to avoid recursion in thread assignment since accessing the java threadObj can lead
// to events being fired, a situation the starter thread can handle but not the startee.
void JfrThreadLocal::on_java_thread_start(JavaThread* starter, JavaThread* startee) {
  assert(starter != nullptr, "invariant");
  assert(startee != nullptr, "invariant");
  JfrThreadLocal* const tl = startee->jfr_thread_local();
  assign_thread_id(startee, tl);
  assert(vthread_id(startee) != 0, "invariant");
  assert(jvm_thread_id(startee) == vthread_id(startee), "invariant");
  if (JfrRecorder::is_recording() && EventThreadStart::is_enabled() && EventThreadStart::is_stacktrace_enabled()) {
    // skip level 2 to skip frames Thread.start() and Thread.start0()
    startee->jfr_thread_local()->set_cached_stack_trace_id(JfrStackTraceRepository::record(starter, 2));
  }
}

void JfrThreadLocal::release(Thread* t) {
  if (has_java_event_writer()) {
    assert(t->is_Java_thread(), "invariant");
    JfrJavaSupport::destroy_global_jni_handle(java_event_writer());
    _java_event_writer = nullptr;
  }

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default true true
profiling true true

Event fields with their types and descriptions
Field Type Description
thread Thread New Java Thread
parentThread Thread Parent Java Thread

Examples 3
Example event data values and properties
parentThread Thread
group ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
C1 CompilerThread0
javaThreadId long
20
osName string
C1 CompilerThread0
osThreadId long
2551
virtual boolean
false
stackTrace StackTrace
null
startTime long: millis
500310772091
thread Thread
group ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
C2 CompilerThread1
javaThreadId long
19
osName string
C2 CompilerThread1
osThreadId long
4891
virtual boolean
false
Example event data values and properties
parentThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
main
javaThreadId long
3
osName string
main
osThreadId long
5014
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
41
lineNumber int
550
method Method
descriptor string
()V
hidden boolean
false
modifiers int
8
name string
socketIO
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.4.1
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.4.1
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
1906238058
thread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Thread-9
javaThreadId long
66
osName string
Thread-9
osThreadId long
5086
virtual boolean
false
Example event data values and properties
parentThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
main
javaThreadId long
3
osName string
main
osThreadId long
2151
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
10
lineNumber int
32
method Method
descriptor string
(Ljava/lang/Runnable;)V
hidden boolean
false
modifiers int
1
name string
execute
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
io/netty/util/concurrent/ThreadPerTaskExecutor
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
io/netty/util/concurrent
type FrameType
Interpreted
truncated boolean
false
startTime long: millis
475242197827
thread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
shuffle-server-7-2
javaThreadId long
1920
osName string
shuffle-server-7-2
osThreadId long
4455
virtual boolean
false

ThreadEnd

default profiling startTime eventThread 11 17 21 25 27 28

Category: Java Application

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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/jfrThreadLocal.cpp:

  assert(t != nullptr, "invariant");
  assert(Thread::current() == t, "invariant");
  assert(!tl->is_dead(), "invariant");
  assert(tl->shelved_buffer() == nullptr, "invariant");
  tl->_dead = true;
  tl->release(t);
}

static void send_java_thread_end_event(JavaThread* jt, traceid tid) {
  assert(jt != nullptr, "invariant");
  assert(Thread::current() == jt, "invariant");
  assert(tid != 0, "invariant");
  if (JfrRecorder::is_recording()) {
    EventThreadEnd event;
    event.set_thread(tid);
    event.commit();
    ObjectSampleCheckpoint::on_thread_exit(tid);
  }
}

void JfrThreadLocal::on_exit(Thread* t) {
  assert(t != nullptr, "invariant");
  JfrThreadLocal * const tl = t->jfr_thread_local();
  assert(!tl->is_dead(), "invariant");
  if (JfrRecorder::is_recording()) {

src/hotspot/share/runtime/java.cpp:

#if INCLUDE_CDS
  ClassListWriter::write_resolved_constants();

  if (CDSConfig::is_dumping_preimage_static_archive()) {
    AOTMetaspace::dump_static_archive(thread);
  }
#endif

  // Hang forever on exit if we're reporting an error.
  if (ShowMessageBoxOnError && VMError::is_error_reported()) {
    os::infinite_sleep();
  }

  EventThreadEnd event;
  if (event.should_commit()) {
    event.set_thread(JFR_JVM_THREAD_ID(thread));
    event.commit();
  }

  JFR_ONLY(Jfr::on_vm_shutdown(false, halt);)

  // Stop the WatcherThread. We do this before disenrolling various
  // PeriodicTasks to reduce the likelihood of races.
  WatcherThread::stop();

Event configuration settings across JFR profiles
Configuration enabled
default true
profiling true

Event fields with their types and descriptions
Field Type Description
thread Thread Java Thread

Examples 3
Example event data values and properties
startTime long: millis
3264599701
thread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Thread-39
javaThreadId long
96
osName string
Thread-39
osThreadId long
5116
virtual boolean
false
Example event data values and properties
startTime long: millis
450835090134
thread Thread
group ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
C2 CompilerThread1
javaThreadId long
15
osName string
C2 CompilerThread1
osThreadId long
4441
virtual boolean
false
Example event data values and properties
startTime long: millis
480370494616
thread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
block-manager-storage-async-thread-pool-40
javaThreadId long
1803
osName string
block-manager-storage-async-thread-pool-40
osThreadId long
4721
virtual boolean
false

ThreadPark

default profiling startTime duration eventThread stackTrace 11 17 21 25 27 28

Category: 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/prims/unsafe.cpp:

UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) {
  oop p = JNIHandles::resolve(obj);
  volatile jint* addr = (volatile jint*)index_oop_from_field_offset_long(p, offset);
  return AtomicAccess::cmpxchg(addr, e, x) == e;
} UNSAFE_END

UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) {
  oop p = JNIHandles::resolve(obj);
  volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset);
  return AtomicAccess::cmpxchg(addr, e, x) == e;
} UNSAFE_END

static void post_thread_park_event(EventThreadPark* event, const oop obj, jlong timeout_nanos, jlong until_epoch_millis) {
  assert(event != nullptr, "invariant");
  event->set_parkedClass((obj != nullptr) ? obj->klass() : nullptr);
  event->set_timeout(timeout_nanos);
  event->set_until(until_epoch_millis);
  event->set_address((obj != nullptr) ? (u8)cast_from_oop<uintptr_t>(obj) : 0);
  event->commit();
}

UNSAFE_ENTRY(void, Unsafe_Park(JNIEnv *env, jobject unsafe, jboolean isAbsolute, jlong time)) {
  HOTSPOT_THREAD_PARK_BEGIN((uintptr_t) thread->parker(), (int) isAbsolute, time);
  EventThreadPark event;

  JavaThreadParkedState jtps(thread, time != 0);
  thread->parker()->park(isAbsolute != 0, time);
  if (event.should_commit()) {
    const oop obj = thread->current_park_blocker();
    if (time == 0) {
      post_thread_park_event(&event, obj, min_jlong, min_jlong);
    } else {
      if (isAbsolute != 0) {
        post_thread_park_event(&event, obj, min_jlong, time);
      } else {

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 20 ms
profiling true true 10 ms

Event fields with their types and descriptions
Field Type Description
parkedClass Class Class Parked On
timeout long: nanos Park Timeout
until long: epochmillis Park Until
address ulong: address Address of Object Parked

Examples 3
Example event data values and properties
address ulong: address
30362878480
parkedClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
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.4.1
name string
java/util/concurrent/locks
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(ZJ)V
hidden boolean
false
modifiers int
257
name string
park
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.4.1
name string
jdk/internal/misc
type FrameType
Native
truncated boolean
false
startTime long: millis
453411183660
timeout long: nanos
-9223372036854775808
until long: epochmillis
-9223372036854775808
Example event data values and properties
address ulong: address
30389543984
parkedClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
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.4.1
name string
java/util/concurrent/locks
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(ZJ)V
hidden boolean
false
modifiers int
257
name string
park
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.4.1
name string
jdk/internal/misc
type FrameType
Native
truncated boolean
false
startTime long: millis
445600656603
timeout long: nanos
59999999970
until long: epochmillis
-9223372036854775808
Example event data values and properties
address ulong: address
0
parkedClass Class
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(ZJ)V
hidden boolean
false
modifiers int
257
name string
park
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.4.1
name string
jdk/internal/misc
type FrameType
Native
truncated boolean
false
startTime long: millis
3409804200
timeout long: nanos
1000000
until long: epochmillis
-9223372036854775808

JavaMonitorEnter

default profiling startTime duration eventThread stackTrace 11 17 21 25 27 28

Category: 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/runtime/objectMonitor.cpp:

    // yet appear on any queues that would get it made the successor.
    // This means that the JVMTI_EVENT_MONITOR_CONTENDED_ENTER event
    // handler cannot accidentally consume an unpark() meant for the
    // ParkEvent associated with this ObjectMonitor.
  }
}

void ObjectMonitor::enter_with_contention_mark(JavaThread* current, ObjectMonitorContentionMark &cm, bool post_jvmti_events) {
  assert(current == JavaThread::current(), "must be");
  assert(!has_owner(current), "must be");
  assert(cm._monitor == this, "must be");
  assert(!is_being_async_deflated(), "must be");

  JFR_ONLY(JfrConditionalFlush<EventJavaMonitorEnter> flush(current);)
  EventJavaMonitorEnter enter_event;
  if (enter_event.is_started()) {
    enter_event.set_monitorClass(object()->klass());
    // Set an address that is 'unique enough', such that events close in
    // time and with the same address are likely (but not guaranteed) to
    // belong to the same object.
    enter_event.set_address((uintptr_t)this);
  }
  EventVirtualThreadPinned vthread_pinned_event;

  freeze_result result;

src/hotspot/share/runtime/objectMonitor.cpp:

    assert(false, "Non-balanced monitor enter/exit!");
#endif
    return;
  }

  if (_recursions != 0) {
    _recursions--;        // this is simple recursive enter
    return;
  }

#if INCLUDE_JFR
  // get the owner's thread id for the MonitorEnter event
  // if it is enabled and the thread isn't suspended
  if (not_suspended && EventJavaMonitorEnter::is_enabled()) {
    _previous_owner_tid = JFR_THREAD_ID(current);
  }
#endif

  for (;;) {
    // If there is a successor we should release the lock as soon as
    // possible, so that the successor can acquire the lock. If there is
    // no successor, we might need to wake up a waiting thread.
    if (!has_successor()) {
      ObjectWaiter* w = AtomicAccess::load(&_entry_list);
      if (w != nullptr) {

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 20 ms
profiling true true 10 ms

Event fields with their types and descriptions
Field Type Description
monitorClass Class Monitor Class
previousOwner Thread Previous Monitor Owner
address ulong: address Monitor Address

Examples 3
Example event data values and properties
address ulong: address
94795312341280
monitorClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Thread
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.4.1
name string
java/lang
previousOwner Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
main
javaThreadId long
3
osName string
main
osThreadId long
5014
virtual boolean
false
stackTrace StackTrace
null
startTime long: millis
1107904669
Example event data values and properties
address ulong: address
94556810078336
monitorClass 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.4.1
name string
java/net
hidden boolean
false
modifiers int
1
name string
org/apache/spark/rpc/netty/Dispatcher
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/spark/rpc/netty
previousOwner Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Spark Context Cleaner
javaThreadId long
1704
osName string
Spark Context Cleaner
osThreadId long
4222
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
4
lineNumber int
173
method Method
descriptor string
(Ljava/lang/String;Lorg/apache/spark/rpc/netty/InboxMessage;Lscala/Function1;)V
hidden boolean
false
modifiers int
2
name string
postMessage
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.4.1
name string
java/net
hidden boolean
false
modifiers int
1
name string
org/apache/spark/rpc/netty/Dispatcher
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/spark/rpc/netty
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
447498978090
Example event data values and properties
address ulong: address
140617523387200
monitorClass 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.4.1
name string
java/net
hidden boolean
false
modifiers int
1
name string
org/apache/spark/memory/UnifiedMemoryManager
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/spark/memory
previousOwner Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Executor task launch worker for task 1.0 in stage 47.0 (TID 183)
javaThreadId long
1732
osName string
Executor task launch worker for task 1.0 in stage 47.0 (TID 183)
osThreadId long
4649
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
-1
lineNumber int
131
method Method
descriptor string
(JJLorg/apache/spark/memory/MemoryMode;)V
hidden boolean
false
modifiers int
33
name string
releaseExecutionMemory
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.4.1
name string
java/net
hidden boolean
false
modifiers int
1025
name string
org/apache/spark/memory/MemoryManager
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/spark/memory
type FrameType
Inlined
truncated boolean
false
startTime long: millis
454525773721

JavaMonitorWait

default profiling startTime duration eventThread stackTrace 11 17 21 25 27 28

Category: Java Application

Waiting on a Java monitor

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/objectMonitor.cpp:

// Otherwise returns false and throws IllegalMonitorStateException
// (IMSE). If there is a pending exception and the specified thread
// is not the owner, that exception will be replaced by the IMSE.
bool ObjectMonitor::check_owner(TRAPS) {
  JavaThread* current = THREAD;
  int64_t cur = owner_raw();
  if (cur == owner_id_from(current)) {
    return true;
  }
  THROW_MSG_(vmSymbols::java_lang_IllegalMonitorStateException(),
             "current thread is not owner", false);
}

static void post_monitor_wait_event(EventJavaMonitorWait* event,
                                    ObjectMonitor* monitor,
                                    uint64_t notifier_tid,
                                    jlong timeout,
                                    bool timedout) {
  assert(event != nullptr, "invariant");
  assert(monitor != nullptr, "invariant");
  const Klass* monitor_klass = monitor->object()->klass();
  if (ObjectMonitor::is_jfr_excluded(monitor_klass)) {
    return;
  }
  event->set_monitorClass(monitor_klass);
  event->set_timeout(timeout);
  // Set an address that is 'unique enough', such that events close in
  // time and with the same address are likely (but not guaranteed) to
  // belong to the same object.
  event->set_address((uintptr_t)monitor);
  event->set_notifier(notifier_tid);
  event->set_timedOut(timedout);
  event->commit();
}

static void vthread_monitor_waited_event(JavaThread* current, ObjectWaiter* node, ContinuationWrapper& cont, EventJavaMonitorWait* event, jboolean timed_out) {
  // Since we might safepoint set the anchor so that the stack can we walked.
  assert(current->last_continuation() != nullptr, "");
  JavaFrameAnchor* anchor = current->frame_anchor();
  anchor->set_last_Java_sp(current->last_continuation()->entry_sp());
  anchor->set_last_Java_pc(current->last_continuation()->entry_pc());

  ContinuationWrapper::SafepointOp so(current, cont);

  JRT_BLOCK
    if (event->should_commit()) {
      long timeout = java_lang_VirtualThread::timeout(current->vthread());

src/hotspot/share/runtime/objectMonitor.cpp:

// -----------------------------------------------------------------------------
// Wait/Notify/NotifyAll
//
// Note: a subset of changes to ObjectMonitor::wait()
// will need to be replicated in complete_exit
void ObjectMonitor::wait(jlong millis, bool interruptible, TRAPS) {
  JavaThread* current = THREAD;

  assert(InitDone, "Unexpectedly not initialized");

  CHECK_OWNER();  // Throws IMSE if not owner.

  EventJavaMonitorWait wait_event;
  EventVirtualThreadPinned vthread_pinned_event;

  // check for a pending interrupt
  if (interruptible && current->is_interrupted(true) && !HAS_PENDING_EXCEPTION) {
    JavaThreadInObjectWaitState jtiows(current, millis != 0, interruptible);

    if (JvmtiExport::should_post_monitor_wait()) {
      JvmtiExport::post_monitor_wait(current, object(), millis);
    }
    // post monitor waited event. Note that this is past-tense, we are done waiting.
    if (JvmtiExport::should_post_monitor_waited()) {

src/hotspot/share/runtime/objectMonitor.cpp:

  // If this was an interrupted case, set the _interrupted boolean so that
  // once we re-acquire the monitor we know if we need to throw IE or not.
  ObjectWaiter::TStates state = node->TState;
  assert(was_notified || state == ObjectWaiter::TS_RUN,
         "was not notified and is not in the right state: state = %s",
         node->getTStateName(state));
  node->_interrupted = node->_interruptible && !was_notified && current->is_interrupted(false);

  // Post JFR and JVMTI events. If non-interruptible we are in
  // ObjectLocker case so we don't post anything.
  EventJavaMonitorWait wait_event;
  if (node->_interruptible && (wait_event.should_commit() || JvmtiExport::should_post_monitor_waited())) {
    vthread_monitor_waited_event(current, node, cont, &wait_event, !was_notified && !node->_interrupted);
  }

  // Mark that we are at reenter so that we don't call this method again.
  node->_at_reenter = true;

  // We check the state rather than was_notified because, when JVMTI
  // monitor_waited event is enabled, the notifier only unparks the waiter
  // without adding it to the entry_list.
  if (state == ObjectWaiter::TS_RUN) {

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 20 ms
profiling true true 10 ms

Event fields with their types and descriptions
Field Type Description
monitorClass Class Monitor Class Class of object waited on
notifier Thread Notifier Thread Notifying Thread
timeout long: millis Timeout Maximum wait time
timedOut boolean Timed Out Wait has been timed out
address ulong: address Monitor Address Address of object waited on

Examples 3
Example event data values and properties
address ulong: address
94895174441632
monitorClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
10
name string
java/lang/ref/ReferenceQueue$Lock
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.4.1
name string
java/lang/ref
notifier Thread
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(J)V
hidden boolean
false
modifiers int
274
name string
wait0
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
457463454813
timedOut boolean
true
timeout long: millis
100
Example event data values and properties
address ulong: address
94556816805216
monitorClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
10
name string
java/lang/ref/ReferenceQueue$Lock
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.4.1
name string
java/lang/ref
notifier Thread
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(J)V
hidden boolean
false
modifiers int
274
name string
wait0
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
453019162670
timedOut boolean
true
timeout long: millis
100
Example event data values and properties
address ulong: address
94795309480480
monitorClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
notifier Thread
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(J)V
hidden boolean
false
modifiers int
274
name string
wait0
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
3310536001
timedOut boolean
true
timeout long: millis
1

JavaMonitorNotify

startTime duration eventThread stackTrace 25 27 28

Category: Java Application

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Notifying a Java monitor

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/objectMonitor.cpp:

    // _wait_set_lock protects the wait queue, not the entry_list. We could
    // move the add-to-entry_list operation, above, outside the critical section
    // protected by _wait_set_lock. In practice that's not useful. With the
    // exception of wait() timeouts and interrupts the monitor owner
    // is the only thread that grabs _wait_set_lock. There's almost no contention
    // on _wait_set_lock so it's not profitable to reduce the length of the
    // critical section.
  }
  return did_notify;
}

static void post_monitor_notify_event(EventJavaMonitorNotify* event,
                                      ObjectMonitor* monitor,
                                      int notified_count) {
  assert(event != nullptr, "invariant");
  assert(monitor != nullptr, "invariant");
  const Klass* monitor_klass = monitor->object()->klass();
  if (ObjectMonitor::is_jfr_excluded(monitor_klass)) {
    return;
  }
  event->set_monitorClass(monitor_klass);
  // Set an address that is 'unique enough', such that events close in
  // time and with the same address are likely (but not guaranteed) to

src/hotspot/share/runtime/objectMonitor.cpp:

void ObjectMonitor::notify(TRAPS) {
  JavaThread* current = THREAD;
  CHECK_OWNER();  // Throws IMSE if not owner.
  if (_wait_set == nullptr) {
    return;
  }

  quick_notify(current);
}

void ObjectMonitor::quick_notify(JavaThread* current) {
  assert(has_owner(current), "Precondition");

  EventJavaMonitorNotify event;
  DTRACE_MONITOR_PROBE(notify, this, object(), current);
  int tally = notify_internal(current) ? 1 : 0;

  if ((tally > 0) && event.should_commit()) {
    post_monitor_notify_event(&event, this, /* notified_count = */ tally);
  }
}

// notifyAll() transfers the waiters one-at-a-time from the waitset to
// the entry_list. If the waitset is "ABCD" (where A was added first
// and D last) and the entry_list is ->X->Y->Z. After a notifyAll()

src/hotspot/share/runtime/objectMonitor.cpp:

void ObjectMonitor::notifyAll(TRAPS) {
  JavaThread* current = THREAD;
  CHECK_OWNER();  // Throws IMSE if not owner.
  if (_wait_set == nullptr) {
    return;
  }

  quick_notifyAll(current);
}

void ObjectMonitor::quick_notifyAll(JavaThread* current) {
  assert(has_owner(current), "Precondition");

  EventJavaMonitorNotify event;
  DTRACE_MONITOR_PROBE(notifyAll, this, object(), current);
  int tally = 0;
  while (_wait_set != nullptr) {
    if (notify_internal(current)) {
      tally++;
    }
  }

  if ((tally > 0) && event.should_commit()) {
    post_monitor_notify_event(&event, this, /* notified_count = */ tally);
  }

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default false true 0 ms
profiling false true 0 ms

Event fields with their types and descriptions
Field Type Description
monitorClass Class Monitor Class Class of object waited on
notifiedCount uint Notified Threads Number of actually notified threads
address ulong: address Monitor Address Address of object waited on

Examples 3
Example event data values and properties
address ulong: address
94556804179792
monitorClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
notifiedCount uint
2
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
()V
hidden boolean
false
modifiers int
273
name string
notifyAll
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
448375807102
Example event data values and properties
address ulong: address
140367184632832
monitorClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Thread
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.4.1
name string
java/lang
notifiedCount uint
1
stackTrace StackTrace
null
startTime long: millis
2048963709
Example event data values and properties
address ulong: address
94895050695616
monitorClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
notifiedCount uint
2
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
()V
hidden boolean
false
modifiers int
273
name string
notifyAll
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
463097210698

JavaMonitorInflate

startTime duration eventThread stackTrace 11 17 21 25 27 28

Category: 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/runtime/synchronizer.cpp:

static void log_inflate(Thread* current, oop object, ObjectSynchronizer::InflateCause cause) {
  if (log_is_enabled(Trace, monitorinflation)) {
    ResourceMark rm(current);
    log_trace(monitorinflation)("inflate: object=" INTPTR_FORMAT ", mark="
                                INTPTR_FORMAT ", type='%s' cause=%s", p2i(object),
                                object->mark().value(), object->klass()->external_name(),
                                ObjectSynchronizer::inflate_cause_name(cause));
  }
}

static void post_monitor_inflate_event(EventJavaMonitorInflate* event,
                                       const oop obj,
                                       ObjectSynchronizer::InflateCause cause) {
  assert(event != nullptr, "invariant");
  const Klass* monitor_klass = obj->klass();
  if (ObjectMonitor::is_jfr_excluded(monitor_klass)) {
    return;
  }
  event->set_monitorClass(monitor_klass);
  event->set_address((uintptr_t)(void*)obj);
  event->set_cause((u1)cause);
  event->commit();
}

ObjectMonitor* ObjectSynchronizer::get_or_insert_monitor(oop object, JavaThread* current, ObjectSynchronizer::InflateCause cause) {
  assert(UseObjectMonitorTable, "must be");

  EventJavaMonitorInflate event;

  bool inserted;
  ObjectMonitor* monitor = get_or_insert_monitor_from_table(object, &inserted);

  if (inserted) {
    log_inflate(current, object, cause);
    if (event.should_commit()) {
      post_monitor_inflate_event(&event, object, cause);
    }

    // The monitor has an anonymous owner so it is safe from async deflation.

src/hotspot/share/runtime/synchronizer.cpp:

ObjectMonitor* ObjectSynchronizer::inflate_into_object_header(oop object, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, Thread* current) {

  // The JavaThread* locking parameter requires that the locking_thread == JavaThread::current,
  // or is suspended throughout the call by some other mechanism.
  // Even with fast locking the thread might be nullptr when called from a non
  // JavaThread. (As may still be the case from FastHashCode). However it is only
  // important for the correctness of the fast locking algorithm that the thread
  // is set when called from ObjectSynchronizer::enter from the owning thread,
  // ObjectSynchronizer::enter_for from any thread, or ObjectSynchronizer::exit.
  EventJavaMonitorInflate event;

  for (;;) {
    const markWord mark = object->mark_acquire();

    // The mark can be in one of the following states:
    // *  inflated     - If the ObjectMonitor owner is anonymous and the
    //                   locking_thread owns the object lock, then we make the
    //                   locking_thread the ObjectMonitor owner and remove the
    //                   lock from the locking_thread's lock stack.
    // *  fast-locked  - Coerce it to inflated from fast-locked.
    // *  unlocked     - Aggressively inflate the object.

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default false true 0 ms
profiling false true 0 ms

Event fields with their types and descriptions
Field Type Description
monitorClass Class Monitor Class
address ulong: address Monitor Address
cause InflateCause Monitor Inflation Cause Cause of inflation

Examples 3
Example event data values and properties
address ulong: address
30787034480
cause InflateCause
Monitor Wait
monitorClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(J)V
hidden boolean
false
modifiers int
274
name string
wait0
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
480332642089
Example event data values and properties
address ulong: address
33727762776
cause InflateCause
Monitor Wait
monitorClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(J)V
hidden boolean
false
modifiers int
274
name string
wait0
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
450404275535
Example event data values and properties
address ulong: address
30312242680
cause InflateCause
Monitor Wait
monitorClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Thread
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.4.1
name string
java/lang
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(J)V
hidden boolean
false
modifiers int
274
name string
wait0
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Object
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
2732337214

JavaMonitorDeflate

startTime duration 25 27 28

Category: Java Application

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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/objectMonitor.cpp:

    // Interference - the CAS failed because _entry_list changed. Before
    // retrying the CAS retry taking the lock as it may now be free.
    if (try_lock(current) == TryLockResult::Success) {
      assert(has_owner(current), "invariant");
      assert(!has_successor(current), "invariant");
      node->TState = ObjectWaiter::TS_RUN;
      return true;
    }
  }
}

static void post_monitor_deflate_event(EventJavaMonitorDeflate* event,
                                       const oop obj) {
  assert(event != nullptr, "invariant");
  if (obj == nullptr) {
    // Accept the case when obj was already garbage-collected.
    // Emit the event anyway, but without details.
    event->set_monitorClass(nullptr);
    event->set_address(0);
  } else {
    const Klass* monitor_klass = obj->klass();
    if (ObjectMonitor::is_jfr_excluded(monitor_klass)) {
      return;

src/hotspot/share/runtime/objectMonitor.cpp:

// as part of the protocol to make sure that the calling thread has
// not lost the race to a contending thread.
//
// The ObjectMonitor has been successfully async deflated when:
//   (contentions < 0)
// Contending threads that see that condition know to retry their operation.
//
bool ObjectMonitor::deflate_monitor(Thread* current) {
  if (is_busy()) {
    // Easy checks are first - the ObjectMonitor is busy so no deflation.
    return false;
  }

  EventJavaMonitorDeflate event;

  const oop obj = object_peek();

  if (obj == nullptr) {
    // If the object died, we can recycle the monitor without racing with
    // Java threads. The GC already broke the association with the object.
    set_owner_from_raw(NO_OWNER, DEFLATER_MARKER);
    assert(contentions() >= 0, "must be non-negative: contentions=%d", contentions());
    _contentions = INT_MIN; // minimum negative int
  } else {
    // Attempt async deflation protocol.

Event configuration settings across JFR profiles
Configuration enabled threshold
default false 0 ms
profiling false 0 ms

Event fields with their types and descriptions
Field Type Description
monitorClass Class Monitor Class Class of the object deflated. If null or N/A, the object has been garbage collected.
address ulong: address Monitor Address Address of the object deflated. If null or N/A, the object has been garbage collected.

Examples 3
Example event data values and properties
address ulong: address
0
monitorClass Class
null
startTime long: millis
480714833893
Example event data values and properties
address ulong: address
31783445464
monitorClass 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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
org/apache/spark/scheduler/AsyncEventQueue$$anon$2
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/spark/scheduler
startTime long: millis
605023576112
Example event data values and properties
address ulong: address
0
monitorClass Class
null
startTime long: millis
481040720128

VirtualThreadPinned

default profiling startTime duration eventThread stackTrace 19 21 25 27 28

Category: 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/prims/jvm.cpp:

    assert(!JvmtiExport::can_support_virtual_threads(), "sanity check");
    return;
  }
  assert(thread->is_disable_suspend() != (bool)enter,
         "nested or unbalanced monitor enter/exit is not allowed");
  thread->toggle_is_disable_suspend();
#endif
JVM_END

JVM_ENTRY(void, JVM_VirtualThreadPinnedEvent(JNIEnv* env, jclass ignored, jstring op))
#if INCLUDE_JFR
  freeze_result result = THREAD->last_freeze_fail_result();
  assert(result != freeze_ok, "sanity check");
  EventVirtualThreadPinned event(UNTIMED);
  event.set_starttime(THREAD->last_freeze_fail_time());
  if (event.should_commit()) {
    ResourceMark rm(THREAD);
    const char *str = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(op));
    THREAD->post_vthread_pinned_event(&event, str, result);
  }
#endif
JVM_END

JVM_ENTRY(jobject, JVM_TakeVirtualThreadListToUnblock(JNIEnv* env, jclass ignored))
  ParkEvent* parkEvent = ObjectMonitor::vthread_unparker_ParkEvent();

src/hotspot/share/runtime/javaThread.hpp:

class OSThread;

class ThreadsList;
class ThreadSafepointState;
class ThreadStatistics;

class vframeArray;
class vframe;
class javaVFrame;

class JavaThread;
typedef void (*ThreadFunction)(JavaThread*, TRAPS);

class EventVirtualThreadPinned;
class ThreadWXEnable;

class JavaThread: public Thread {
  friend class VMStructs;
  friend class WhiteBox;
  friend class ThreadsSMRSupport; // to access _threadObj for exiting_threads_oops_do
  friend class HandshakeState;
  friend class Continuation;
  friend class Threads;
  friend class ServiceThread; // for deferred OopHandle release access
 private:

src/hotspot/share/runtime/javaThread.hpp:

  bool sleep(jlong millis);
  bool sleep_nanos(jlong nanos);

  // java.lang.Thread interruption support
  void interrupt();
  bool is_interrupted(bool clear_interrupted);

#if INCLUDE_JFR
  // Support for jdk.VirtualThreadPinned event
  freeze_result last_freeze_fail_result() { return _last_freeze_fail_result; }
  Ticks& last_freeze_fail_time() { return _last_freeze_fail_time; }
  void set_last_freeze_fail_result(freeze_result result);
#endif
  void post_vthread_pinned_event(EventVirtualThreadPinned* event, const char* op, freeze_result result) NOT_JFR_RETURN();


  // This is only for use by JVMTI RawMonitorWait. It emulates the actions of
  // the Java code in Object::wait which are not present in RawMonitorWait.
  bool get_and_clear_interrupted();

private:

#ifdef MACOS_AARCH64
  friend class ThreadWXEnable;
  friend class PosixSignals;

src/hotspot/share/runtime/objectMonitor.cpp:

  assert(!has_owner(current), "must be");
  assert(cm._monitor == this, "must be");
  assert(!is_being_async_deflated(), "must be");

  JFR_ONLY(JfrConditionalFlush<EventJavaMonitorEnter> flush(current);)
  EventJavaMonitorEnter enter_event;
  if (enter_event.is_started()) {
    enter_event.set_monitorClass(object()->klass());
    // Set an address that is 'unique enough', such that events close in
    // time and with the same address are likely (but not guaranteed) to
    // belong to the same object.
    enter_event.set_address((uintptr_t)this);
  }
  EventVirtualThreadPinned vthread_pinned_event;

  freeze_result result;

  assert(current->current_pending_monitor() == nullptr, "invariant");

  ContinuationEntry* ce = current->last_continuation();
  bool is_virtual = ce != nullptr && ce->is_virtual_thread();
  if (is_virtual) {
    notify_contended_enter(current, post_jvmti_events);
    result = Continuation::try_preempt(current, ce->cont_oop(current));
    if (result == freeze_ok) {

src/hotspot/share/runtime/objectMonitor.cpp:

// -----------------------------------------------------------------------------
// Wait/Notify/NotifyAll
//
// Note: a subset of changes to ObjectMonitor::wait()
// will need to be replicated in complete_exit
void ObjectMonitor::wait(jlong millis, bool interruptible, TRAPS) {
  JavaThread* current = THREAD;

  assert(InitDone, "Unexpectedly not initialized");

  CHECK_OWNER();  // Throws IMSE if not owner.

  EventJavaMonitorWait wait_event;
  EventVirtualThreadPinned vthread_pinned_event;

  // check for a pending interrupt
  if (interruptible && current->is_interrupted(true) && !HAS_PENDING_EXCEPTION) {
    JavaThreadInObjectWaitState jtiows(current, millis != 0, interruptible);

    if (JvmtiExport::should_post_monitor_wait()) {
      JvmtiExport::post_monitor_wait(current, object(), millis);
    }
    // post monitor waited event. Note that this is past-tense, we are done waiting.
    if (JvmtiExport::should_post_monitor_waited()) {
      // Note: 'false' parameter is passed here because the

src/hotspot/share/runtime/javaThread.cpp:

  new_head->add(_scopedValueCache);
  _oop_handle_list = new_head;
  Service_lock->notify_all();
}

#if INCLUDE_JFR
void JavaThread::set_last_freeze_fail_result(freeze_result result) {
  assert(result != freeze_ok, "sanity check");
  _last_freeze_fail_result = result;
  _last_freeze_fail_time = Ticks::now();
}

// Post jdk.VirtualThreadPinned event
void JavaThread::post_vthread_pinned_event(EventVirtualThreadPinned* event, const char* op, freeze_result result) {
  assert(result != freeze_ok, "sanity check");
  if (event->should_commit()) {
    char reason[256];
    if (class_to_be_initialized() != nullptr) {
      ResourceMark rm(this);
      jio_snprintf(reason, sizeof reason, "Waited for initialization of %s by another thread",
                   class_to_be_initialized()->external_name());
      event->set_pinnedReason(reason);
    } else if (class_being_initialized() != nullptr) {
      ResourceMark rm(this);
      jio_snprintf(reason, sizeof(reason), "VM call to %s.<clinit> on stack",

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 20 ms
profiling true true 20 ms

Event fields with their types and descriptions
Field Type Description
blockingOperation string 24+ Blocking Operation
pinnedReason string 24+ Pinned Reason
carrierThread Thread 24+ Carrier Thread

ObjectAllocationInNewTLAB

startTime eventThread stackTrace 11 17 21 25 27 28

Category: Java Application

Allocation in new Thread Local Allocation Buffer

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:

void AllocTracer::send_allocation_outside_tlab(Klass* klass, HeapWord* obj, size_t alloc_size, JavaThread* thread) {
  JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, true, thread);)
  EventObjectAllocationOutsideTLAB event;
  if (event.should_commit()) {
    event.set_objectClass(klass);
    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 configuration settings across JFR profiles
Configuration enabled stackTrace
default false true
profiling false true

Event fields with their types and descriptions
Field Type Description
objectClass Class Object Class Class of allocated object
allocationSize ulong: bytes Allocation Size
tlabSize ulong: bytes TLAB Size

Examples 3
Example event data values and properties
allocationSize ulong: bytes
4112
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[B
package Package
null
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.4.1
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.4.1
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
563147169
tlabSize ulong: bytes
74016
Example event data values and properties
allocationSize ulong: bytes
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.4.1
name string
java/net
hidden boolean
false
modifiers int
1
name string
scala/Tuple2
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
scala
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
12
lineNumber int
69
method Method
descriptor string
(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
hidden boolean
false
modifiers int
1
name string
apply
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.4.1
name string
java/net
hidden boolean
false
modifiers int
1537
name string
breeze/linalg/operators/BinaryRegistry
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
breeze/linalg/operators
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
452978923322
tlabSize ulong: bytes
1048576
Example event data values and properties
allocationSize ulong: bytes
32
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
24
name string
java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode
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.4.1
name string
java/util/concurrent/locks
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
10
lineNumber int
1667
method Method
descriptor string
()Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode;
hidden boolean
false
modifiers int
2
name string
newConditionNode
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
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.4.1
name string
java/util/concurrent/locks
type FrameType
Inlined
truncated boolean
false
startTime long: millis
447750803240
tlabSize ulong: bytes
159088

ObjectAllocationOutsideTLAB

startTime eventThread stackTrace 11 17 21 25 27 28

Category: Java Application

Allocation outside Thread Local Allocation Buffers

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:

#if INCLUDE_JFR
#include "jfr/support/jfrAllocationTracer.hpp"
#endif

void AllocTracer::send_allocation_outside_tlab(Klass* klass, HeapWord* obj, size_t alloc_size, JavaThread* thread) {
  JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, true, thread);)
  EventObjectAllocationOutsideTLAB event;
  if (event.should_commit()) {
    event.set_objectClass(klass);
    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 configuration settings across JFR profiles
Configuration enabled stackTrace
default false true
profiling false true

Event fields with their types and descriptions
Field Type Description
objectClass Class Object Class Class of allocated object
allocationSize ulong: bytes Allocation Size

Examples 3
Example event data values and properties
allocationSize ulong: bytes
4112
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[B
package Package
null
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.4.1
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.4.1
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
561093947
Example event data values and properties
allocationSize ulong: bytes
22536
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[Ljava/lang/Object;
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
34
lineNumber int
2175
method Method
descriptor string
()V
hidden boolean
false
modifiers int
2
name string
growEntries
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
26
name string
java/io/ObjectOutputStream$HandleTable
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.4.1
name string
java/io
type FrameType
JIT compiled
truncated boolean
true
startTime long: millis
453408370362
Example event data values and properties
allocationSize ulong: bytes
1048592
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[B
package Package
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
6
lineNumber int
75
method Method
descriptor string
(IILjava/lang/foreign/MemorySegment;)V
hidden boolean
false
modifiers int
0
name string
<init>
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
0
name string
java/nio/HeapByteBuffer
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.4.1
name string
java/nio
type FrameType
Inlined
truncated boolean
false
startTime long: millis
447542138765

ObjectAllocationSample

throttle default profiling startTime eventThread stackTrace 16 17 21 25 27 28

Category: 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/support/jfrAllocationTracer.cpp:

JfrAllocationTracer::JfrAllocationTracer(const Klass* klass, HeapWord* obj, size_t alloc_size, bool outside_tlab, JavaThread* thread) {
  if (LeakProfiler::is_running()) {
    LeakProfiler::sample(obj, alloc_size, thread);
  }
  if (EventObjectAllocationSample::is_enabled()) {
    JfrObjectAllocationSample::send_event(klass, alloc_size, outside_tlab, thread);
  }
}

src/hotspot/share/jfr/support/jfrObjectAllocationSample.cpp:

inline bool send_allocation_sample(const Klass* klass, int64_t allocated_bytes, JfrThreadLocal* tl) {
  EventObjectAllocationSample event;
  if (event.should_commit()) {
    const int64_t weight = allocated_bytes - tl->last_allocated_bytes();
    assert(weight > 0, "invariant");
    event.set_objectClass(klass);
    event.set_weight(weight);
    event.commit();
    tl->set_last_allocated_bytes(allocated_bytes);
    return true;
  }
  return false;
}

inline int64_t estimate_tlab_size_bytes(JavaThread* jt) {
  const size_t desired_tlab_size_bytes = jt->tlab().desired_size() * HeapWordSize;
  const size_t alignment_reserve_bytes = jt->tlab().alignment_reserve_in_bytes();

Event configuration settings across JFR profiles
Configuration enabled stackTrace throttle
default true true 150/s
profiling true true 300/s

Event fields with their types and descriptions
Field Type Description
objectClass Class Object Class Class of allocated object
weight long: bytes Sample Weight The relative weight of the sample. Aggregating the weights for a large number of samples, for a particular class, thread or stack trace, gives a statistically accurate representation of the allocation pressure

Examples 3
Example event data values and properties
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[D
package Package
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
1
lineNumber int
273
method Method
descriptor string
(I)[D
hidden boolean
false
modifiers int
1
name string
newArray
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.4.1
name string
java/net
hidden boolean
false
modifiers int
25
name string
scala/reflect/ManifestFactory$DoubleManifest
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
scala/reflect
type FrameType
Inlined
truncated boolean
false
startTime long: millis
452982764172
weight long: bytes
1048000
Example event data values and properties
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
8
name string
java/util/concurrent/LinkedBlockingQueue$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.4.1
name string
java/util/concurrent
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
30
lineNumber int
409
method Method
descriptor string
(Ljava/lang/Object;)Z
hidden boolean
false
modifiers int
1
name string
offer
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/concurrent/LinkedBlockingQueue
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.4.1
name string
java/util/concurrent
type FrameType
Inlined
truncated boolean
false
startTime long: millis
447534448611
weight long: bytes
216
Example event data values and properties
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[B
package Package
null
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.4.1
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.4.1
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
560952894
weight long: bytes
69904

MethodTrace

default profiling startTime duration eventThread stackTrace 25 27 28

Category: 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/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void traceObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration) && JVM.getEventWriter() != null) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
    }

    public static void timingObjectInit(long startTime, long methodId) {

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void traceTimingObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration) && JVM.getEventWriter() != null) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addObjectTiming(duration);
        }

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void trace(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration)) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
    }

    public static void timing(long startTime, long methodId) {

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addTiming(methodId, duration);
        }
        if (MethodTraceEvent.shouldCommit(duration)) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
    }
}

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void traceObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration) && JVM.getEventWriter() != null) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
    }

    public static void timingObjectInit(long startTime, long methodId) {

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void traceTimingObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration) && JVM.getEventWriter() != null) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addObjectTiming(duration);
        }

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void trace(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration)) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
    }

    public static void timing(long startTime, long methodId) {

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addTiming(methodId, duration);
        }
        if (MethodTraceEvent.shouldCommit(duration)) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
    }
}

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        jdk.internal.event.SerializationMisdeclarationEvent.class,
        jdk.internal.event.SocketReadEvent.class,
        jdk.internal.event.SocketWriteEvent.class,
        jdk.internal.event.ThreadSleepEvent.class,
        jdk.internal.event.TLSHandshakeEvent.class,
        jdk.internal.event.VirtualThreadStartEvent.class,
        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.class,
        jdk.internal.event.FinalFieldMutationEvent.class,
        DirectBufferStatisticsEvent.class,
        InitialSecurityPropertyEvent.class,
        MethodTraceEvent.class,
        MethodTimingEvent.class,
    };

    private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
    private static final Runnable emitDirectBufferStatistics = JDKEvents::emitDirectBufferStatistics;
    private static final Runnable emitContainerConfiguration = JDKEvents::emitContainerConfiguration;
    private static final Runnable emitContainerCPUUsage = JDKEvents::emitContainerCPUUsage;
    private static final Runnable emitContainerCPUThrottling = JDKEvents::emitContainerCPUThrottling;
    private static final Runnable emitContainerMemoryUsage = JDKEvents::emitContainerMemoryUsage;
    private static final Runnable emitContainerIOUsage = JDKEvents::emitContainerIOUsage;
    private static final Runnable emitInitialSecurityProperties = JDKEvents::emitInitialSecurityProperties;

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        jdk.internal.event.SerializationMisdeclarationEvent.class,
        jdk.internal.event.SocketReadEvent.class,
        jdk.internal.event.SocketWriteEvent.class,
        jdk.internal.event.ThreadSleepEvent.class,
        jdk.internal.event.TLSHandshakeEvent.class,
        jdk.internal.event.VirtualThreadStartEvent.class,
        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.class,
        jdk.internal.event.FinalFieldMutationEvent.class,
        DirectBufferStatisticsEvent.class,
        InitialSecurityPropertyEvent.class,
        MethodTraceEvent.class,
        MethodTimingEvent.class,
    };

    private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
    private static final Runnable emitDirectBufferStatistics = JDKEvents::emitDirectBufferStatistics;
    private static final Runnable emitContainerConfiguration = JDKEvents::emitContainerConfiguration;
    private static final Runnable emitContainerCPUUsage = JDKEvents::emitContainerCPUUsage;
    private static final Runnable emitContainerCPUThrottling = JDKEvents::emitContainerCPUThrottling;
    private static final Runnable emitContainerMemoryUsage = JDKEvents::emitContainerMemoryUsage;
    private static final Runnable emitContainerIOUsage = JDKEvents::emitContainerIOUsage;
    private static final Runnable emitInitialSecurityProperties = JDKEvents::emitInitialSecurityProperties;

src/jdk.jfr/share/classes/jdk/jfr/events/MethodTraceEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Contextual;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.StackTrace;

@Name("jdk.MethodTrace")
@Label("Method Trace")
@Category({ "Java Virtual Machine", "Method Tracing" })
@StackTrace(true)
public final class MethodTraceEvent extends AbstractJDKEvent {

    @Contextual
    @Label("Method")
    private long method;

    public static void commit(long start, long duration, long method) {
        // Generated by JFR
    }

    public static long timestamp() {
        // Generated by JFR
        return 0;

src/jdk.jfr/share/classes/jdk/jfr/events/MethodTraceEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Contextual;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.StackTrace;

@Name("jdk.MethodTrace")
@Label("Method Trace")
@Category({ "Java Virtual Machine", "Method Tracing" })
@StackTrace(true)
public final class MethodTraceEvent extends AbstractJDKEvent {

    @Contextual
    @Label("Method")
    private long method;

    public static void commit(long start, long duration, long method) {
        // Generated by JFR
    }

    public static long timestamp() {
        // Generated by JFR
        return 0;

Event configuration settings across JFR profiles
Configuration enabled filter stackTrace threshold
default true null true 0 ms
profiling true null true 0 ms

Event fields with their types and descriptions
Field Type Description
method Method Method

MethodTiming

default profiling startTime every chunk 25 27 28

Category: 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/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void timingObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addObjectTiming(duration);
        }
    }

    public static void traceTimingObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration) && JVM.getEventWriter() != null) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addObjectTiming(duration);
        }
    }

    public static void trace(long startTime, long methodId) {

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void timing(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addTiming(methodId, duration);
        }
    }

    public static void traceTiming(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addTiming(methodId, duration);
        }
        if (MethodTraceEvent.shouldCommit(duration)) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void timingObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addObjectTiming(duration);
        }
    }

    public static void traceTimingObjectInit(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTraceEvent.shouldCommit(duration) && JVM.getEventWriter() != null) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addObjectTiming(duration);
        }
    }

    public static void trace(long startTime, long methodId) {

src/jdk.jfr/share/classes/jdk/jfr/tracing/MethodTracer.java:

    public static void timing(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addTiming(methodId, duration);
        }
    }

    public static void traceTiming(long startTime, long methodId) {
        long endTime = JVM.counterTime();
        long duration = endTime - startTime;
        if (MethodTimingEvent.enabled()) {
            PlatformTracer.addTiming(methodId, duration);
        }
        if (MethodTraceEvent.shouldCommit(duration)) {
            MethodTraceEvent.commit(startTime, duration, methodId);
        }

src/jdk.jfr/share/classes/jdk/jfr/internal/tracing/PlatformTracer.java:

        s.append(message);
        s.append(" for ");
        s.append(className.replace("/", "."));
        s.append(" in module ");
        s.append(module.getName());
        s.append(" and class loader " + module.getClassLoader());
        Logger.log(LogTag.JFR_METHODTRACE, level, s.toString());
    }

    public static void emitTiming() {
        // Metadata lock prevents rotation/flush while emitting events.
        synchronized (MetadataRepository.getInstance()) {
            removeClasses(JVM.drainStaleMethodTracerIds());
            long timestamp = MethodTimingEvent.timestamp();
            for (var tc : timedClasses.values()) {
                tc.emit(timestamp);
            }
        }
    }

    public static void addObjectTiming(long duration) {
        OBJECT.invocations().getAndIncrement();
        OBJECT.time().addAndGet(duration);
        OBJECT.updateMinMax(duration);
    }

src/jdk.jfr/share/classes/jdk/jfr/internal/tracing/PlatformTracer.java:

        s.append(message);
        s.append(" for ");
        s.append(className.replace("/", "."));
        s.append(" in module ");
        s.append(module.getName());
        s.append(" and class loader " + module.getClassLoader());
        Logger.log(LogTag.JFR_METHODTRACE, level, s.toString());
    }

    public static void emitTiming() {
        // Metadata lock prevents rotation/flush while emitting events.
        synchronized (MetadataRepository.getInstance()) {
            removeClasses(JVM.drainStaleMethodTracerIds());
            long timestamp = MethodTimingEvent.timestamp();
            for (var tc : timedClasses.values()) {
                tc.emit(timestamp);
            }
        }
    }

    public static void addObjectTiming(long duration) {
        OBJECT.invocations().getAndIncrement();
        OBJECT.time().addAndGet(duration);
        OBJECT.updateMinMax(duration);
    }

src/jdk.jfr/share/classes/jdk/jfr/internal/tracing/TimedClass.java:

    public void emit(long timestamp) {
        for (var tm : methods.values()) {
            if (tm.published().get()) {
                long methodId = tm.method().methodId();
                long invocations = tm.invocations().get();
                long time = tm.time().get();
                long min = tm.minimum().get();
                long max = tm.maximum().get();
                if (time == 0 || invocations == 0) {
                    // If time is zero, it's a low resolution clock and more invocations are needed.
                    MethodTimingEvent.commit(timestamp, methodId, invocations, MISSING, MISSING, MISSING);
                } else {
                    long average = (time + invocations / 2) / invocations;
                    if (min == Long.MAX_VALUE) {
                        min = average;
                    }
                    if (max == Long.MIN_VALUE) {
                        max = average;
                    }
                    min = Math.min(min, average);
                    max = Math.max(max, average);
                    MethodTimingEvent.commit(timestamp, methodId, invocations, min, average, max);
                }
                tm.method().log("Emitted event");
            }
        }
    }
}

src/jdk.jfr/share/classes/jdk/jfr/internal/tracing/TimedClass.java:

    public void emit(long timestamp) {
        for (var tm : methods.values()) {
            if (tm.published().get()) {
                long methodId = tm.method().methodId();
                long invocations = tm.invocations().get();
                long time = tm.time().get();
                long min = tm.minimum().get();
                long max = tm.maximum().get();
                if (time == 0 || invocations == 0) {
                    // If time is zero, it's a low resolution clock and more invocations are needed.
                    MethodTimingEvent.commit(timestamp, methodId, invocations, MISSING, MISSING, MISSING);
                } else {
                    long average = (time + invocations / 2) / invocations;
                    if (min == Long.MAX_VALUE) {
                        min = average;
                    }
                    if (max == Long.MIN_VALUE) {
                        max = average;
                    }
                    min = Math.min(min, average);
                    max = Math.max(max, average);
                    MethodTimingEvent.commit(timestamp, methodId, invocations, min, average, max);
                }
                tm.method().log("Emitted event");
            }
        }
    }
}

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.class,
        jdk.internal.event.FinalFieldMutationEvent.class,
        DirectBufferStatisticsEvent.class,
        InitialSecurityPropertyEvent.class,
        MethodTraceEvent.class,
        MethodTimingEvent.class,
    };

    private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
    private static final Runnable emitDirectBufferStatistics = JDKEvents::emitDirectBufferStatistics;
    private static final Runnable emitContainerConfiguration = JDKEvents::emitContainerConfiguration;
    private static final Runnable emitContainerCPUUsage = JDKEvents::emitContainerCPUUsage;
    private static final Runnable emitContainerCPUThrottling = JDKEvents::emitContainerCPUThrottling;

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        try {
            if (initializationTriggered == false) {
                for (Class<?> eventClass : eventClasses) {
                    MetadataRepository.getInstance().register((Class<? extends Event>) eventClass);
                }
                PeriodicEvents.addJavaEvent(jdk.internal.event.ExceptionStatisticsEvent.class, emitExceptionStatistics);
                PeriodicEvents.addJavaEvent(DirectBufferStatisticsEvent.class, emitDirectBufferStatistics);
                PeriodicEvents.addJavaEvent(InitialSecurityPropertyEvent.class, emitInitialSecurityProperties);
                PeriodicEvents.addJavaEvent(MethodTimingEvent.class, emitMethodTiming);

                initializeContainerEvents();
                JFRTracing.enable();
                initializationTriggered = true;
            }
        } catch (Exception e) {
            Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

            for (String key : p.stringPropertyNames()) {
                InitialSecurityPropertyEvent e = new InitialSecurityPropertyEvent();
                e.key = key;
                e.value = p.getProperty(key);
                e.commit();
            }
        }
    }

    private static void emitMethodTiming() {
        if (MethodSetting.isInitialized() && MethodTimingEvent.enabled()) {
            PlatformTracer.emitTiming();
        }
    }
}

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.class,
        jdk.internal.event.FinalFieldMutationEvent.class,
        DirectBufferStatisticsEvent.class,
        InitialSecurityPropertyEvent.class,
        MethodTraceEvent.class,
        MethodTimingEvent.class,
    };

    private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
    private static final Runnable emitDirectBufferStatistics = JDKEvents::emitDirectBufferStatistics;
    private static final Runnable emitContainerConfiguration = JDKEvents::emitContainerConfiguration;
    private static final Runnable emitContainerCPUUsage = JDKEvents::emitContainerCPUUsage;
    private static final Runnable emitContainerCPUThrottling = JDKEvents::emitContainerCPUThrottling;

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        try {
            if (initializationTriggered == false) {
                for (Class<?> eventClass : eventClasses) {
                    MetadataRepository.getInstance().register((Class<? extends Event>) eventClass);
                }
                PeriodicEvents.addJavaEvent(jdk.internal.event.ExceptionStatisticsEvent.class, emitExceptionStatistics);
                PeriodicEvents.addJavaEvent(DirectBufferStatisticsEvent.class, emitDirectBufferStatistics);
                PeriodicEvents.addJavaEvent(InitialSecurityPropertyEvent.class, emitInitialSecurityProperties);
                PeriodicEvents.addJavaEvent(MethodTimingEvent.class, emitMethodTiming);

                initializeContainerEvents();
                JFRTracing.enable();
                initializationTriggered = true;
            }
        } catch (Exception e) {
            Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

            for (String key : p.stringPropertyNames()) {
                InitialSecurityPropertyEvent e = new InitialSecurityPropertyEvent();
                e.key = key;
                e.value = p.getProperty(key);
                e.commit();
            }
        }
    }

    private static void emitMethodTiming() {
        if (MethodSetting.isInitialized() && MethodTimingEvent.enabled()) {
            PlatformTracer.emitTiming();
        }
    }
}

src/jdk.jfr/share/classes/jdk/jfr/events/MethodTimingEvent.java:

@Name("jdk.MethodTiming")
@Label("Method Timing")
@Category({ "Java Virtual Machine", "Method Tracing" })
@RemoveFields({ "duration", "eventThread", "stackTrace" })
@Description("Measures the approximate time it takes for a method to execute, including all delays, not just CPU processing time")
public final class MethodTimingEvent extends AbstractJDKEvent {

    @Label("Method")
    public long method;

    @Label("Invocations")
    public long invocations;

    @Label("Minimum Time")
    @Description("The value may be missing (Long.MIN_VALUE) if the clock-resolution is too low to establish a minimum time")
    @Timespan(Timespan.TICKS)
    public long minimum;

src/jdk.jfr/share/classes/jdk/jfr/events/MethodTimingEvent.java:

@Name("jdk.MethodTiming")
@Label("Method Timing")
@Category({ "Java Virtual Machine", "Method Tracing" })
@RemoveFields({ "duration", "eventThread", "stackTrace" })
@Description("Measures the approximate time it takes for a method to execute, including all delays, not just CPU processing time")
public final class MethodTimingEvent extends AbstractJDKEvent {

    @Label("Method")
    public long method;

    @Label("Invocations")
    public long invocations;

    @Label("Minimum Time")
    @Description("The value may be missing (Long.MIN_VALUE) if the clock-resolution is too low to establish a minimum time")
    @Timespan(Timespan.TICKS)
    public long minimum;

Event configuration settings across JFR profiles
Configuration enabled filter period
default true null endChunk
profiling true null endChunk

Event fields with their types and descriptions
Field Type Description
method Method Method
invocations long Invocations The number of times the method was invoked
minimum Tickspan Minimum An approximation of the minimum wall-clock time it took for the method to execute
average Tickspan Average An approximation of the average wall-clock time it took for the method to execute
maximum Tickspan Maximum An approximation of the maximum wall-clock time it took for the method to execute

SocketWrite

throttle default profiling startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java

Category: Java Application

Excludes in stack trace: java.io.OutputStream, java.net.Socket$SocketOutputStream, java.nio.channels.SocketChannel, sun.nio.ch.SocketOutputStream

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Writing data to a socket

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/java.base/share/classes/jdk/internal/event/SocketWriteEvent.java:

/**
 * A JFR event for socket write operations.  This event is mirrored in
 * {@code jdk.jfr.events.SocketWriteEvent } where the metadata for the event is
 * provided with annotations.  Some of the methods are replaced by generated
 * methods when jfr is enabled.  Note that the order of the arguments of the
 * {@link #commit(long, long, String, String, int, long)} method
 * must be the same as the order of the fields.
 */
public class SocketWriteEvent extends Event {

    // THE ORDER OF THE FOLLOWING FIELDS IS IMPORTANT!
    // The order must match the argument order of the generated commit method.
    public String host;
    public String address;
    public int port;
    public long bytesWritten;

    /**
     * Actually commit a socket write event.  This is generated automatically.
     * The order of the fields must be the same as the parameters in this method.

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

    private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();

    // Add mirror event mapping here. See MirrorEvent class for details.
    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
        register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
        register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
        register("jdk.internal.event.FinalFieldMutationEvent", FinalFieldMutationEvent.class);

src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java:

@Name(Type.EVENT_NAME_PREFIX + "SocketWrite")
@Label("Socket Write")
@Category("Java Application")
@Description("Writing data to a socket")
@StackFilter({"java.io.OutputStream",
              "java.net.Socket$SocketOutputStream",
              "java.nio.channels.SocketChannel",
              "sun.nio.ch.SocketOutputStream"})
@Throttle
public final class SocketWriteEvent extends MirrorEvent {

    @Label("Remote Host")
    public String host;

    @Label("Remote Address")
    public String address;

    @Label("Remote Port")
    public int port;

    @Label("Bytes Written")

src/java.base/share/classes/java/net/Socket.java:

        private final Socket parent;
        private final OutputStream out;
        SocketOutputStream(Socket parent, OutputStream out) {
            this.parent = parent;
            this.out = out;
        }
        @Override
        public void write(int b) throws IOException {
            byte[] a = new byte[] { (byte) b };
            write(a, 0, 1);
        }
        @Override
        public void write(byte[] b, int off, int len) throws IOException {
            if (!SocketWriteEvent.enabled()) {
                implWrite(b, off, len);
                return;
            }
            long start = SocketWriteEvent.timestamp();
            implWrite(b, off, len);
            SocketWriteEvent.offer(start, len, parent.getRemoteSocketAddress());
        }

        private void implWrite(byte[] b, int off, int len) throws IOException {
            try {
                out.write(b, off, len);
            } catch (InterruptedIOException e) {
                Thread thread = Thread.currentThread();
                if (thread.isVirtual() && thread.isInterrupted()) {
                    close();
                    throw new SocketException("Closed by interrupt");
                }

src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java:

        } finally {
            writeLock.unlock();
        }
    }

    @Override
    public int write(ByteBuffer buf) throws IOException {
        if (!SocketWriteEvent.enabled()) {
            return implWrite(buf);
        }
        long start = SocketWriteEvent.timestamp();
        int nbytes = implWrite(buf);
        SocketWriteEvent.offer(start, nbytes, remoteAddress());
        return nbytes;
    }

    @Override
    public long write(ByteBuffer[] srcs, int offset, int length)
        throws IOException
    {
        if (!SocketWriteEvent.enabled()) {
            return implWrite(srcs, offset, length);
        }
        long start = SocketWriteEvent.timestamp();
        long nbytes = implWrite(srcs, offset, length);
        SocketWriteEvent.offer(start, nbytes, remoteAddress());
        return nbytes;
    }

    /**
     * Writes a byte of out of band data.

src/java.base/share/classes/sun/nio/ch/SocketOutputStream.java:

     */
    SocketChannelImpl channel() {
        return sc;
    }

    @Override
    public void write(int b) throws IOException {
        byte[] a = new byte[]{(byte) b};
        write(a, 0, 1);
    }

    @Override
    public void write(byte[] b, int off, int len) throws IOException {
        if (!SocketWriteEvent.enabled()) {
            sc.blockingWriteFully(b, off, len);
            return;
        }
        long start = SocketWriteEvent.timestamp();
        sc.blockingWriteFully(b, off, len);
        SocketWriteEvent.offer(start, len, sc.remoteAddress());
    }

    @Override
    public void close() throws IOException {
        sc.close();
    }
}

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold throttle
default true true 1 ms 100/s 25+
profiling true true 1 ms 300/s 25+

Event fields with their types and descriptions
Field Type Description
host string Remote Host
address string Remote Address
port int Remote Port
bytesWritten long: bytes Bytes Written Number of bytes written to the socket

Examples 3
Example event data values and properties
address string
127.0.0.1
bytesWritten long: bytes
64
host string
127.0.0.1
port int
46980
startTime long: millis
1725752462
Example event data values and properties
address string
127.0.0.1
bytesWritten long: bytes
64
host string
127.0.0.1
port int
34774
startTime long: millis
1673555718
Example event data values and properties
address string
127.0.0.1
bytesWritten long: bytes
64
host string
127.0.0.1
port int
39164
startTime long: millis
2679137778

JavaErrorThrow

default profiling startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/ErrorThrownEvent.java

Category: Java Application

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

An object derived from java.lang.Error has been created. OutOfMemoryErrors are ignored

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default true true
profiling true true

Event fields with their types and descriptions
Field Type Description
message string Message
thrownClass Class Class

Examples 3
Example event data values and properties
message string
'void java.lang.invoke.DirectMethodHandle$Holder.invokeSpecialIFC(java.lang.Object, java.lang.Object, java.lang.Object, int)'
startTime long: millis
482683341310
thrownClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/NoSuchMethodError
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.4.1
name string
java/lang
Example event data values and properties
message string
'int java.lang.invoke.DirectMethodHandle$Holder.invokeSpecialIFC(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object, int)'
startTime long: millis
490926182914
thrownClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/NoSuchMethodError
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.4.1
name string
java/lang
Example event data values and properties
message string
'void java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(java.lang.Object, int)'
startTime long: millis
568844352
thrownClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/NoSuchMethodError
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.4.1
name string
java/lang

JavaExceptionThrow

throttle default profiling startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionThrownEvent.java

Category: Java Application

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

An object derived from java.lang.Exception has been created

Event configuration settings across JFR profiles
Configuration enabled stackTrace throttle
default true true 100/s 25+
profiling true true 300/s 25+

Event fields with their types and descriptions
Field Type Description
message string Message
thrownClass Class Class

Examples 3
Example event data values and properties
message string
null
startTime long: millis
448661281855
thrownClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Exception
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.4.1
name string
java/lang
Example event data values and properties
message string
java.lang.reflect.Method
startTime long: millis
1306812098
thrownClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/ClassNotFoundException
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.4.1
name string
java/lang
Example event data values and properties
message string
null
startTime long: millis
453875009965
thrownClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/Exception
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.4.1
name string
java/lang

VirtualThreadStart

startTime duration 19 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadStartEvent.java

Category: Java Application

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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/java.base/share/classes/jdk/internal/event/VirtualThreadStartEvent.java:

package jdk.internal.event;

/**
 * Event recording that a virtual thread has been started.
 */
public class VirtualThreadStartEvent extends Event {
    private static final VirtualThreadStartEvent EVENT = new VirtualThreadStartEvent();

    /**
     * Returns {@code true} if event is enabled, {@code false} otherwise.
     */
    public static boolean isTurnedOn() {
        return EVENT.isEnabled();
    }

    public long javaThreadId;
}

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
        register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
        register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
        register("jdk.internal.event.FinalFieldMutationEvent", FinalFieldMutationEvent.class);
    };

    private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {

src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadStartEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;

@Category("Java Application")
@Label("Virtual Thread Start")
@Name("jdk.VirtualThreadStart")
@RemoveFields("duration")
public final class VirtualThreadStartEvent extends MirrorEvent {

    @Label("Thread Id")
    public long javaThreadId;

}

src/java.base/share/classes/java/lang/VirtualThread.java:

            event.javaThreadId = threadId();
            event.exceptionMessage = ree.getMessage();
            event.commit();
        }
    }

    /**
     * Runs a task in the context of this virtual thread.
     */
    private void run(Runnable task) {
        assert Thread.currentThread() == this && state == RUNNING;

        // emit JFR event if enabled
        if (VirtualThreadStartEvent.isTurnedOn()) {
            var event = new VirtualThreadStartEvent();
            event.javaThreadId = threadId();
            event.commit();
        }

        Object bindings = Thread.scopedValueBindings();
        try {
            runWith(bindings, task);
        } catch (Throwable exc) {
            dispatchUncaughtException(exc);
        } finally {
            // pop any remaining scopes from the stack, this may block

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default false true
profiling false true

Event fields with their types and descriptions
Field Type Description
javaThreadId long Thread Id

Examples 3
Example event data values and properties
javaThreadId long
50
startTime long: millis
584598591
Example event data values and properties
javaThreadId long
33
startTime long: millis
532512671
Example event data values and properties
javaThreadId long
42
startTime long: millis
440538739

ThreadSleep

default profiling startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java

Category: Java Application

Excludes in stack trace: java.lang.Thread::afterSleep, java.lang.Thread::sleepNanos, java.lang.Thread::sleep

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/java.base/share/classes/jdk/internal/event/ThreadSleepEvent.java:

package jdk.internal.event;

/**
 * Event recording thread sleeping.
 */

public final class ThreadSleepEvent extends Event {
    public long time;
}

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

    // Add mirror event mapping here. See MirrorEvent class for details.
    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
        register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
        register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
        register("jdk.internal.event.FinalFieldMutationEvent", FinalFieldMutationEvent.class);
    };

src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.Timespan;
import jdk.jfr.internal.MirrorEvent;

@Category("Java Application")
@Label("Java Thread Sleep")
@Name("jdk.ThreadSleep")
@StackFilter({"java.lang.Thread::afterSleep",
              "java.lang.Thread::sleepNanos",
              "java.lang.Thread::sleep"})
public final class ThreadSleepEvent extends MirrorEvent {
    @Label("Sleep Time")
    @Timespan(Timespan.NANOSECONDS)
    public long time;
}

src/java.base/share/classes/java/lang/Thread.java:

    public static void yield() {
        if (currentThread() instanceof VirtualThread vthread) {
            vthread.tryYield();
        } else {
            yield0();
        }
    }

    private static native void yield0();

    /**
     * Called before sleeping to create a jdk.ThreadSleep event.
     */
    private static ThreadSleepEvent beforeSleep(long nanos) {
        try {
            ThreadSleepEvent event = new ThreadSleepEvent();
            if (event.isEnabled()) {
                event.time = nanos;
                event.begin();
                return event;
            }
        } catch (OutOfMemoryError e) {
            // ignore
        }
        return null;
    }


    /**
     * Called after sleeping to commit the jdk.ThreadSleep event.
     */
    private static void afterSleep(ThreadSleepEvent event) {
        if (event != null) {
            try {
                event.commit();
            } catch (OutOfMemoryError e) {
                // ignore
            }
        }
    }

    /**
     * Sleep for the specified number of nanoseconds, subject to the precision
     * and accuracy of system timers and schedulers.
     */
    private static void sleepNanos(long nanos) throws InterruptedException {
        ThreadSleepEvent event = beforeSleep(nanos);
        try {
            if (currentThread() instanceof VirtualThread vthread) {
                vthread.sleepNanos(nanos);
            } else {
                sleepNanos0(nanos);
            }
        } finally {
            afterSleep(event);
        }
    }

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 20 ms
profiling true true 10 ms

Event fields with their types and descriptions
Field Type Description
time long: nanos Sleep Time

Examples 3
Example event data values and properties
startTime long: millis
448067217622
time long: nanos
10000000
Example event data values and properties
startTime long: millis
453993411013
time long: nanos
9000000
Example event data values and properties
startTime long: millis
913392807
time long: nanos
5000000

FileRead

throttle default profiling startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/FileReadEvent.java

Category: Java Application

Excludes in stack trace: java.nio.channels.FileChannel, java.io.DataInputStream, java.io.FileInputStream, java.io.InputStream, java.io.RandomAccessFile, sun.nio.ch.ChannelInputStream, sun.nio.ch.FileChannelImpl

Reading data from a file

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/java.base/share/classes/jdk/internal/event/FileReadEvent.java:

package jdk.internal.event;

/**
 * Event recording file reads.
 */
public final class FileReadEvent extends Event {

    // The order of these fields must be the same as the parameters in
    // commit(..., String, long, boolean)
    public String path;
    public long bytesRead;
    public boolean endOfFile;

    public static boolean enabled() {
        // Generated by JFR
        return false;
    }

    public static long timestamp() {
        // Generated by JFR
        return 0L;
    }

    public static boolean shouldThrottleCommit(long duration, long end) {
        // Generated by JFR

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

/**
 * This class registers all mirror events.
 */
final class MirrorEvents {
    private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();

    // Add mirror event mapping here. See MirrorEvent class for details.
    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);

src/jdk.jfr/share/classes/jdk/jfr/events/FileReadEvent.java:

@Name(Type.EVENT_NAME_PREFIX + "FileRead")
@Label("File Read")
@Category("Java Application")
@Description("Reading data from a file")
@StackFilter({"java.nio.channels.FileChannel",
              "java.io.DataInputStream",
              "java.io.FileInputStream",
              "java.io.InputStream",
              "java.io.RandomAccessFile",
              "sun.nio.ch.ChannelInputStream",
              "sun.nio.ch.FileChannelImpl"})
@Throttle
public final class FileReadEvent extends MirrorEvent {

    @Label("Path")
    @Description("Full path of the file, or N/A if a file descriptor was used to create the stream, for example System.in")
    public String path;

    @Label("Bytes Read")
    @Description("Number of bytes read from the file (possibly 0)")
    @DataAmount
    public long bytesRead;

    @Label("End of File")

src/java.base/share/classes/java/io/FileInputStream.java:

     * @return     the next byte of data, or {@code -1} if the end of the
     *             file is reached.
     * @throws     IOException {@inheritDoc}
     */
    @Override
    public int read() throws IOException {
        if (jfrTracing && FileReadEvent.enabled()) {
            return traceRead0();
        }
        return read0();
    }

src/java.base/share/classes/java/io/FileInputStream.java:

    private native int read0() throws IOException;

    private int traceRead0() throws IOException {
        int result = 0;
        long bytesRead = 0;
        long start = FileReadEvent.timestamp();
        try {
            result = read0();
            if (result < 0) {
                bytesRead = -1;
            } else {
                bytesRead = 1;
            }
        } finally {
            FileReadEvent.offer(start, path, bytesRead);
        }
        return result;
    }

src/java.base/share/classes/java/io/FileInputStream.java:

     * @throws    IOException If an I/O error has occurred.
     */
    private native int readBytes(byte[] b, int off, int len) throws IOException;

    private int traceReadBytes(byte b[], int off, int len) throws IOException {
        int bytesRead = 0;
        long start = FileReadEvent.timestamp();
        try {
            bytesRead = readBytes(b, off, len);
        } finally {
            FileReadEvent.offer(start, path, bytesRead);
        }
        return bytesRead;
    }

src/java.base/share/classes/java/io/FileInputStream.java:

     *             {@code -1} if there is no more data because the end of
     *             the file has been reached.
     * @throws     IOException  if an I/O error occurs.
     */
    @Override
    public int read(byte[] b) throws IOException {
        if (jfrTracing && FileReadEvent.enabled()) {
            return traceReadBytes(b, 0, b.length);
        }
        return readBytes(b, 0, b.length);
    }

src/java.base/share/classes/java/io/FileInputStream.java:

     * @throws     NullPointerException {@inheritDoc}
     * @throws     IndexOutOfBoundsException {@inheritDoc}
     * @throws     IOException  if an I/O error occurs.
     */
    @Override
    public int read(byte[] b, int off, int len) throws IOException {
        if (jfrTracing && FileReadEvent.enabled()) {
            return traceReadBytes(b, off, len);
        }
        return readBytes(b, off, len);
    }

src/java.base/share/classes/java/io/RandomAccessFile.java:

     *             file has been reached.
     * @throws     IOException  if an I/O error occurs. Not thrown if
     *                          end-of-file has been reached.
     */
    public int read() throws IOException {
        if (jfrTracing && FileReadEvent.enabled()) {
            return traceRead0();
        }
        return read0();

src/java.base/share/classes/java/io/RandomAccessFile.java:

    private native int read0() throws IOException;

    private int traceRead0() throws IOException {
        int result = 0;
        long bytesRead = 0;
        long start = FileReadEvent.timestamp();
        try {
            result = read0();
            if (result < 0) {

src/java.base/share/classes/java/io/RandomAccessFile.java:

                bytesRead = -1;
            } else {
                bytesRead = 1;
            }
        } finally {
            FileReadEvent.offer(start, path, bytesRead);
        }
        return result;
    }

src/java.base/share/classes/java/io/RandomAccessFile.java:

     * @param     off the start offset of the data.
     * @param     len the number of bytes to read.
     * @throws    IOException If an I/O error has occurred.
     */
    private int readBytes(byte[] b, int off, int len) throws IOException {
        if (jfrTracing && FileReadEvent.enabled()) {
            return traceReadBytes0(b, off, len);
        }
        return readBytes0(b, off, len);

src/java.base/share/classes/java/io/RandomAccessFile.java:

    private native int readBytes0(byte[] b, int off, int len) throws IOException;

    private int traceReadBytes0(byte b[], int off, int len) throws IOException {
        int bytesRead = 0;
        long start = FileReadEvent.timestamp();
        try {
            bytesRead = readBytes0(b, off, len);
        } finally {
            FileReadEvent.offer(start, path, bytesRead);
        }
        return bytesRead;
    }

src/java.base/share/classes/java/io/RandomAccessFile.java:

     *             of file is encountered before even one byte is read.
     * @throws     IOException  if an I/O error occurs.
     */

    public final String readLine() throws IOException {
        if (jfrTracing && FileReadEvent.enabled()) {
            long bytesRead = 0;
            long start = FileReadEvent.timestamp();
            try {
                String result = implReadLine();
                bytesRead = result == null ? 0 : result.length();
                return result;
            } finally {
                FileReadEvent.offer(start, path, bytesRead);
            }
        }
        return implReadLine();

src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:

    @Override
    public int read(ByteBuffer dst) throws IOException {
        if (jfrTracing && FileReadEvent.enabled()) {
            return traceImplRead(dst);
        }
        return implRead(dst);

src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:

    private int traceImplRead(ByteBuffer dst) throws IOException {
        int bytesRead = 0;
        long start = FileReadEvent.timestamp();
        try {
            bytesRead = implRead(dst);
        } finally {
            FileReadEvent.offer(start, path, bytesRead);
        }
        return bytesRead;
    }

    @Override
    public long read(ByteBuffer[] dsts, int offset, int length) throws IOException {
        if (jfrTracing && FileReadEvent.enabled()) {
            return traceImplRead(dsts, offset, length);
        }
        return implRead(dsts, offset, length);

src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:

    private long traceImplRead(ByteBuffer[] dsts, int offset, int length) throws IOException {
        long bytesRead = 0;
        long start = FileReadEvent.timestamp();
        try {
            bytesRead = implRead(dsts, offset, length);
        } finally {
            FileReadEvent.offer(start, path, bytesRead);
        }
        return bytesRead;
    }

src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:

    @Override
    public int read(ByteBuffer dst, long position) throws IOException {
        if (jfrTracing && FileReadEvent.enabled()) {
            return traceImplRead(dst, position);
        }
        return implRead(dst, position);

src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:

    private int traceImplRead(ByteBuffer dst, long position) throws IOException {
        int bytesRead = 0;
        long start = FileReadEvent.timestamp();
        try {
            bytesRead = implRead(dst, position);
        } finally {
            FileReadEvent.offer(start, path, bytesRead);
        }
        return bytesRead;
    }

src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:

    @Override
    public int write(ByteBuffer src, long position) throws IOException {
        if (jfrTracing && FileReadEvent.enabled()) {
            return traceImplWrite(src, position);
        }
        return implWrite(src, position);

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold throttle
default true true 1 ms 100/s 25+
profiling true true 1 ms 300/s 25+

Event fields with their types and descriptions
Field Type Description
path string Path Full path of the file, or N/A if a file descriptor was used to create the stream, for example System.in
bytesRead long: bytes Bytes Read Number of bytes read from the file (possibly 0)
endOfFile boolean End of File If end of file was reached

Examples 3
Example event data values and properties
bytesRead long: bytes
750
endOfFile boolean
false
path string
/opt/hostedtoolcache/Java_SapMachine_jdk/25.0.4-1/x64/conf/security/java.security
startTime long: millis
378784149
Example event data values and properties
bytesRead long: bytes
8192
endOfFile boolean
false
path string
/tmp/jar_cache12334624613536327917.tmp
startTime long: millis
448873842903
Example event data values and properties
bytesRead long: bytes
1493
endOfFile boolean
false
path string
/tmp/jar_cache3220599901691524981.tmp
startTime long: millis
454536628061

FileForce

default profiling startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/FileForceEvent.java

Category: Java Application

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Force updates to be written to file

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/java.base/share/classes/jdk/internal/event/FileForceEvent.java:

package jdk.internal.event;

/**
 * A JFR event for forced updates written to files.  This event is mirrored in
 * {@code jdk.jfr.events.FileForceEvent } where the event annotations are
 * provided.  Some of the methods are replaced by generated
 * methods when jfr is enabled.  Note that the order of the arguments of the
 * {@link #commit(long, long, String, boolean)} method
 * must be the same as the order of the fields.
 */
public class FileForceEvent extends Event {

    // THE ORDER OF THE FOLLOWING FIELDS IS IMPORTANT!
    // The order must match the argument order of the generated commit method.
    public String path;
    public boolean metaData;

    /**
     * Helper method to offer the data needed to potentially commit an event.
     * The duration of the operation is computed using the current
     * timestamp and the given start time.  If the duration is meets
     * or exceeds the configured value (determined by calling the generated method
     * {@link #shouldCommit(long)}), an event will be emitted by calling
     * {@link #commit(long, long, String, boolean)}.

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

/**
 * This class registers all mirror events.
 */
final class MirrorEvents {
    private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();

    // Add mirror event mapping here. See MirrorEvent class for details.
    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);

src/jdk.jfr/share/classes/jdk/jfr/events/FileForceEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.Type;

@Name(Type.EVENT_NAME_PREFIX + "FileForce")
@Label("File Force")
@Category("Java Application")
@Description("Force updates to be written to file")
public final class FileForceEvent extends MirrorEvent {

    // The order of these fields must be the same as the parameters in
    // commit(..., String, boolean)

    @Label("Path")
    @Description("Full path of the file")
    public String path;

    @Label("Update Metadata")
    @Description("Whether the file metadata is updated")
    public boolean metaData;

src/java.base/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java:

    private void implForce(boolean metaData) throws IOException {
        try {
            begin();
            nd.force(fdObj, metaData);
        } finally {
            end();
        }
    }

    @Override
    public void force(boolean metaData) throws IOException {
        if (!FileForceEvent.enabled()) {
            implForce(metaData);
            return;
        }
        long start = FileForceEvent.timestamp();
        implForce(metaData);
        FileForceEvent.offer(start, path, metaData);
    }

    // -- file locking --

    /**
     * Task that initiates locking operation and handles completion result.
     */
    private class LockTask<A> implements Runnable, Iocp.ResultHandler {
        private final long position;
        private final FileLockImpl fli;
        private final PendingFuture<FileLock,A> result;

src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:

                } finally {
                    Blocker.end(attempted);
                }
            } while ((rv == IOStatus.INTERRUPTED) && isOpen());
        } finally {
            threads.remove(ti);
            endBlocking(rv > -1);
            assert IOStatus.check(rv);
        }
    }

    @Override
    public void force(boolean metaData) throws IOException {
        if (!FileForceEvent.enabled()) {
            implForce(metaData);
            return;
        }
        long start = FileForceEvent.timestamp();
        implForce(metaData);
        FileForceEvent.offer(start, path, metaData);
    }

    // Assume at first that the underlying kernel supports sendfile/equivalent;
    // set this to true if we find out later that it doesn't
    //
    private static volatile boolean transferToDirectNotSupported;

    // Assume at first that the underlying kernel supports copy_file_range/equivalent;
    // set this to true if we find out later that it doesn't
    //
    private static volatile boolean transferFromDirectNotSupported;

src/java.base/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java:

                do {
                    n = nd.force(fdObj, metaData);
                } while ((n == IOStatus.INTERRUPTED) && isOpen());
            } finally {
                end(n >= 0);
            }
        } finally {
            threads.remove(ti);
        }
    }

    @Override
    public void force(boolean metaData) throws IOException {
        if (!FileForceEvent.enabled()) {
            implForce(metaData);
            return;
        }
        long start = FileForceEvent.timestamp();
        implForce(metaData);
        FileForceEvent.offer(start, path, metaData);
    }

    @Override
    <A> Future<FileLock> implLock(final long position,
                                  final long size,
                                  final boolean shared,
                                  final A attachment,
                                  final CompletionHandler<FileLock,? super A> handler)
    {
        if (shared && !reading)
            throw new NonReadableChannelException();

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold
default true true 20 ms
profiling true true 10 ms

Event fields with their types and descriptions
Field Type Description
path string Path Full path of the file
metaData boolean Update Metadata Whether the file metadata is updated

Examples 3
Example event data values and properties
metaData boolean
true
path string
/tmp/jfr_sample4646412869330140946.tmp
startTime long: millis
2501048656
Example event data values and properties
metaData boolean
true
path string
/tmp/jfr_sample13137898057837233450.tmp
startTime long: millis
2580487987
Example event data values and properties
metaData boolean
true
path string
/tmp/jfr_sample7950200855328356358.tmp
startTime long: millis
2397163658

FinalFieldMutation

default profiling startTime duration 26 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/FinalFieldMutationEvent.java

Category: Java Application

Excludes in stack trace: java.lang.reflect.Field, java.lang.reflect.ReflectAccess, java.lang.invoke.MethodHandles$Lookup

The event only represents a sample.There might be more mutations of the same final field, possibly with different stack traces.

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/java.base/share/classes/jdk/internal/event/FinalFieldMutationEvent.java:

package jdk.internal.event;

import java.lang.reflect.Field;

public class FinalFieldMutationEvent extends Event {

    public Class<?> declaringClass;
    public String fieldName;

    /**
     * We throttle FinalFieldMutation JFR events by generating only one event per field
     * during each JFR epoch.
     *
     * An event is emitted if enabled, the epoch encoded in the root instance differs
     * from the current epoch, and a thread exclusively updates to the current epoch.
     */
    public static void offer(Field root) {
        if (enabled() && tryUpdateEpoch(root)) {
            var event = new FinalFieldMutationEvent();
            event.declaringClass = root.getDeclaringClass();
            event.fieldName = root.getName();
            event.commit();
        }
    }

    private static boolean tryUpdateEpoch(Field root) {
        // Generated by JFR
        return false;
    }

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
        register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
        register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
        register("jdk.internal.event.FinalFieldMutationEvent", FinalFieldMutationEvent.class);
    };

    private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
        mirrorLookup.put(eventClassName, mirrorClass);
    }

    static Class<? extends MirrorEvent> find(Class<? extends jdk.internal.event.Event> eventClass) {
        return find(Utils.isJDKClass(eventClass), eventClass.getName());
    }

    static Class<? extends MirrorEvent> find(boolean bootClassLoader, String name) {

src/jdk.jfr/share/classes/jdk/jfr/events/FinalFieldMutationEvent.java:

@Category("Java Application")
@Label("Final Field Mutation Sample")
@Description("The event only represents a sample." +
        "There might be more mutations of the same final field, possibly with different stack traces.")
@Name(Type.EVENT_NAME_PREFIX + "FinalFieldMutation")
@RemoveFields("duration")
@StackFilter({
        "java.lang.reflect.Field",
        "java.lang.reflect.ReflectAccess",
        "java.lang.invoke.MethodHandles$Lookup"
})
public final class FinalFieldMutationEvent extends MirrorEvent {

    @Label("Declaring Class")
    @Description("Declaring class with final field")
    public Class<?> declaringClass;

    @Label("Field Name")
    @Description("Field name of final field")
    public String fieldName;

}

src/java.base/share/classes/java/lang/reflect/Field.java:

                        WARNING: Mutating final fields will be blocked in a future release unless final field mutation is enabled
                        """, warningMsg, targetModule);
            }
        } else if (mode == ModuleBootstrap.IllegalFinalFieldMutation.DEBUG) {
            // print warning and stack trace
            var sb = new StringBuilder(finalFieldMutationWarning(caller, unreflect));
            StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE)
                    .forEach(sf -> {
                        sb.append(System.lineSeparator()).append("\tat " + sf);
                    });
            VM.initialErr().println(sb);
        }

        FinalFieldMutationEvent.offer(root);
    }

    /**
     * Returns true if this final field is "deeply accessible" to the caller.
     * The field is deeply accessible if declaring class is in a package that is open
     * to the caller's module, or the field is public in a public class that is exported
     * to the caller's module.
     *
     * Updates to the module of the declaring class at runtime with {@code Module.addExports}
     * or {@code Module.addOpens} have no impact on the result of this method.
     */

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default true true
profiling true true

Event fields with their types and descriptions
Field Type Description
declaringClass Class Declaring Class Declaring class with final field
fieldName string Field Name Field name of final field

FileWrite

throttle default profiling startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/FileWriteEvent.java

Category: Java Application

Excludes in stack trace: java.nio.channels.FileChannel, java.io.DataOutputStream, java.io.FileOutputStream, java.io.OutputStream, java.io.RandomAccessFile, sun.nio.ch.ChannelOutputStream, sun.nio.ch.FileChannelImpl

Writing data to a file

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/java.base/share/classes/jdk/internal/event/FileWriteEvent.java:

package jdk.internal.event;

/**
 * Event recording file writes.
 */
public final class FileWriteEvent extends Event {

    // The order of these fields must be the same as the parameters in
    // commit(..., String, long)
    public String path;
    public long bytesWritten;

    public static boolean enabled() {
        // Generated by JFR
        return false;
    }

    public static long timestamp() {
        // Generated by JFR
        return 0L;
    }

    public static boolean shouldThrottleCommit(long duration, long end) {
        // Generated by JFR
        return false;

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

/**
 * This class registers all mirror events.
 */
final class MirrorEvents {
    private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();

    // Add mirror event mapping here. See MirrorEvent class for details.
    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);

src/jdk.jfr/share/classes/jdk/jfr/events/FileWriteEvent.java:

@Name(Type.EVENT_NAME_PREFIX + "FileWrite")
@Label("File Write")
@Category("Java Application")
@Description("Writing data to a file")
@StackFilter({"java.nio.channels.FileChannel",
              "java.io.DataOutputStream",
              "java.io.FileOutputStream",
              "java.io.OutputStream",
              "java.io.RandomAccessFile",
              "sun.nio.ch.ChannelOutputStream",
              "sun.nio.ch.FileChannelImpl"})
@Throttle
public final class FileWriteEvent extends MirrorEvent {

    @Label("Path")
    @Description("Full path of the file, or N/A if a file descriptor was used to create the stream, for example System.out and System.err")
    public String path;

    @Label("Bytes Written")
    @Description("Number of bytes written to the file")
    @DataAmount
    public long bytesWritten;
}

src/java.base/share/classes/java/io/RandomAccessFile.java:

     * Writes the specified byte to this file. The write starts at
     * the current file pointer.
     *
     * @param      b   the {@code byte} to be written.
     * @throws     IOException  if an I/O error occurs.
     */
    public void write(int b) throws IOException {
        if (jfrTracing && FileWriteEvent.enabled()) {
            traceImplWrite(b);
            return;
        }
        implWrite(b);
    }

src/java.base/share/classes/java/io/RandomAccessFile.java:

        } finally {
            Blocker.end(attempted);
        }
    }

    private void traceImplWrite(int b) throws IOException {
        long bytesWritten = 0;
        long start = FileWriteEvent.timestamp();
        try {
            implWrite(b);
            bytesWritten = 1;
        } finally {
            FileWriteEvent.offer(start, path, bytesWritten);
        }
    }

    private native void write0(int b) throws IOException;

src/java.base/share/classes/java/io/RandomAccessFile.java:

     *
     * @param     b the data to be written
     * @param     off the start offset in the data
     * @param     len the number of bytes that are written
     * @throws    IOException If an I/O error has occurred.
     */
    private void writeBytes(byte[] b, int off, int len) throws IOException {
        if (jfrTracing && FileWriteEvent.enabled()) {
            traceImplWriteBytes(b, off, len);
            return;
        }
        implWriteBytes(b, off, len);
    }

src/java.base/share/classes/java/io/RandomAccessFile.java:

        } finally {
            Blocker.end(attempted);
        }
    }

    private void traceImplWriteBytes(byte b[], int off, int len) throws IOException {
        long bytesWritten = 0;
        long start = FileWriteEvent.timestamp();
        try {
            implWriteBytes(b, off, len);
            bytesWritten = len;
        } finally {
            FileWriteEvent.offer(start, path, bytesWritten);
        }
    }

    private native void writeBytes0(byte[] b, int off, int len) throws IOException;

src/java.base/share/classes/java/io/FileOutputStream.java:

     *     advances the position to the end of file
     */
    private native void write(int b, boolean append) throws IOException;

    private void traceWrite(int b, boolean append) throws IOException {
        long bytesWritten = 0;
        long start = FileWriteEvent.timestamp();
        try {
            write(b, append);
            bytesWritten = 1;
        } finally {
            FileWriteEvent.offer(start, path, bytesWritten);
        }
    }

    /**

src/java.base/share/classes/java/io/FileOutputStream.java:

     * @param      b   the byte to be written.
     * @throws     IOException  if an I/O error occurs.
     */
    @Override
    public void write(int b) throws IOException {
        boolean append = FD_ACCESS.getAppend(fd);
        if (jfrTracing && FileWriteEvent.enabled()) {
            traceWrite(b, append);
            return;
        }
        write(b, append);

src/java.base/share/classes/java/io/FileOutputStream.java:

     */
    private native void writeBytes(byte[] b, int off, int len, boolean append)
        throws IOException;

    private void traceWriteBytes(byte b[], int off, int len, boolean append) throws IOException {
        long bytesWritten = 0;
        long start = FileWriteEvent.timestamp();
        try {
            writeBytes(b, off, len, append);
            bytesWritten = len;
        } finally {
            FileWriteEvent.offer(start, path, bytesWritten);
        }
    }

    /**

src/java.base/share/classes/java/io/FileOutputStream.java:

     * @param      b   {@inheritDoc}
     * @throws     IOException  {@inheritDoc}
     */
    @Override
    public void write(byte[] b) throws IOException {
        boolean append = FD_ACCESS.getAppend(fd);
        if (jfrTracing && FileWriteEvent.enabled()) {
            traceWriteBytes(b, 0, b.length, append);
            return;
        }
        writeBytes(b, 0, b.length, append);

src/java.base/share/classes/java/io/FileOutputStream.java:

     * @throws     IOException  if an I/O error occurs.
     * @throws     IndexOutOfBoundsException {@inheritDoc}
     */
    @Override
    public void write(byte[] b, int off, int len) throws IOException {
        boolean append = FD_ACCESS.getAppend(fd);
        if (jfrTracing && FileWriteEvent.enabled()) {
            traceWriteBytes(b, off, len, append);
            return;
        }
        writeBytes(b, off, len, append);

src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:

    @Override
    public int write(ByteBuffer src) throws IOException {
        if (jfrTracing && FileWriteEvent.enabled()) {
            return traceImplWrite(src);
        }
        return implWrite(src);
    }

src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:

    private int traceImplWrite(ByteBuffer src) throws IOException {
        int bytesWritten = 0;
        long start = FileWriteEvent.timestamp();
        try {
            bytesWritten = implWrite(src);
        } finally {
            FileWriteEvent.offer(start, path, bytesWritten);
        }
        return bytesWritten;
    }

    @Override
    public long write(ByteBuffer[] srcs, int offset, int length) throws IOException {
        if (jfrTracing && FileWriteEvent.enabled()) {
            return traceImplWrite(srcs, offset, length);
        }
        return implWrite(srcs, offset, length);
    }

src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:

    private long traceImplWrite(ByteBuffer[] srcs, int offset, int length) throws IOException {
        long bytesWritten = 0;
        long start = FileWriteEvent.timestamp();
        try {
            bytesWritten = implWrite(srcs, offset, length);
        } finally {
            FileWriteEvent.offer(start, path, bytesWritten);
        }
        return bytesWritten;
    }

src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:

    private int traceImplWrite(ByteBuffer src, long position) throws IOException {
        int bytesWritten = 0;
        long start = FileWriteEvent.timestamp();
        try {
            bytesWritten = implWrite(src, position);
        } finally {
            FileWriteEvent.offer(start, path, bytesWritten);
        }
        return bytesWritten;
    }

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold throttle
default true true 1 ms 100/s 25+
profiling true true 1 ms 300/s 25+

Event fields with their types and descriptions
Field Type Description
path string Path Full path of the file, or N/A if a file descriptor was used to create the stream, for example System.out and System.err
bytesWritten long: bytes Bytes Written Number of bytes written to the file

Examples 3
Example event data values and properties
bytesWritten long: bytes
1
path string
/tmp/jfr_agent15005275580992799933.jar
startTime long: millis
405304748
Example event data values and properties
bytesWritten long: bytes
8187
path string
/tmp/jar_cache858886477500664727.tmp
startTime long: millis
484996299143
Example event data values and properties
bytesWritten long: bytes
8596
path string
/tmp/jar_cache13473187686794800317.tmp
startTime long: millis
481019634640

VirtualThreadEnd

startTime duration 19 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadEndEvent.java

Category: Java Application

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

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/java.base/share/classes/jdk/internal/event/VirtualThreadEndEvent.java:

package jdk.internal.event;

/**
 * Event recording that a virtual thread has terminated.
 */
public class VirtualThreadEndEvent extends Event {
    private static final VirtualThreadEndEvent EVENT = new VirtualThreadEndEvent();

    /**
     * Returns {@code true} if event is enabled, {@code false} otherwise.
     */
    public static boolean isTurnedOn() {
        return EVENT.isEnabled();
    }

    public long javaThreadId;
}

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
        register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
        register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
        register("jdk.internal.event.FinalFieldMutationEvent", FinalFieldMutationEvent.class);
    };

    private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
        mirrorLookup.put(eventClassName, mirrorClass);

src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadEndEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;

@Category("Java Application")
@Label("Virtual Thread End")
@Name("jdk.VirtualThreadEnd")
@RemoveFields({"duration", "stackTrace"})
public final class VirtualThreadEndEvent extends MirrorEvent {

    @Label("Thread Id")
    public long javaThreadId;

}

src/java.base/share/classes/java/lang/VirtualThread.java:

            event.commit();
        }

        Object bindings = Thread.scopedValueBindings();
        try {
            runWith(bindings, task);
        } catch (Throwable exc) {
            dispatchUncaughtException(exc);
        } finally {
            // pop any remaining scopes from the stack, this may block
            StackableScope.popAll();

            // emit JFR event if enabled
            if (VirtualThreadEndEvent.isTurnedOn()) {
                var event = new VirtualThreadEndEvent();
                event.javaThreadId = threadId();
                event.commit();
            }
        }
    }

    /**
     * Mounts this virtual thread onto the current platform thread. On
     * return, the current thread is the virtual thread.
     */
    @ChangesCurrentThread

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling false

Event fields with their types and descriptions
Field Type Description
javaThreadId long Thread Id

Examples 3
Example event data values and properties
javaThreadId long
42
startTime long: millis
456458903
Example event data values and properties
javaThreadId long
52
startTime long: millis
640862601
Example event data values and properties
javaThreadId long
38
startTime long: millis
555340108

SocketRead

throttle default profiling startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/SocketReadEvent.java

Category: Java Application

Excludes in stack trace: java.io.InputStream, java.net.Socket$SocketInputStream, java.nio.channels.SocketChannel, sun.nio.ch.SocketInputStream

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Reading data from a socket

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/java.base/share/classes/jdk/internal/event/SocketReadEvent.java:

/**
 * A JFR event for socket read operations.  This event is mirrored in
 * {@code jdk.jfr.events.SocketReadEvent } where the metadata for the event is
 * provided with annotations.  Some of the methods are replaced by generated
 * methods when jfr is enabled.  Note that the order of the arguments of the
 * {@link #commit(long, long, String, String, int, long, long, boolean)} method
 * must be the same as the order of the fields.
 */
public class SocketReadEvent extends Event {

    // THE ORDER OF THE FOLLOWING FIELDS IS IMPORTANT!
    // The order must match the argument order of the generated commit method.
    public String host;
    public String address;
    public int port;
    public long timeout;
    public long bytesRead;
    public boolean endOfStream;

    /**

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

final class MirrorEvents {
    private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();

    // Add mirror event mapping here. See MirrorEvent class for details.
    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
        register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
        register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);

src/jdk.jfr/share/classes/jdk/jfr/events/SocketReadEvent.java:

@Name(Type.EVENT_NAME_PREFIX + "SocketRead")
@Label("Socket Read")
@Category("Java Application")
@Description("Reading data from a socket")
@StackFilter({"java.io.InputStream",
              "java.net.Socket$SocketInputStream",
              "java.nio.channels.SocketChannel",
              "sun.nio.ch.SocketInputStream"})
@Throttle
public final class SocketReadEvent extends MirrorEvent {

    @Label("Remote Host")
    public String host;

    @Label("Remote Address")
    public String address;

    @Label("Remote Port")
    public int port;

    @Label("Timeout Value")

src/java.base/share/classes/java/net/Socket.java:

        private final InputStream in;
        SocketInputStream(Socket parent, InputStream in) {
            this.parent = parent;
            this.in = in;
        }
        @Override
        public int read() throws IOException {
            byte[] a = new byte[1];
            int n = read(a, 0, 1);
            return (n > 0) ? (a[0] & 0xff) : -1;
        }
        @Override
        public int read(byte[] b, int off, int len) throws IOException {
            if (!SocketReadEvent.enabled()) {
                return implRead(b, off, len);
            }
            long start = SocketReadEvent.timestamp();
            int nbytes = implRead(b, off, len);
            SocketReadEvent.offer(start, nbytes, parent.getRemoteSocketAddress(), getSoTimeout());
            return nbytes;
        }

        private int implRead(byte[] b, int off, int len) throws IOException {
            try {
                return in.read(b, off, len);
            } catch (SocketTimeoutException e) {
                throw e;
            } catch (InterruptedIOException e) {
                Thread thread = Thread.currentThread();
                if (thread.isVirtual() && thread.isInterrupted()) {

src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java:

        } finally {
            readLock.unlock();
        }
    }

    @Override
    public int read(ByteBuffer buf) throws IOException {
        if (!SocketReadEvent.enabled()) {
            return implRead(buf);
        }
        long start = SocketReadEvent.timestamp();
        int nbytes = implRead(buf);
        SocketReadEvent.offer(start, nbytes, remoteAddress(), 0);
        return nbytes;
    }


    @Override
    public long read(ByteBuffer[] dsts, int offset, int length)
        throws IOException
    {
        if (!SocketReadEvent.enabled()) {
            return implRead(dsts, offset, length);
        }
        long start = SocketReadEvent.timestamp();
        long nbytes = implRead(dsts, offset, length);
        SocketReadEvent.offer(start, nbytes, remoteAddress(), 0);
        return nbytes;
    }

    /**
     * Marks the beginning of a write operation that might block.

src/java.base/share/classes/sun/nio/ch/SocketInputStream.java:

    private int implRead(byte[] b, int off, int len, int timeout) throws IOException {
        if (timeout > 0) {
            long nanos = MILLISECONDS.toNanos(timeout);
            return sc.blockingRead(b, off, len, nanos);
        } else {
            return sc.blockingRead(b, off, len, 0);
        }
    }

    @Override
    public int read(byte[] b, int off, int len) throws IOException {
        int timeout = timeoutSupplier.getAsInt();
        if (!SocketReadEvent.enabled()) {
            return implRead(b, off, len, timeout);
        }
        long start = SocketReadEvent.timestamp();
        int n = implRead(b, off, len, timeout);
        SocketReadEvent.offer(start, n, sc.remoteAddress(), timeout);
        return n;
    }

    @Override
    public int available() throws IOException {
        return sc.available();
    }

    @Override
    public void close() throws IOException {
        sc.close();

Event configuration settings across JFR profiles
Configuration enabled stackTrace threshold throttle
default true true 1 ms 100/s 25+
profiling true true 1 ms 300/s 25+

Event fields with their types and descriptions
Field Type Description
host string Remote Host
address string Remote Address
port int Remote Port
timeout long: millis Timeout Value
bytesRead long: bytes Bytes Read Number of bytes read from the socket
endOfStream boolean End of Stream If end of stream was reached

Examples 3
Example event data values and properties
address string
127.0.0.1
bytesRead long: bytes
64
endOfStream boolean
false
host string
127.0.0.1
port int
58276
startTime long: millis
2253438836
timeout long: millis
0
Example event data values and properties
address string
127.0.0.1
bytesRead long: bytes
64
endOfStream boolean
false
host string
127.0.0.1
port int
57362
startTime long: millis
3038126841
timeout long: millis
0
Example event data values and properties
address string
127.0.0.1
bytesRead long: bytes
64
endOfStream boolean
false
host string
127.0.0.1
port int
34299
startTime long: millis
1752187749
timeout long: millis
0

Java Application Statistics

JavaMonitorStatistics

default profiling startTime duration every chunk 25 27 28

Category: Java Application / Statistics

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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(FinalizerStatistics) {
#if INCLUDE_MANAGEMENT
  JfrFinalizerStatisticsEvent::generate_events();
#else
  log_debug(jfr, system)("Unable to generate requestable event FinalizerStatistics. The required jvm feature 'management' is missing.");
#endif
}

TRACE_REQUEST_FUNC(NativeMemoryUsage) {
  JfrNativeMemoryEvent::send_type_events(timestamp());
}

TRACE_REQUEST_FUNC(NativeMemoryUsageTotal) {
  JfrNativeMemoryEvent::send_total_event(timestamp());
}

TRACE_REQUEST_FUNC(JavaMonitorStatistics) {
  EventJavaMonitorStatistics event;
  event.set_count(ObjectSynchronizer::in_use_list_count());
  event.commit();
}

Event configuration settings across JFR profiles
Configuration enabled period
default true everyChunk
profiling true everyChunk

Event fields with their types and descriptions
Field Type Description
count ulong Monitors in Use Current number of in-use monitors

Examples 3
Example event data values and properties
count ulong
44
startTime long: millis
496741221751
Example event data values and properties
count ulong
2501
startTime long: millis
452600891759
Example event data values and properties
count ulong
4
startTime long: millis
364457364

JavaThreadStatistics

default profiling startTime duration every chunk 11 17 21 25 27 28

Category: Java Application / Statistics

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:

  EventSwapSpace event;
  physical_memory_size_type total_swap_space = 0;
  // Return value ignored - defaulting to 0 on failure.
  (void)os::total_swap_space(total_swap_space);
  event.set_totalSize(static_cast<s8>(total_swap_space));
  physical_memory_size_type free_swap_space = 0;
  // Return value ignored - defaulting to 0 on failure.
  (void)os::free_swap_space(free_swap_space);
  event.set_freeSize(static_cast<s8>(free_swap_space));
  event.commit();
}

TRACE_REQUEST_FUNC(JavaThreadStatistics) {
  EventJavaThreadStatistics event;
  event.set_activeCount(ThreadService::get_live_thread_count());
  event.set_daemonCount(ThreadService::get_daemon_thread_count());
  event.set_accumulatedCount(ThreadService::get_total_thread_count());
  event.set_peakCount(ThreadService::get_peak_thread_count());
  event.commit();
}

TRACE_REQUEST_FUNC(GCHeapMemoryUsage) {
  MemoryUsage usage = Universe::heap()->memory_usage();
  EventGCHeapMemoryUsage event(UNTIMED);
  event.set_used(usage.used());

Event configuration settings across JFR profiles
Configuration enabled period
default true 1000 ms
profiling true 1000 ms

Event fields with their types and descriptions
Field Type Description
activeCount long Active Threads Number of live active threads including both daemon and non-daemon threads
daemonCount long Daemon Threads Number of live daemon threads
accumulatedCount long Accumulated Threads Number of threads created and also started since JVM start
peakCount long Peak Threads Peak live thread count since JVM start or when peak count was reset

Examples 3
Example event data values and properties
accumulatedCount long
430
activeCount long
21
daemonCount long
16
peakCount long
22
startTime long: millis
20862061309
Example event data values and properties
accumulatedCount long
1907
activeCount long
47
daemonCount long
46
peakCount long
297
startTime long: millis
487630207972
Example event data values and properties
accumulatedCount long
1954
activeCount long
70
daemonCount long
65
peakCount long
297
startTime long: millis
501308484920

ClassLoadingStatistics

default profiling startTime duration every chunk 11 17 21 25 27 28

Category: Java Application / Statistics

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_used(usage.used());
      event.set_committed(usage.committed());
      event.set_max(usage.max_size());
      event.set_starttime(timestamp());
      event.set_endtime(timestamp());
      event.commit();
    }
  }
}


TRACE_REQUEST_FUNC(ClassLoadingStatistics) {
#if INCLUDE_MANAGEMENT
  EventClassLoadingStatistics event;
  event.set_loadedClassCount(ClassLoadingService::loaded_class_count());
  event.set_unloadedClassCount(ClassLoadingService::unloaded_class_count());
  event.commit();
#else
  log_debug(jfr, system)("Unable to generate requestable event ClassLoadingStatistics. The required jvm feature 'management' is missing.");
#endif
}

class JfrClassLoaderStatsClosure : public ClassLoaderStatsClosure {
public:
  JfrClassLoaderStatsClosure() : ClassLoaderStatsClosure(nullptr) {}

Event configuration settings across JFR profiles
Configuration enabled period
default true 1000 ms
profiling true 1000 ms

Event fields with their types and descriptions
Field Type Description
loadedClassCount long Loaded Class Count Number of classes loaded since JVM start
unloadedClassCount long Unloaded Class Count Number of classes unloaded since JVM start

Examples 3
Example event data values and properties
loadedClassCount long
143558
startTime long: millis
495794687590
unloadedClassCount long
8372
Example event data values and properties
loadedClassCount long
4249
startTime long: millis
20862062582
unloadedClassCount long
407
Example event data values and properties
loadedClassCount long
132416
startTime long: millis
462354885743
unloadedClassCount long
3085

ClassLoaderStatistics

default profiling startTime duration every chunk 11 17 21 25 27 28

Category: Java Application / Statistics

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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:

  log_debug(jfr, system)("Unable to generate requestable event ClassLoadingStatistics. The required jvm feature 'management' is missing.");
#endif
}

class JfrClassLoaderStatsClosure : public ClassLoaderStatsClosure {
public:
  JfrClassLoaderStatsClosure() : ClassLoaderStatsClosure(nullptr) {}

  bool do_entry(oop const& key, ClassLoaderStats const& cls) {
    const ClassLoaderData* this_cld = cls._class_loader != nullptr ?
      java_lang_ClassLoader::loader_data_acquire(cls._class_loader) : nullptr;
    const ClassLoaderData* parent_cld = cls._parent != nullptr ?
      java_lang_ClassLoader::loader_data_acquire(cls._parent) : nullptr;
    EventClassLoaderStatistics event;
    event.set_classLoader(this_cld);
    event.set_parentClassLoader(parent_cld);
    event.set_classLoaderData((intptr_t)cls._cld);
    event.set_classCount(cls._classes_count);
    event.set_chunkSize(cls._chunk_sz);
    event.set_blockSize(cls._block_sz);
    event.set_hiddenClassCount(cls._hidden_classes_count);
    event.set_hiddenChunkSize(cls._hidden_chunk_sz);
    event.set_hiddenBlockSize(cls._hidden_block_sz);
    event.commit();
    return true;

Event configuration settings across JFR profiles
Configuration enabled period
default true everyChunk
profiling true everyChunk

Event fields with their types and descriptions
Field Type Description
classLoader ClassLoader Class Loader
parentClassLoader ClassLoader Parent Class Loader
classLoaderData ulong: address ClassLoaderData Pointer Pointer to the ClassLoaderData structure in the JVM
classCount long Classes Number of loaded classes
chunkSize ulong: bytes Total Chunk Size Total size of all allocated metaspace chunks (each chunk has several blocks)
blockSize ulong: bytes Total Block Size Total size of all allocated metaspace blocks (each chunk has several blocks)
hiddenClassCount long 15+ Hidden Classes Number of hidden classes
hiddenChunkSize ulong: bytes 15+ Total Hidden Classes Chunk Size Total size of all allocated metaspace chunks for hidden classes (each chunk has several blocks)
hiddenBlockSize ulong: bytes 15+ Total Hidden Classes Block Size Total size of all allocated metaspace blocks for hidden classes (each chunk has several blocks)

Examples 3
Example event data values and properties
blockSize ulong: bytes
4768
chunkSize ulong: bytes
6144
classCount long
2
classLoader ClassLoader
name string
null
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.4.1
name string
java/net
hidden boolean
false
modifiers int
0
name string
org/neo4j/codegen/CodeLoader
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/neo4j/codegen
classLoaderData ulong: address
140167440106336
hiddenBlockSize ulong: bytes
0
hiddenChunkSize ulong: bytes
0
hiddenClassCount long
0
parentClassLoader 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.4.1
name string
java/net
startTime long: millis
448951353591
Example event data values and properties
blockSize ulong: bytes
8466672
chunkSize ulong: bytes
8485888
classCount long
1540
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.4.1
name string
jdk/internal/loader
classLoaderData ulong: address
140618238130560
hiddenBlockSize ulong: bytes
0
hiddenChunkSize ulong: bytes
0
hiddenClassCount long
0
parentClassLoader ClassLoader
name string
platform
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
10
name string
jdk/internal/loader/ClassLoaders$PlatformClassLoader
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.4.1
name string
jdk/internal/loader
startTime long: millis
454658361861
Example event data values and properties
blockSize ulong: bytes
14507352
chunkSize ulong: bytes
14684160
classCount long
4033
classLoader ClassLoader
null
classLoaderData ulong: address
140367182833008
hiddenBlockSize ulong: bytes
165680
hiddenChunkSize ulong: bytes
271360
hiddenClassCount long
88
parentClassLoader ClassLoader
null
startTime long: millis
23161970616

ThreadAllocationStatistics

default profiling startTime every chunk 11 17 21 25 27 28

Category: Java Application / Statistics

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:

  GrowableArray<uint64_t> allocated(initial_size);
  GrowableArray<traceid> thread_ids(initial_size);
  JfrTicks time_stamp = JfrTicks::now();
  JfrJavaThreadIterator iter;
  while (iter.has_next()) {
    JavaThread* const jt = iter.next();
    assert(jt != nullptr, "invariant");
    allocated.append(jt->cooked_allocated_bytes());
    thread_ids.append(JFR_JVM_THREAD_ID(jt));
  }

  // Write allocation statistics to buffer.
  for(int i = 0; i < thread_ids.length(); i++) {
    EventThreadAllocationStatistics event(UNTIMED);
    event.set_allocated(allocated.at(i));
    event.set_thread(thread_ids.at(i));
    event.set_starttime(time_stamp);
    event.set_endtime(time_stamp);
    event.commit();
  }
}

/**
 *  PhysicalMemory event represents:
 *

Event configuration settings across JFR profiles
Configuration enabled period
default true everyChunk
profiling true everyChunk

Event fields with their types and descriptions
Field Type Description
allocated ulong: bytes Allocated Approximate number of bytes allocated since thread start
thread Thread Thread

Examples 3
Example event data values and properties
allocated ulong: bytes
0
startTime long: millis
453049846731
thread Thread
group ThreadGroup
name string
InnocuousThreadGroup
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Common-Cleaner
javaThreadId long
21
osName string
Common-Cleaner
osThreadId long
2552
virtual boolean
false
Example event data values and properties
allocated ulong: bytes
1312
startTime long: millis
8024967526
thread Thread
group ThreadGroup
name string
CarrierThreads
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
ForkJoinPool-1-worker-3
javaThreadId long
43
osName string
ForkJoinPool-1-worker-3
osThreadId long
5051
virtual boolean
false
Example event data values and properties
allocated ulong: bytes
7064
startTime long: millis
447754205507
thread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
netty-rpc-env-timeout
javaThreadId long
1696
osName string
netty-rpc-env-timeout
osThreadId long
4214
virtual boolean
false

FinalizerStatistics

default profiling startTime end of every chunk 18 21 25 27 28

Category: Java Application / Statistics

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Per class statistics about finalizers

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/jfrFinalizerStatisticsEvent.cpp:

static void send_event(const FinalizerEntry* fe, const InstanceKlass* ik, const JfrTicks& timestamp, Thread* thread) {
  assert(ik != nullptr, "invariant");
  assert(ik->has_finalizer(), "invariant");
  assert(thread != nullptr, "invariant");
  const char* const url = fe != nullptr ? fe->codesource() : nullptr;
  const traceid url_symbol_id = url != nullptr ? JfrSymbolTable::add(url) : 0;
  EventFinalizerStatistics event(UNTIMED);
  event.set_starttime(timestamp);
  event.set_endtime(timestamp);
  event.set_finalizableClass(ik);
  event.set_codeSource(url_symbol_id);
  if (fe == nullptr) {
    event.set_objects(0);
    event.set_totalFinalizersRun(0);
  } else {
    assert(fe->klass() == ik, "invariant");
    event.set_objects(fe->objects_on_heap());
    event.set_totalFinalizersRun(fe->total_finalizers_run());
  }
  event.commit();
}

void JfrFinalizerStatisticsEvent::send_unload_event(const InstanceKlass* ik) {
  if (!EventFinalizerStatistics::is_enabled()) {
    return;
  }
  Thread* const thread = Thread::current();
  ResourceMark rm(thread);
  send_event(FinalizerService::lookup(ik, thread), ik, JfrTicks::now(), thread);
}

// Finalizer events generated by the periodic task will all have the same timestamp.

class FinalizerStatisticsEventClosure : public FinalizerEntryClosure {
 private:

Event configuration settings across JFR profiles
Configuration enabled period
default true endChunk
profiling true endChunk

Event fields with their types and descriptions
Field Type Description
finalizableClass Class Class Overriding Finalize
codeSource Symbol Code Source URL from where the class was loaded
objects ulong Finalizable Objects on Heap Number of objects on heap that can be finalized
totalFinalizersRun ulong Finalizers Run Total number of finalizers run since JVM start

Examples 3
Example event data values and properties
codeSource Symbol
resource:///unique/apache-spark/spark-core_2.13-3.5.3.jar
finalizableClass 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.4.1
name string
java/net
hidden boolean
false
modifiers int
1
name string
org/sparkproject/jetty/util/resource/JarResource
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/sparkproject/jetty/util/resource
objects ulong
4
startTime long: millis
563460695537
totalFinalizersRun ulong
0
Example event data values and properties
codeSource Symbol
jrt:///jdk.zipfs
finalizableClass Class
classLoader ClassLoader
name string
platform
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
10
name string
jdk/internal/loader/ClassLoaders$PlatformClassLoader
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.4.1
name string
jdk/internal/loader
hidden boolean
false
modifiers int
0
name string
jdk/nio/zipfs/ZipFileSystem
package Package
exported boolean
false
module Module
classLoader ClassLoader
name string
platform
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
10
name string
jdk/internal/loader/ClassLoaders$PlatformClassLoader
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.4.1
name string
jdk/internal/loader
location string
jrt:/jdk.zipfs
name string
jdk.zipfs
version string
25.0.4.1
name string
jdk/nio/zipfs
objects ulong
2
startTime long: millis
449253185658
totalFinalizersRun ulong
0
Example event data values and properties
codeSource Symbol
resource:///shared/netty-buffer-4.1.114.Final.jar
finalizableClass 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.4.1
name string
java/net
hidden boolean
false
modifiers int
24
name string
io/netty/buffer/PoolArena$DirectArena
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
io/netty/buffer
objects ulong
16
startTime long: millis
454881448871
totalFinalizersRun ulong
0

DeprecatedInvocation

default profiling startTime stackTrace 22 25 27 28

Category: Java Application / Statistics

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

A unique invocation of a method that is annotated with @Deprecated. Packages and modules that are deprecated are ignored. At most 10 000 invocation sites and only the first invocation from a class is guaranteed to be included.

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/jni/jfrJniMethod.cpp:

  JfrEventSetting::set_enabled(JfrCPUTimeSampleEvent, rate > 0);
  JfrCPUTimeThreadSampling::set_rate(rate);
JVM_END

JVM_ENTRY_NO_ENV(void, jfr_set_cpu_period(JNIEnv* env, jclass jvm, jlong period_nanos))
  assert(period_nanos >= 0, "invariant");
  JfrEventSetting::set_enabled(JfrCPUTimeSampleEvent, period_nanos > 0);
  JfrCPUTimeThreadSampling::set_period(period_nanos);
JVM_END

NO_TRANSITION(void, jfr_set_miscellaneous(JNIEnv* env, jclass jvm, jlong event_type_id, jlong value))
  JfrEventSetting::set_miscellaneous(event_type_id, value);
  const JfrEventId typed_event_id = (JfrEventId)event_type_id;
  if (EventDeprecatedInvocation::eventId == typed_event_id) {
    JfrDeprecationManager::on_level_setting_update(value);
  }
NO_TRANSITION_END

NO_TRANSITION(jboolean, jfr_should_rotate_disk(JNIEnv* env, jclass jvm))
  return JfrChunkRotation::should_rotate() ? JNI_TRUE : JNI_FALSE;
NO_TRANSITION_END

NO_TRANSITION(jlong, jfr_get_type_id_from_string(JNIEnv * env, jclass jvm, jstring type))
  const char* type_name = env->GetStringUTFChars(type, nullptr);
  jlong id = JfrType::name_to_id(type_name);

Event configuration settings across JFR profiles
Configuration enabled level stackTrace
default true forRemoval true
profiling true forRemoval true

Event fields with their types and descriptions
Field Type Description
method Method Deprecated Method
invocationTime Ticks Invocation Time The time the deprecated method was invoked for the first time
forRemoval boolean For Removal

Examples 3
Example event data values and properties
forRemoval boolean
true
invocationTime Ticks
1329652614
method Method
descriptor string
()V
hidden boolean
false
modifiers int
9
name string
runFinalization
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
java/lang/System
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.4.1
name string
java/lang
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
32
lineNumber int
375
method Method
descriptor string
()V
hidden boolean
false
modifiers int
8
name string
spawnFinalizable
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.4.1
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.4.1
name string
jdk/internal/loader
location string
null
name string
null
version string
null
name string
jfr_sample
type FrameType
Interpreted
truncated boolean
true
startTime long: millis
15585428941
Example event data values and properties
forRemoval boolean
true
invocationTime Ticks
441718133997
method Method
descriptor string
(Ljava/lang/reflect/Field;)J
hidden boolean
false
modifiers int
1
name string
staticFieldOffset
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
sun/misc/Unsafe
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/jdk.unsupported
name string
jdk.unsupported
version string
25.0.4.1
name string
sun/misc
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
241
lineNumber int
265
method Method
descriptor string
()V
hidden boolean
false
modifiers int
8
name string
<clinit>
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.4.1
name string
java/net
hidden boolean
false
modifiers int
17
name string
org/apache/spark/unsafe/Platform
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/spark/unsafe
type FrameType
Interpreted
truncated boolean
true
startTime long: millis
454981288785
Example event data values and properties
forRemoval boolean
false
invocationTime Ticks
433706798455
method Method
descriptor string
()Z
hidden boolean
false
modifiers int
1
name string
isAccessible
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/reflect/AccessibleObject
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.4.1
name string
java/lang/reflect
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
5
lineNumber int
327
method Method
descriptor string
(Ljava/lang/reflect/AccessibleObject;)Ljava/lang/reflect/AccessibleObject;
hidden boolean
false
modifiers int
8
name string
setAccessibleWorkaround
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.4.1
name string
java/net
hidden boolean
false
modifiers int
16
name string
org/apache/commons/lang3/reflect/MemberUtils
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/commons/lang3/reflect
type FrameType
Interpreted
truncated boolean
true
startTime long: millis
449441346061

ExceptionStatistics

default profiling startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionStatisticsEvent.java

Category: Java Application / Statistics

Number of objects derived from java.lang.Throwable that have been created

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/java.base/share/classes/jdk/internal/event/ThrowableTracer.java:

                ErrorThrownEvent.commit(timestamp, message, clazz);
            }
            if (ExceptionThrownEvent.shouldThrottleCommit(timestamp)) {
                ExceptionThrownEvent.commit(timestamp, message, clazz);
            }
        }
        numThrowables.incrementAndGet();
    }

    public static void traceThrowable(Class<?> clazz, String message) {
        if (ExceptionThrownEvent.enabled()) {
            long timestamp = ErrorThrownEvent.timestamp();
            if (ExceptionThrownEvent.shouldThrottleCommit(timestamp)) {
                ExceptionThrownEvent.commit(timestamp, message, clazz);
            }
        }
        numThrowables.incrementAndGet();
    }

    public static void emitStatistics() {
        long timestamp = ExceptionStatisticsEvent.timestamp();
        ExceptionStatisticsEvent.commit(timestamp, numThrowables.get());
    }
}

src/java.base/share/classes/jdk/internal/event/ExceptionStatisticsEvent.java:

package jdk.internal.event;

/**
 * Event recording number of exceptions that has been created.
 */
public class ExceptionStatisticsEvent extends Event {

    public long throwables;

    public static void commit(long timestamp, long throwables) {
        // Generated by JFR
    }

    public static boolean enabled() {
        // Generated by JFR
        return false;
    }

    public static long timestamp() {
        // Generated by JFR
        return 0;
    }
}

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
        register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
        register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
        register("jdk.internal.event.FinalFieldMutationEvent", FinalFieldMutationEvent.class);
    };

    private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
        mirrorLookup.put(eventClassName, mirrorClass);
    }

    static Class<? extends MirrorEvent> find(Class<? extends jdk.internal.event.Event> eventClass) {
        return find(Utils.isJDKClass(eventClass), eventClass.getName());
    }

src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionStatisticsEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;
import jdk.jfr.internal.Type;

@Name(Type.EVENT_NAME_PREFIX + "ExceptionStatistics")
@Label("Exception Statistics")
@Category({ "Java Application", "Statistics" })
@Description("Number of objects derived from java.lang.Throwable that have been created")
@RemoveFields({"duration", "eventThread", "stackTrace"})
public final class ExceptionStatisticsEvent extends MirrorEvent {

    @Label("Exceptions Created")
    public long throwables;
}

Event configuration settings across JFR profiles
Configuration enabled period
default true 1000 ms
profiling true 1000 ms

Event fields with their types and descriptions
Field Type Description
throwables long Exceptions Created

Examples 3
Example event data values and properties
startTime long: millis
451666097016
throwables long
2354176
Example event data values and properties
startTime long: millis
5447562267
throwables long
368
Example event data values and properties
startTime long: millis
494919780334
throwables long
2360431

DirectBufferStatistics

default profiling startTime duration stackTrace 15 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/DirectBufferStatisticsEvent.java

Category: Java Application / Statistics

Statistics of direct buffer

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/JDKEvents.java:

        jdk.internal.event.SecurityPropertyModificationEvent.class,
        jdk.internal.event.SecurityProviderServiceEvent.class,
        jdk.internal.event.SerializationMisdeclarationEvent.class,
        jdk.internal.event.SocketReadEvent.class,
        jdk.internal.event.SocketWriteEvent.class,
        jdk.internal.event.ThreadSleepEvent.class,
        jdk.internal.event.TLSHandshakeEvent.class,
        jdk.internal.event.VirtualThreadStartEvent.class,
        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.class,
        jdk.internal.event.FinalFieldMutationEvent.class,
        DirectBufferStatisticsEvent.class,
        InitialSecurityPropertyEvent.class,
        MethodTraceEvent.class,
        MethodTimingEvent.class,
    };

    private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
    private static final Runnable emitDirectBufferStatistics = JDKEvents::emitDirectBufferStatistics;
    private static final Runnable emitContainerConfiguration = JDKEvents::emitContainerConfiguration;
    private static final Runnable emitContainerCPUUsage = JDKEvents::emitContainerCPUUsage;
    private static final Runnable emitContainerCPUThrottling = JDKEvents::emitContainerCPUThrottling;
    private static final Runnable emitContainerMemoryUsage = JDKEvents::emitContainerMemoryUsage;

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

    private static final Runnable emitInitialSecurityProperties = JDKEvents::emitInitialSecurityProperties;
    private static final Runnable emitMethodTiming = JDKEvents::emitMethodTiming;
    private static Metrics containerMetrics = null;
    private static boolean initializationTriggered;

    @SuppressWarnings("unchecked")
    public static synchronized void initialize() {
        try {
            if (initializationTriggered == false) {
                for (Class<?> eventClass : eventClasses) {
                    MetadataRepository.getInstance().register((Class<? extends Event>) eventClass);
                }
                PeriodicEvents.addJavaEvent(jdk.internal.event.ExceptionStatisticsEvent.class, emitExceptionStatistics);
                PeriodicEvents.addJavaEvent(DirectBufferStatisticsEvent.class, emitDirectBufferStatistics);
                PeriodicEvents.addJavaEvent(InitialSecurityPropertyEvent.class, emitInitialSecurityProperties);
                PeriodicEvents.addJavaEvent(MethodTimingEvent.class, emitMethodTiming);

                initializeContainerEvents();
                JFRTracing.enable();
                initializationTriggered = true;
            }
        } catch (Exception e) {
            Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());
        }
    }

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        PeriodicEvents.removeEvent(emitExceptionStatistics);
        PeriodicEvents.removeEvent(emitDirectBufferStatistics);
        PeriodicEvents.removeEvent(emitInitialSecurityProperties);
        PeriodicEvents.removeEvent(emitMethodTiming);

        PeriodicEvents.removeEvent(emitContainerConfiguration);
        PeriodicEvents.removeEvent(emitContainerCPUUsage);
        PeriodicEvents.removeEvent(emitContainerCPUThrottling);
        PeriodicEvents.removeEvent(emitContainerMemoryUsage);
        PeriodicEvents.removeEvent(emitContainerIOUsage);
    }

    private static void emitDirectBufferStatistics() {
        DirectBufferStatisticsEvent e = new DirectBufferStatisticsEvent();
        e.commit();
    }

    private static void emitInitialSecurityProperties() {
        Properties p = SharedSecrets.getJavaSecurityPropertiesAccess().getInitialProperties();
        if (p != null) {
            for (String key : p.stringPropertyNames()) {
                InitialSecurityPropertyEvent e = new InitialSecurityPropertyEvent();
                e.key = key;
                e.value = p.getProperty(key);
                e.commit();

src/jdk.jfr/share/classes/jdk/jfr/events/DirectBufferStatisticsEvent.java:

package jdk.jfr.events;

import jdk.internal.misc.VM;
import jdk.internal.misc.VM.BufferPool;

import jdk.jfr.*;
import jdk.jfr.internal.Type;

@Name(Type.EVENT_NAME_PREFIX + "DirectBufferStatistics")
@Label("Direct Buffer Statistics")
@Description("Statistics of direct buffer")
public final class DirectBufferStatisticsEvent extends AbstractBufferStatisticsEvent {

    private static final BufferPool DIRECT_BUFFER_POOL = findPoolByName("direct");

    public DirectBufferStatisticsEvent() {
        super(DIRECT_BUFFER_POOL);
        this.maxCapacity = VM.maxDirectMemory();
    }

    @Label("Maximum Capacity")
    @Description("Maximum direct buffer capacity the process can use")
    @DataAmount
    final long maxCapacity;
}

Event configuration settings across JFR profiles
Configuration enabled period
default true 5 s
profiling true 5 s

Examples 3
Example event data values and properties
startTime long: millis
455798345506
Example event data values and properties
startTime long: millis
15750895233
Example event data values and properties
startTime long: millis
482853742349

Java Development Kit

TLSHandshake

startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java

Category: Java Development Kit / Security

Excludes in stack trace: sun.security.ssl.Finished::recordEvent

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Parameters used in TLS Handshake

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/java.base/share/classes/jdk/internal/event/TLSHandshakeEvent.java:

package jdk.internal.event;

/**
 * Event recording details of successful TLS handshakes.
 */

public final class TLSHandshakeEvent extends Event {
    public String peerHost;
    public int peerPort;
    public String protocolVersion;
    public String cipherSuite;
    public long certificateId;
}

src/java.base/share/classes/sun/security/ssl/Finished.java:

                shc.conContext.finishHandshake();
            }
            recordEvent(shc.conContext.conSession);

            //
            // produce
            if (SSLConfiguration.serverNewSessionTicketCount > 0) {
                NewSessionTicket.t13PosthandshakeProducer.produce(shc);
            }
        }
    }

    private static void recordEvent(SSLSessionImpl session) {
        TLSHandshakeEvent event = new TLSHandshakeEvent();
        if (event.shouldCommit() || EventHelper.isLoggingSecurity()) {
            int hash = 0;
            try {
                // use hash code for Id
                hash = session
                        .getCertificateChain()[0]
                        .hashCode();
            } catch (SSLPeerUnverifiedException e) {
                 // not verified msg
            }
            long peerCertificateId = Integer.toUnsignedLong(hash);

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

    // Add mirror event mapping here. See MirrorEvent class for details.
    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
        register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
        register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
        register("jdk.internal.event.FinalFieldMutationEvent", FinalFieldMutationEvent.class);
    };

src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java:

@Category({"Java Development Kit", "Security"})
@Label("TLS Handshake")
@Name("jdk.TLSHandshake")
@Description("Parameters used in TLS Handshake")
@RemoveFields("duration")
@StackFilter("sun.security.ssl.Finished::recordEvent")
public final class TLSHandshakeEvent extends MirrorEvent {
    @Label("Peer Host")
    public String peerHost;

    @Label("Peer Port")
    public int peerPort;

    @Label("Protocol Version")
    public String protocolVersion;

    @Label("Cipher Suite")
    public String cipherSuite;

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default false true
profiling false true

Event fields with their types and descriptions
Field Type Description
peerHost string Peer Host
peerPort int Peer Port
protocolVersion string Protocol Version
cipherSuite string Cipher Suite
certificateId ulong: certificateId Certificate Id Peer Certificate Id

Examples 3
Example event data values and properties
certificateId ulong: certificateId
998794918
cipherSuite string
TLS_AES_256_GCM_SHA384
peerHost string
example.com
peerPort int
443
protocolVersion string
TLSv1.3
startTime long: millis
1108105596
Example event data values and properties
certificateId ulong: certificateId
998794918
cipherSuite string
TLS_AES_256_GCM_SHA384
peerHost string
example.com
peerPort int
443
protocolVersion string
TLSv1.3
startTime long: millis
1104300297
Example event data values and properties
certificateId ulong: certificateId
998794918
cipherSuite string
TLS_AES_256_GCM_SHA384
peerHost string
example.com
peerPort int
443
protocolVersion string
TLSv1.3
startTime long: millis
832755528

SecurityProviderService

startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java

Category: Java Development Kit / Security

Excludes in stack trace: java.security.Provider::getService

Details of Provider.getInstance(String type, String algorithm) calls

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/java.base/share/classes/jdk/internal/event/SecurityProviderServiceEvent.java:

package jdk.internal.event;

/**
 * Event recording details of Provider.getService(String type, String algorithm) calls
 */

public final class SecurityProviderServiceEvent extends Event {
    private static final SecurityProviderServiceEvent EVENT = new SecurityProviderServiceEvent();

    /**
     * Returns {@code true} if event is enabled, {@code false} otherwise.
     */
    public static boolean isTurnedOn() {
        return EVENT.isEnabled();
    }

    public String type;
    public String algorithm;
    public String provider;
}

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

 * This class registers all mirror events.
 */
final class MirrorEvents {
    private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();

    // Add mirror event mapping here. See MirrorEvent class for details.
    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);

src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java:

@Category({"Java Development Kit", "Security"})
@Label("Security Provider Instance Request")
@Name("jdk.SecurityProviderService")
@Description("Details of Provider.getInstance(String type, String algorithm) calls")
@RemoveFields("duration")
@StackFilter({"java.security.Provider::getService"})
public final class SecurityProviderServiceEvent extends MirrorEvent {
    @Label("Type of Service")
    public String type;

    @Label("Algorithm Name")
    public String algorithm;

    @Label("Security Provider")
    public String provider;
}

src/java.base/share/classes/java/security/Provider.java:

            key = new ServiceKey(type, algorithm, false);
            previousKey.set(key);
        }

        Service s = serviceMap.get(key);
        if (s == null) {
            s = legacyMap.get(key);
            if (s != null && !s.isValid()) {
                legacyMap.remove(key, s);
                return null;
            }
        }

        if (s != null && SecurityProviderServiceEvent.isTurnedOn()) {
            var e  = new SecurityProviderServiceEvent();
            e.provider = getName();
            e.type = type;
            e.algorithm = algorithm;
            e.commit();
        }

        return s;
    }

    // ServiceKey from previous getService() call
    // by re-using it if possible we avoid allocating a new object

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default false true
profiling false true

Event fields with their types and descriptions
Field Type Description
type string Type of Service
algorithm string Algorithm Name
provider string Security Provider

Examples 3
Example event data values and properties
algorithm string
MD5
provider string
SUN
startTime long: millis
497755251223
type string
MessageDigest
Example event data values and properties
algorithm string
EC
provider string
SunEC
startTime long: millis
687224072
type string
KeyFactory
Example event data values and properties
algorithm string
MD5
provider string
SUN
startTime long: millis
490496135712
type string
MessageDigest

SecurityPropertyModification

startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java

Category: Java Development Kit / Security

Excludes in stack trace: java.security.Security::setProperty

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Modification of Security property

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/java.base/share/classes/jdk/internal/event/SecurityPropertyModificationEvent.java:

package jdk.internal.event;

/**
 * Event details relating to the modification of a Security property.
 */

public final class SecurityPropertyModificationEvent extends Event {
    public String key;
    public String value;
}

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

/**
 * This class registers all mirror events.
 */
final class MirrorEvents {
    private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();

    // Add mirror event mapping here. See MirrorEvent class for details.
    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);

src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java:

package jdk.jfr.events;

import jdk.jfr.*;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;

@Category({"Java Development Kit", "Security"})
@Label("Security Property Modification")
@Name("jdk.SecurityPropertyModification")
@Description("Modification of Security property")
@RemoveFields("duration")
@StackFilter({"java.security.Security::setProperty"})
public final class SecurityPropertyModificationEvent extends MirrorEvent {
    @Label("Key")
    public String key;

    @Label("Value")
    public String value;
}

src/java.base/share/classes/java/security/Security.java:

     * @param datum the value of the property to be set.
     *
     * @throws  NullPointerException if key or datum is {@code null}
     * @throws  IllegalArgumentException if key is reserved and cannot be
     *          used as a Security property name. Reserved keys are:
     *          "include".
     *
     * @see #getProperty
     */
    public static void setProperty(String key, String datum) {
        SecPropLoader.checkReservedKey(key);
        props.put(key, datum);

        SecurityPropertyModificationEvent spe = new SecurityPropertyModificationEvent();
        // following is a no-op if event is disabled
        spe.key = key;
        spe.value = datum;
        spe.commit();

        if (EventHelper.isLoggingSecurity()) {
            EventHelper.logSecurityPropertyEvent(key, datum);
        }
    }

    private static class Criteria {

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default false true
profiling false true

Event fields with their types and descriptions
Field Type Description
key string Key
value string Value

Examples 3
Example event data values and properties
key string
jdk.disabled.namedCurves
startTime long: millis
1175633602
value string
secp112r1
Example event data values and properties
key string
jdk.disabled.namedCurves
startTime long: millis
1229926713
value string
secp112r1
Example event data values and properties
key string
jdk.disabled.namedCurves
startTime long: millis
891669707
value string
secp112r1

SerializationMisdeclaration

profiling startTime duration 23 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/SerializationMisdeclarationEvent.java

Category: Java Development Kit / Serialization

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Methods and fields misdeclarations. The checks are usually performed just once per serializable class, the first time it is used by serialization. Under high memory pressure, a class might be re-checked again.

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/java.base/share/classes/jdk/internal/event/SerializationMisdeclarationEvent.java:

package jdk.internal.event;

/**
 * A JFR event for serialization misdeclarations.
 * This event is mirrored in {@code jdk.jfr.events.SerializationMisdeclarationEvent}
 * where the metadata for the event is provided with annotations.
 * Some of the methods are replaced by generated methods when jfr is enabled.
 * Note that the order of the arguments of the {@link #commit(long,Class,String)}
 * method must be the same as the order of the fields.
 */
public class SerializationMisdeclarationEvent extends Event {

    public Class<?> misdeclaredClass;
    public String message;

    /**
     * Commit a serialization misdeclaration event.
     * The implementation of this method is generated automatically if jfr is enabled.
     * The order of the fields must be the same as the parameters in this method.
     * {@code commit(long,Class,String)}
     *
     * @param start             timestamp of the start of the operation
     * @param misdeclaredClass  the affected class
     * @param message           the specific event message

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

 */
final class MirrorEvents {
    private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();

    // Add mirror event mapping here. See MirrorEvent class for details.
    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
        register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);

src/jdk.jfr/share/classes/jdk/jfr/events/SerializationMisdeclarationEvent.java:

@Name(Type.EVENT_NAME_PREFIX + "SerializationMisdeclaration")
@Label("Serialization Misdeclaration")
@Category({"Java Development Kit", "Serialization"})
@Description("Methods and fields misdeclarations." +
        " The checks are usually performed just once per serializable class," +
        " the first time it is used by serialization." +
        " Under high memory pressure, a class might be re-checked again.")
@RemoveFields({"duration", "stackTrace", "eventThread"})
public final class SerializationMisdeclarationEvent extends MirrorEvent {

    @Label("Misdeclared Class")
    public Class<?> misdeclaredClass;

    @Label("Message")
    public String message;

}

src/java.base/share/classes/java/io/ObjectStreamClass.java:

        if (isRecord && canonicalCtr == null) {
            deserializeEx = new ExceptionInfo(name, "record canonical constructor not found");
        } else {
            for (int i = 0; i < fields.length; i++) {
                if (fields[i].getField() == null) {
                    defaultSerializeEx = new ExceptionInfo(
                        name, "unmatched serializable field(s) declared");
                }
            }
        }
        initialized = true;

        if (SerializationMisdeclarationEvent.enabled() && serializable) {
            SerializationMisdeclarationChecker.checkMisdeclarations(cl);
        }
    }

    /**
     * Creates blank class descriptor which should be initialized via a
     * subsequent call to initProxy(), initNonProxy() or readNonProxy().
     */
    ObjectStreamClass() {
    }

Event configuration settings across JFR profiles
Configuration enabled
default false
profiling true

Event fields with their types and descriptions
Field Type Description
misdeclaredClass Class Misdeclared Class
message string Message

Examples 3
Example event data values and properties
message string
serialVersionUID should be declared explicitly as a private static final long field
misdeclaredClass 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.4.1
name string
jdk/internal/loader
hidden boolean
false
modifiers int
0
name string
jfr_sample/Main$4
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.4.1
name string
jdk/internal/loader
location string
null
name string
null
version string
null
name string
jfr_sample
startTime long: millis
1446784137
Example event data values and properties
message string
serialVersionUID should be declared explicitly as a private static final long field
misdeclaredClass 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.4.1
name string
jdk/internal/loader
hidden boolean
false
modifiers int
0
name string
jfr_sample/Main$4
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.4.1
name string
jdk/internal/loader
location string
null
name string
null
version string
null
name string
jfr_sample
startTime long: millis
1014639539
Example event data values and properties
message string
serialVersionUID should be declared explicitly as a private static final long field
misdeclaredClass 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.4.1
name string
jdk/internal/loader
hidden boolean
false
modifiers int
0
name string
jfr_sample/Main$4
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.4.1
name string
jdk/internal/loader
location string
null
name string
null
version string
null
name string
jfr_sample
startTime long: millis
1421166683

X509Validation

startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java

Category: Java Development Kit / Security

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Serial numbers from X.509 Certificates forming chain of trust

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/java.base/share/classes/jdk/internal/event/X509ValidationEvent.java:

package jdk.internal.event;

/**
 * Event recording details of X.509 Certificate serial numbers
 * used in X509 cert path validation.
 */

public final class X509ValidationEvent extends Event {
    public long certificateId;
    public int certificatePosition;
    public long validationCounter;
}

src/java.base/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java:

        // only add a RevocationChecker if revocation is enabled and
        // a PKIXRevocationChecker has not already been added
        if (params.revocationEnabled() && !revCheckerAdded) {
            certPathCheckers.add(new RevocationChecker(anchor, params));
        }
        // add user-specified checkers
        certPathCheckers.addAll(checkers);

        PKIXMasterCertPathValidator.validate(params.certPath(),
                                             params.certificates(),
                                             certPathCheckers);

        X509ValidationEvent xve = new X509ValidationEvent();
        if (xve.shouldCommit() || EventHelper.isLoggingSecurity()) {
            long[] certIds = params.certificates().stream()
                    .mapToInt(Certificate::hashCode)
                    .mapToLong(Integer::toUnsignedLong)
                    .toArray();
            int hash = (anchorCert != null) ?
                anchorCert.hashCode() : anchor.getCAPublicKey().hashCode();
            long anchorCertId = Integer.toUnsignedLong(hash);
            if (xve.shouldCommit()) {
                xve.certificateId = anchorCertId;
                int certificatePos = 1; // most trusted CA

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
        register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
        register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
        register("jdk.internal.event.FinalFieldMutationEvent", FinalFieldMutationEvent.class);
    };

    private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
        mirrorLookup.put(eventClassName, mirrorClass);
    }

    static Class<? extends MirrorEvent> find(Class<? extends jdk.internal.event.Event> eventClass) {

src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java:

package jdk.jfr.events;

import jdk.jfr.*;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;

@Category({"Java Development Kit", "Security"})
@Label("X509 Validation")
@Name("jdk.X509Validation")
@Description("Serial numbers from X.509 Certificates forming chain of trust")
@RemoveFields("duration")
public final class X509ValidationEvent extends MirrorEvent {
    @CertificateId
    @Label("Certificate Id")
    @Unsigned
    public long certificateId;

    @Label("Certificate Position")
    @Description("Certificate position in chain of trust, 1 = trust anchor")
    public int certificatePosition;

    @Label("Validation Counter")
    public long validationCounter;
}

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default false true
profiling false true

Event fields with their types and descriptions
Field Type Description
certificateId ulong: certificateId Certificate Id
certificatePosition int Certificate Position Certificate position in chain of trust, 1 = trust anchor
validationCounter long Validation Counter

Examples 3
Example event data values and properties
certificateId ulong: certificateId
998794918
certificatePosition int
4
startTime long: millis
802449311
validationCounter long
1
Example event data values and properties
certificateId ulong: certificateId
998794918
certificatePosition int
4
startTime long: millis
1064405963
validationCounter long
1
Example event data values and properties
certificateId ulong: certificateId
683561703
certificatePosition int
1
startTime long: millis
1067306549
validationCounter long
1

Deserialization

startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/DeserializationEvent.java

Category: Java Development Kit / Serialization

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Results of deserialization and ObjectInputFilter checks

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/java.base/share/classes/jdk/internal/event/DeserializationEvent.java:

package jdk.internal.event;

/**
 * Event details relating to deserialization.
 */

public final class DeserializationEvent extends Event {
    public boolean filterConfigured;
    public String filterStatus;
    public Class<?> type;
    public int arrayLength;
    public long objectReferences;
    public long depth;
    public long bytesRead;
    public Class<?> exceptionType;
    public String exceptionMessage;
}

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

/**
 * This class registers all mirror events.
 */
final class MirrorEvents {
    private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();

    // Add mirror event mapping here. See MirrorEvent class for details.
    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);

src/jdk.jfr/share/classes/jdk/jfr/events/DeserializationEvent.java:

@Category({"Java Development Kit", "Serialization"})
@Label("Deserialization")
@Name("jdk.Deserialization")
@Description("Results of deserialization and ObjectInputFilter checks")
@RemoveFields("duration")
public final class DeserializationEvent extends MirrorEvent {

    @Label("Filter Configured")
    public boolean filterConfigured;

    @Label("Filter Status")
    public String filterStatus;

    @Label ("Type")
    public Class<?> type;

    @Label ("Array Length")

src/java.base/share/classes/java/io/ObjectInputStream.java:

        ObjectInputFilter next = Config.getSerialFilterFactory()
                .apply(serialFilter, filter);
        if (serialFilter != null && next == null) {
            throw new IllegalStateException("filter can not be replaced with null filter");
        }
        serialFilter = next;
    }

    /**
     * Invokes the deserialization filter if non-null.
     *
     * If the filter rejects or an exception is thrown, throws InvalidClassException.
     *
     * Logs and/or commits a {@code DeserializationEvent}, if configured.
     *
     * @param clazz the class; may be null
     * @param arrayLength the array length requested; use {@code -1} if not creating an array
     * @throws InvalidClassException if it rejected by the filter or
     *        a {@link RuntimeException} is thrown
     */
    private void filterCheck(Class<?> clazz, int arrayLength)
            throws InvalidClassException {
        // Info about the stream is not available if overridden by subclass, return 0
        long bytesRead = (bin == null) ? 0 : bin.getBytesRead();
        RuntimeException ex = null;

src/java.base/share/classes/java/io/ObjectInputStream.java:

                status = ObjectInputFilter.Status.REJECTED;
                ex = e;
            }
            if (Logging.filterLogger != null) {
                // Debug logging of filter checks that fail; Tracing for those that succeed
                Logging.filterLogger.log(status == null || status == ObjectInputFilter.Status.REJECTED
                                ? Logger.Level.DEBUG
                                : Logger.Level.TRACE,
                        "ObjectInputFilter {0}: {1}, array length: {2}, nRefs: {3}, depth: {4}, bytes: {5}, ex: {6}",
                        status, clazz, arrayLength, totalObjectRefs, depth, bytesRead,
                        Objects.toString(ex, "n/a"));
            }
        }
        DeserializationEvent event = new DeserializationEvent();
        if (event.shouldCommit()) {
            event.filterConfigured = serialFilter != null;
            event.filterStatus = status != null ? status.name() : null;
            event.type = clazz;
            event.arrayLength = arrayLength;
            event.objectReferences = totalObjectRefs;
            event.depth = depth;
            event.bytesRead = bytesRead;
            event.exceptionType = ex != null ? ex.getClass() : null;
            event.exceptionMessage = ex != null ? ex.getMessage() : null;
            event.commit();

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default false true
profiling false true

Event fields with their types and descriptions
Field Type Description
filterConfigured boolean Filter Configured
filterStatus string Filter Status
type Class Type
arrayLength int Array Length
objectReferences long Object References
depth long Depth
bytesRead long Bytes Read
exceptionType Class Exception Type
exceptionMessage string Exception Message

Examples 3
Example event data values and properties
arrayLength int
-1
bytesRead long
9082
depth long
4
exceptionMessage string
null
exceptionType Class
null
filterConfigured boolean
false
filterStatus string
null
objectReferences long
24
startTime long: millis
447538223269
type Class
null
Example event data values and properties
arrayLength int
3
bytesRead long
57
depth long
1
exceptionMessage string
null
exceptionType Class
null
filterConfigured boolean
false
filterStatus string
null
objectReferences long
2
startTime long: millis
1142072861
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[Ljava/lang/Object;
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
Example event data values and properties
arrayLength int
-1
bytesRead long
20862
depth long
6
exceptionMessage string
null
exceptionType Class
null
filterConfigured boolean
false
filterStatus string
null
objectReferences long
272
startTime long: millis
452975180701
type Class
null

X509Certificate

startTime duration 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java

Category: Java Development Kit / Security

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Details of X.509 Certificate parsed by JDK

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/java.base/share/classes/jdk/internal/event/X509CertificateEvent.java:

package jdk.internal.event;


/**
 * Event recording details of X.509 Certificate.
 */

public final class X509CertificateEvent extends Event {
    private static final X509CertificateEvent EVENT = new X509CertificateEvent();

    /**
     * Returns {@code true} if event is enabled, {@code false} otherwise.
     */
    public static boolean isTurnedOn() {
        return EVENT.isEnabled();
    }

    public String algorithm;
    public String serialNumber;
    public String subject;
    public String issuer;
    public String keyType;
    public int keyLength;
    public long certificateId;

src/java.base/share/classes/sun/security/jca/JCAUtil.java:

        SecureRandom result = def;
        if (result == null) {
            synchronized (JCAUtil.class) {
                result = def;
                if (result == null) {
                    def = result = new SecureRandom();
                }
            }
        }
        return result;
    }

    public static void tryCommitCertEvent(Certificate cert) {
        if ((X509CertificateEvent.isTurnedOn() || EventHelper.isLoggingSecurity()) &&
                (cert instanceof X509Certificate x509)) {
            PublicKey pKey = x509.getPublicKey();
            String algId = x509.getSigAlgName();
            String serNum = Debug.toString(x509.getSerialNumber());
            String subject = x509.getSubjectX500Principal().toString();
            String issuer = x509.getIssuerX500Principal().toString();
            String keyType = pKey.getAlgorithm();
            int length = KeyUtil.getKeySize(pKey);
            int hashCode = x509.hashCode();
            long certifcateId = Integer.toUnsignedLong(hashCode);
            long beginDate = x509.getNotBefore().getTime();
            long endDate = x509.getNotAfter().getTime();
            if (X509CertificateEvent.isTurnedOn()) {
                X509CertificateEvent xce = new X509CertificateEvent();
                xce.algorithm = algId;
                xce.serialNumber = serNum;
                xce.subject = subject;
                xce.issuer = issuer;
                xce.keyType = keyType;
                xce.keyLength = length;
                xce.certificateId = certifcateId;
                xce.validFrom = beginDate;
                xce.validUntil = endDate;
                xce.commit();
            }

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
        register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
        register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
        register("jdk.internal.event.FinalFieldMutationEvent", FinalFieldMutationEvent.class);
    };

    private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
        mirrorLookup.put(eventClassName, mirrorClass);
    }

src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java:

package jdk.jfr.events;

import jdk.jfr.*;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;

@Category({"Java Development Kit", "Security"})
@Label("X509 Certificate")
@Name("jdk.X509Certificate")
@Description("Details of X.509 Certificate parsed by JDK")
@RemoveFields("duration")
public final class X509CertificateEvent extends MirrorEvent {
    @Label("Signature Algorithm")
    public String algorithm;

    @Label("Serial Number")
    public String serialNumber;

    @Label("Subject")
    public String subject;

    @Label("Issuer")
    public String issuer;

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default false true
profiling false true

Event fields with their types and descriptions
Field Type Description
algorithm string Signature Algorithm
serialNumber string Serial Number
subject string Subject
issuer string Issuer
keyType string Key Type
keyLength int Key Length
certificateId ulong: certificateId Certificate Id
validFrom long: epochmillis Valid From
validUntil long: epochmillis Valid Until

Examples 3
Example event data values and properties
algorithm string
SHA1withRSA
certificateId ulong: certificateId
1495358374
issuer string
CN=TeliaSonera Root CA v1, O=TeliaSonera
keyLength int
4096
keyType string
RSA
serialNumber string
00:95:be:16:a0:f7:2e:46:f1:7b:39:82:72:fa:8b:cd:96
startTime long: millis
715494074
subject string
CN=TeliaSonera Root CA v1, O=TeliaSonera
validFrom long: epochmillis
1192708850000
validUntil long: epochmillis
1981713650000
Example event data values and properties
algorithm string
SHA256withRSA
certificateId ulong: certificateId
3909568913
issuer string
CN=DigiCert Assured ID Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US
keyLength int
2048
keyType string
RSA
serialNumber string
0b:93:1c:3a:d6:39:67:ea:67:23:bf:c3:af:9a:f4:4b
startTime long: millis
562311391
subject string
CN=DigiCert Assured ID Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US
validFrom long: epochmillis
1375358400000
validUntil long: epochmillis
2147169600000
Example event data values and properties
algorithm string
SHA256withRSA
certificateId ulong: certificateId
439600313
issuer string
CN=Go Daddy Root Certificate Authority - G2, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
keyLength int
2048
keyType string
RSA
serialNumber string
00
startTime long: millis
764919691
subject string
CN=Go Daddy Root Certificate Authority - G2, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
validFrom long: epochmillis
1251763200000
validUntil long: epochmillis
2145916799000

VirtualThreadSubmitFailed

default profiling startTime duration 19 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadSubmitFailedEvent.java

Category: Java Development Kit / Threading

Submit of task for virtual thread 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/java.base/share/classes/jdk/internal/event/VirtualThreadSubmitFailedEvent.java:

package jdk.internal.event;

/**
 * Event recording when an attempt to submit the task for a virtual thread failed.
 */
public class VirtualThreadSubmitFailedEvent extends Event {
    public long javaThreadId;
    public String exceptionMessage;
}

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
        register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
        register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
        register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
        register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
        register("jdk.internal.event.FinalFieldMutationEvent", FinalFieldMutationEvent.class);
    };

    private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
        mirrorLookup.put(eventClassName, mirrorClass);
    }

src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadSubmitFailedEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;

@Category({"Java Development Kit", "Threading"})
@Label("Virtual Thread Submit Failed")
@Name("jdk.VirtualThreadSubmitFailed")
@Description("Submit of task for virtual thread failed")
@RemoveFields("duration")
public final class VirtualThreadSubmitFailedEvent extends MirrorEvent {

    @Label("Thread Id")
    public long javaThreadId;

    @Label("Exception Message")
    public String exceptionMessage;

}

src/java.base/share/classes/java/lang/VirtualThread.java:

        if (scheduler == DEFAULT_SCHEDULER && currentCarrierThread() instanceof CarrierThread ct) {
            try {
                ct.getPool().externalSubmit(ForkJoinTask.adapt(runContinuation));
            } catch (RejectedExecutionException ree) {
                submitFailed(ree);
                throw ree;
            }
        } else {
            submitRunContinuation(scheduler, false);
        }
    }

    /**
     * If enabled, emits a JFR VirtualThreadSubmitFailedEvent.
     */
    private void submitFailed(RejectedExecutionException ree) {
        var event = new VirtualThreadSubmitFailedEvent();
        if (event.isEnabled()) {
            event.javaThreadId = threadId();
            event.exceptionMessage = ree.getMessage();
            event.commit();
        }
    }

    /**
     * Runs a task in the context of this virtual thread.
     */
    private void run(Runnable task) {

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default true true
profiling true true

Event fields with their types and descriptions
Field Type Description
javaThreadId long Thread Id
exceptionMessage string Exception Message

InitialSecurityProperty

default profiling startTime duration stackTrace 11 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/InitialSecurityPropertyEvent.java

Category: Java Development Kit / Security

Initial Security Properties

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/JDKEvents.java:

        jdk.internal.event.SecurityProviderServiceEvent.class,
        jdk.internal.event.SerializationMisdeclarationEvent.class,
        jdk.internal.event.SocketReadEvent.class,
        jdk.internal.event.SocketWriteEvent.class,
        jdk.internal.event.ThreadSleepEvent.class,
        jdk.internal.event.TLSHandshakeEvent.class,
        jdk.internal.event.VirtualThreadStartEvent.class,
        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.class,
        jdk.internal.event.FinalFieldMutationEvent.class,
        DirectBufferStatisticsEvent.class,
        InitialSecurityPropertyEvent.class,
        MethodTraceEvent.class,
        MethodTimingEvent.class,
    };

    private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
    private static final Runnable emitDirectBufferStatistics = JDKEvents::emitDirectBufferStatistics;
    private static final Runnable emitContainerConfiguration = JDKEvents::emitContainerConfiguration;
    private static final Runnable emitContainerCPUUsage = JDKEvents::emitContainerCPUUsage;
    private static final Runnable emitContainerCPUThrottling = JDKEvents::emitContainerCPUThrottling;
    private static final Runnable emitContainerMemoryUsage = JDKEvents::emitContainerMemoryUsage;
    private static final Runnable emitContainerIOUsage = JDKEvents::emitContainerIOUsage;

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

    private static final Runnable emitMethodTiming = JDKEvents::emitMethodTiming;
    private static Metrics containerMetrics = null;
    private static boolean initializationTriggered;

    @SuppressWarnings("unchecked")
    public static synchronized void initialize() {
        try {
            if (initializationTriggered == false) {
                for (Class<?> eventClass : eventClasses) {
                    MetadataRepository.getInstance().register((Class<? extends Event>) eventClass);
                }
                PeriodicEvents.addJavaEvent(jdk.internal.event.ExceptionStatisticsEvent.class, emitExceptionStatistics);
                PeriodicEvents.addJavaEvent(DirectBufferStatisticsEvent.class, emitDirectBufferStatistics);
                PeriodicEvents.addJavaEvent(InitialSecurityPropertyEvent.class, emitInitialSecurityProperties);
                PeriodicEvents.addJavaEvent(MethodTimingEvent.class, emitMethodTiming);

                initializeContainerEvents();
                JFRTracing.enable();
                initializationTriggered = true;
            }
        } catch (Exception e) {
            Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());
        }
    }

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        PeriodicEvents.removeEvent(emitContainerMemoryUsage);
        PeriodicEvents.removeEvent(emitContainerIOUsage);
    }

    private static void emitDirectBufferStatistics() {
        DirectBufferStatisticsEvent e = new DirectBufferStatisticsEvent();
        e.commit();
    }

    private static void emitInitialSecurityProperties() {
        Properties p = SharedSecrets.getJavaSecurityPropertiesAccess().getInitialProperties();
        if (p != null) {
            for (String key : p.stringPropertyNames()) {
                InitialSecurityPropertyEvent e = new InitialSecurityPropertyEvent();
                e.key = key;
                e.value = p.getProperty(key);
                e.commit();
            }
        }
    }

    private static void emitMethodTiming() {
        if (MethodSetting.isInitialized() && MethodTimingEvent.enabled()) {
            PlatformTracer.emitTiming();
        }

src/jdk.jfr/share/classes/jdk/jfr/events/InitialSecurityPropertyEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;

@Category({"Java Development Kit", "Security"})
@Label("Initial Security Property")
@Name("jdk.InitialSecurityProperty")
@Description("Initial Security Properties")
public final class InitialSecurityPropertyEvent extends AbstractPeriodicEvent {
    @Label("Key")
    public String key;

    @Label("Value")
    public String value;
}

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
key string Key
value string Value

Examples 3
Example event data values and properties
key string
security.overridePropertiesFile
startTime long: millis
449656394132
value string
true
Example event data values and properties
key string
security.provider.11
startTime long: millis
379478039
value string
JdkSASL
Example event data values and properties
key string
jdk.tls.legacyAlgorithms
startTime long: millis
453272078243
value string
NULL, anon, RC4, DES, 3DES_EDE_CBC

Operating System

OSInformation

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Operating System

Description of the OS the JVM runs on, for example, a uname-like output

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(ResidentSetSize) {
  os::jfr_report_memory_info();
}

TRACE_REQUEST_FUNC(JVMInformation) {
  JfrRedactedEvents::emit_jvm_information();
}

TRACE_REQUEST_FUNC(OSInformation) {
  ResourceMark rm;
  char* os_version = nullptr;
  JfrOSInterface::os_version(&os_version);
  EventOSInformation event;
  event.set_osVersion(os_version);
  event.commit();
}

TRACE_REQUEST_FUNC(VirtualizationInformation) {
  EventVirtualizationInformation event;
  event.set_name(JfrOSInterface::virtualization_name());
  event.commit();
}

TRACE_REQUEST_FUNC(ModuleRequire) {

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
osVersion string OS Version

Examples 3
Example event data values and properties
osVersion string
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=24.04 DISTRIB_CODENAME=noble DISTRIB_DESCRIPTION="Ubuntu 24.04.5 LTS" uname: Linux 6.17.0-1022-azure #22-Ubuntu SMP Mon Jul 27 17:24:03 UTC 2026 x86_64 libc: glibc 2.39 NPTL 2.39
startTime long: millis
462448393153
Example event data values and properties
osVersion string
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=24.04 DISTRIB_CODENAME=noble DISTRIB_DESCRIPTION="Ubuntu 24.04.4 LTS" uname: Linux 6.17.0-1022-azure #22-Ubuntu SMP Mon Jul 27 17:24:03 UTC 2026 x86_64 libc: glibc 2.39 NPTL 2.39
startTime long: millis
8024931989
Example event data values and properties
osVersion string
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=24.04 DISTRIB_CODENAME=noble DISTRIB_DESCRIPTION="Ubuntu 24.04.4 LTS" uname: Linux 6.17.0-1022-azure #22-Ubuntu SMP Mon Jul 27 17:24:03 UTC 2026 x86_64 libc: glibc 2.39 NPTL 2.39
startTime long: millis
469405866195

VirtualizationInformation

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Operating System

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Description of the virtualization technology the JVM runs on

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:

  JfrRedactedEvents::emit_jvm_information();
}

TRACE_REQUEST_FUNC(OSInformation) {
  ResourceMark rm;
  char* os_version = nullptr;
  JfrOSInterface::os_version(&os_version);
  EventOSInformation event;
  event.set_osVersion(os_version);
  event.commit();
}

TRACE_REQUEST_FUNC(VirtualizationInformation) {
  EventVirtualizationInformation event;
  event.set_name(JfrOSInterface::virtualization_name());
  event.commit();
}

TRACE_REQUEST_FUNC(ModuleRequire) {
  JfrModuleEvent::generate_module_dependency_events();
}

TRACE_REQUEST_FUNC(ModuleExport) {
  JfrModuleEvent::generate_module_export_events();
}

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
name string Name

Examples 3
Example event data values and properties
name string
Hyper-V virtualization
startTime long: millis
23227636532
Example event data values and properties
name string
Hyper-V virtualization
startTime long: millis
501870670591
Example event data values and properties
name string
Hyper-V virtualization
startTime long: millis
447754183735

InitialEnvironmentVariable

default profiling startTime end of every chunk 11 17 21 25 27 28

Category: Operating System

Key-value pairs for environment variables at JVM startup

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/jfrRedactedEvents.cpp:

            _initial_environment_variables->append(new StringKeyValue(key, redacted_value->text()));
            delete redacted_value;
            continue;
          }
        }
        _initial_environment_variables->append(new StringKeyValue(key, value));
      }
    }
  }
  JfrTicks time_stamp = JfrTicks::now();
  for (int i = 0; i < _initial_environment_variables->length(); i++) {
    StringKeyValue* pair = _initial_environment_variables->at(i);
    EventInitialEnvironmentVariable event(UNTIMED);
    event.set_starttime(time_stamp);
    event.set_endtime(time_stamp);
    event.set_key(pair->key());
    event.set_value(pair->value());
    event.commit();
  }
  return true;
}

void JfrRedactedEvents::emit_initial_system_properties(bool log) {
  if (_initial_system_properties == nullptr) {

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
key string Key
value string Value

Examples 3
Example event data values and properties
key string
ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE
startTime long: millis
447754187781
value string
/opt/actionarchivecache
Example event data values and properties
key string
RUNNER_NAME
startTime long: millis
453049821122
value string
GitHub Actions 1024941409
Example event data values and properties
key string
GITHUB_API_URL
startTime long: millis
364524139
value string
https://api.github.com

SystemProcess

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Operating System

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Code Context

The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:

src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:

  if (ret_val == OS_OK) {
    // feature is implemented, write real event
    while (processes != nullptr) {
      SystemProcess* tmp = processes;
      const char* info = processes->path();
      if (info == nullptr) {
         info = processes->name();
      }
      if (info == nullptr) {
         info = "?";
      }
      jio_snprintf(pid_buf, sizeof(pid_buf), "%d", processes->pid());
      EventSystemProcess event(UNTIMED);
      event.set_pid(pid_buf);
      event.set_commandLine(info);
      event.set_starttime(start_time);
      event.set_endtime(end_time);
      event.commit();
      processes = processes->next();
      delete tmp;
    }
  }
}

Event configuration settings across JFR profiles
Configuration enabled period
default true endChunk
profiling true endChunk

Event fields with their types and descriptions
Field Type Description
pid string Process Identifier
commandLine string Command Line

Examples 3
Example event data values and properties
commandLine string
kworker/R-ib-comp-unb-wq
pid string
401
startTime long: millis
20528575745
Example event data values and properties
commandLine string
kworker/R-hv_vmbus_con
pid string
64
startTime long: millis
19479268756
Example event data values and properties
commandLine string
/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
pid string
1302
startTime long: millis
7826905875

CPUInformation

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Operating System / Processor

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Characteristics and descriptions of the processor(s) the JVM is running on

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(CPUInformation) {
  CPUInformation cpu_info;
  int ret_val = JfrOSInterface::cpu_information(cpu_info);
  if (ret_val == OS_ERR) {
    log_debug(jfr, system)( "Unable to generate requestable event CPUInformation");
    return;
  }
  if (ret_val == FUNCTIONALITY_NOT_IMPLEMENTED) {
     return;
  }
  if (ret_val == OS_OK) {
    EventCPUInformation event;
    event.set_cpu(cpu_info.cpu_name());
    event.set_description(cpu_info.cpu_description());
    event.set_sockets(cpu_info.number_of_sockets());
    event.set_cores(cpu_info.number_of_cores());
    event.set_hwThreads(cpu_info.number_of_hardware_threads());
    event.commit();
  }
}

TRACE_REQUEST_FUNC(CPULoad) {
  double u = 0; // user time

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
cpu string Type
description string Description
sockets uint Sockets
cores uint Cores Approximation on a hybrid CPU
hwThreads uint Hardware Threads

Examples 3
Example event data values and properties
cores uint
16
cpu string
AMD Unknown x86 (HT) SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 SSE4A AMD64
description string
Brand: AMD EPYC 7763 64-Core Processor , Vendor: AuthenticAMD Family: Unknown x86 (0x19), Model: <unknown> (0x1), Stepping: 0x1 Ext. family: 0xa, Ext. model: 0x0, Type: 0x0, Signature: 0x00a00f11 Features: ebx: 0x02100800, ecx: 0xfeda3203, edx: 0x178bfbff Ext. features: eax: 0x00a00f1
hwThreads uint
4
sockets uint
1
startTime long: millis
493399334249
Example event data values and properties
cores uint
16
cpu string
AMD Unknown x86 (HT) SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 SSE4A AMD64
description string
Brand: AMD EPYC 9V74 80-Core Processor , Vendor: AuthenticAMD Family: Unknown x86 (0x19), Model: <unknown> (0x11), Stepping: 0x1 Ext. family: 0xa, Ext. model: 0x1, Type: 0x0, Signature: 0x00a10f11 Features: ebx: 0x02100800, ecx: 0xfeda3203, edx: 0x178bfbff Ext. features: eax: 0x00a10f
hwThreads uint
4
sockets uint
1
startTime long: millis
470826331340
Example event data values and properties
cores uint
16
cpu string
AMD Unknown x86 (HT) SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 SSE4A AMD64
description string
Brand: AMD EPYC 7763 64-Core Processor , Vendor: AuthenticAMD Family: Unknown x86 (0x19), Model: <unknown> (0x1), Stepping: 0x1 Ext. family: 0xa, Ext. model: 0x0, Type: 0x0, Signature: 0x00a00f11 Features: ebx: 0x01100800, ecx: 0xfeda3203, edx: 0x178bfbff Ext. features: eax: 0x00a00f1
hwThreads uint
4
sockets uint
1
startTime long: millis
23227651500

CPUTimeStampCounter

default profiling startTime duration end of every chunk 11 17 21 25 27 28

Category: Operating System / Processor

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Information about the CPU time stamp mechanism / (RD)TSC

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(ThreadCPULoad) {
  JfrThreadCPULoadEvent::send_events();
}

TRACE_REQUEST_FUNC(CompilerQueueUtilization) {
  JfrCompilerQueueUtilization::send_events();
}

TRACE_REQUEST_FUNC(NetworkUtilization) {
  JfrNetworkUtilization::send_events();
}

TRACE_REQUEST_FUNC(CPUTimeStampCounter) {
  EventCPUTimeStampCounter event;
  event.set_fastTimeEnabled(JfrTime::is_ft_enabled());
  event.set_fastTimeAutoEnabled(JfrTime::is_ft_supported());
  event.set_osFrequency(os::elapsed_frequency());
  event.set_fastTimeFrequency(JfrTime::frequency());
  event.commit();
}

TRACE_REQUEST_FUNC(SystemProcess) {
  char pid_buf[16];
  SystemProcess* processes = nullptr;
  int num_of_processes = 0;

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
fastTimeEnabled boolean Fast Time
fastTimeAutoEnabled boolean Trusted Platform
osFrequency long: hertz OS Frequency
fastTimeFrequency long: hertz Fast Time Frequency

Examples 3
Example event data values and properties
fastTimeAutoEnabled boolean
true
fastTimeEnabled boolean
false
fastTimeFrequency long: hertz
1000000000
osFrequency long: hertz
1000000000
startTime long: millis
457784691048
Example event data values and properties
fastTimeAutoEnabled boolean
true
fastTimeEnabled boolean
false
fastTimeFrequency long: hertz
1000000000
osFrequency long: hertz
1000000000
startTime long: millis
15623091142
Example event data values and properties
fastTimeAutoEnabled boolean
true
fastTimeEnabled boolean
false
fastTimeFrequency long: hertz
1000000000
osFrequency long: hertz
1000000000
startTime long: millis
477043452831

CPULoad

default profiling startTime duration every chunk 11 17 21 25 27 28

Category: Operating System / Processor

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Information about the recent CPU usage of the JVM process

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:

  double t = 0; // total time
  int ret_val = OS_ERR;
  {
    // Can take some time on certain platforms, especially under heavy load.
    // Transition to native to avoid unnecessary stalls for pending safepoint synchronizations.
    ThreadToNativeFromVM transition(JavaThread::current());
    ret_val = JfrOSInterface::cpu_loads_process(&u, &s, &t);
  }
  if (ret_val == OS_ERR) {
    log_debug(jfr, system)( "Unable to generate requestable event CPULoad");
    return;
  }
  if (ret_val == OS_OK) {
    EventCPULoad event;
    event.set_jvmUser((float)u);
    event.set_jvmSystem((float)s);
    event.set_machineTotal((float)t);
    event.commit();
  }
}

TRACE_REQUEST_FUNC(ThreadCPULoad) {
  JfrThreadCPULoadEvent::send_events();
}

Event configuration settings across JFR profiles
Configuration enabled period
default true 1000 ms
profiling true 1000 ms

Event fields with their types and descriptions
Field Type Description
jvmUser float: percentage JVM User
jvmSystem float: percentage JVM System
machineTotal float: percentage Machine Total

Examples 3
Example event data values and properties
jvmSystem float: percentage
0.019323671
jvmUser float: percentage
0.34299517
machineTotal float: percentage
0.36231884
startTime long: millis
24941188580
Example event data values and properties
jvmSystem float: percentage
0.01369863
jvmUser float: percentage
0.783105
machineTotal float: percentage
0.79680365
startTime long: millis
468493362354
Example event data values and properties
jvmSystem float: percentage
0.10723192
jvmUser float: percentage
0.46882793
machineTotal float: percentage
0.5785536
startTime long: millis
491165624204

ThreadCPULoad

default profiling startTime duration eventThread every chunk 11 17 21 25 27 28

Category: Operating System / Processor

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/jfrThreadCPULoadEvent.cpp:

int JfrThreadCPULoadEvent::get_processor_count() {
  int cur_processor_count = os::active_processor_count();
  int last_processor_count = _last_active_processor_count;
  _last_active_processor_count = cur_processor_count;

  // If the number of processors decreases, we don't know at what point during
  // the sample interval this happened, so use the largest number to try
  // to avoid percentages above 100%
  return MAX2(cur_processor_count, last_processor_count);
}

// Returns false if the thread has not been scheduled since the last call to updateEvent
// (i.e. the delta for both system and user time is 0 milliseconds)
bool JfrThreadCPULoadEvent::update_event(EventThreadCPULoad& event, JavaThread* thread, jlong cur_wallclock_time, int processor_count) {
  JfrThreadLocal* const tl = thread->jfr_thread_local();

  jlong cur_cpu_time = os::thread_cpu_time(thread, true);
  jlong prev_cpu_time = tl->get_cpu_time();

  jlong prev_wallclock_time = tl->get_wallclock_time();
  tl->set_wallclock_time(cur_wallclock_time);

  // Threshold of 1 ms
  if (cur_cpu_time - prev_cpu_time < 1 * NANOSECS_PER_MILLISEC) {
    return false;

src/hotspot/share/jfr/periodic/jfrThreadCPULoadEvent.cpp:

void JfrThreadCPULoadEvent::send_events() {
  Thread* periodic_thread = Thread::current();
  traceid periodic_thread_id = JfrThreadLocal::thread_id(periodic_thread);
  const int processor_count = JfrThreadCPULoadEvent::get_processor_count();
  JfrTicks event_time = JfrTicks::now();
  jlong cur_wallclock_time = JfrThreadCPULoadEvent::get_wallclock_time();

  JfrJavaThreadIterator iter;
  int number_of_threads = 0;
  while (iter.has_next()) {
    JavaThread* const jt = iter.next();
    assert(jt != nullptr, "invariant");
    ++number_of_threads;
    EventThreadCPULoad event(UNTIMED);
    if (JfrThreadCPULoadEvent::update_event(event, jt, cur_wallclock_time, processor_count)) {
      event.set_starttime(event_time);
      event.set_endtime(event_time);
      if (jt != periodic_thread) {
        // Commit reads the thread id from this thread's trace data, so put it there temporarily
        JfrThreadLocal::impersonate(periodic_thread, JFR_JVM_THREAD_ID(jt));
      } else {
        JfrThreadLocal::impersonate(periodic_thread, periodic_thread_id);
      }
      event.commit();
    }
  }
  log_trace(jfr)("Measured CPU usage for %d threads in %.3f milliseconds", number_of_threads,
    (double)(JfrTicks::now() - event_time).milliseconds());
  JfrThreadLocal::stop_impersonating(periodic_thread);
}

void JfrThreadCPULoadEvent::send_event_for_thread(JavaThread* jt) {
  EventThreadCPULoad event;
  if (event.should_commit()) {
    if (update_event(event, jt, get_wallclock_time(), get_processor_count())) {
      event.commit();
    }
  }
}

src/hotspot/share/jfr/periodic/jfrThreadCPULoadEvent.hpp:

#ifndef SHARE_JFR_PERIODIC_JFRTHREADCPULOADEVENT_HPP
#define SHARE_JFR_PERIODIC_JFRTHREADCPULOADEVENT_HPP

#include "jni.h"
#include "memory/allStatic.hpp"

class JavaThread;
class EventThreadCPULoad;

class JfrThreadCPULoadEvent : public AllStatic {
  static int _last_active_processor_count;
 public:
  static jlong get_wallclock_time();
  static int get_processor_count();
  static bool update_event(EventThreadCPULoad& event, JavaThread* thread, jlong cur_wallclock_time, int processor_count);
  static void send_events();
  static void send_event_for_thread(JavaThread* jt);
};

#endif // SHARE_JFR_PERIODIC_JFRTHREADCPULOADEVENT_HPP

Event configuration settings across JFR profiles
Configuration enabled period
default true 10 s
profiling true 10 s

Event fields with their types and descriptions
Field Type Description
user float: percentage User Mode CPU Load User mode thread CPU load
system float: percentage System Mode CPU Load System mode thread CPU load

Examples 3
Example event data values and properties
startTime long: millis
10584082776
system float: percentage
0.0048427647
user float: percentage
0.03472611
Example event data values and properties
startTime long: millis
461269819977
system float: percentage
6.492143E-5
user float: percentage
1.9815235E-4
Example event data values and properties
startTime long: millis
455798353258
system float: percentage
3.1606738E-5
user float: percentage
0.0

ThreadContextSwitchRate

default profiling startTime duration every chunk 11 17 21 25 27 28

Category: Operating System / Processor

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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:

    // Can take some time on certain platforms, especially under heavy load.
    // Transition to native to avoid unnecessary stalls for pending safepoint synchronizations.
    ThreadToNativeFromVM transition(JavaThread::current());
    ret_val = JfrOSInterface::context_switch_rate(&rate);
  }
  if (ret_val == OS_ERR) {
    log_debug(jfr, system)( "Unable to generate requestable event ThreadContextSwitchRate");
    return;
  }
  if (ret_val == FUNCTIONALITY_NOT_IMPLEMENTED) {
    return;
  }
  if (ret_val == OS_OK) {
    EventThreadContextSwitchRate event;
    event.set_switchRate((float)rate + 0.0f);
    event.commit();
  }
}

#define SEND_FLAGS_OF_TYPE(eventType, flagType)                   \
  do {                                                            \
    JVMFlag *flag = JVMFlag::flags;                               \
    while (flag->name() != nullptr) {                             \
      if (flag->is_ ## flagType()) {                              \
        if (flag->is_unlocked()) {                                \

Event configuration settings across JFR profiles
Configuration enabled period
default true 10 s
profiling true 10 s

Event fields with their types and descriptions
Field Type Description
switchRate float: hertz Switch Rate Number of context switches per second

Examples 3
Example event data values and properties
startTime long: millis
455800173581
switchRate float: hertz
5914.0635
Example event data values and properties
startTime long: millis
10584510779
switchRate float: hertz
9365.798
Example event data values and properties
startTime long: millis
487918475002
switchRate float: hertz
3825.5344

NetworkUtilization

default profiling startTime every chunk 11 17 21 25 27 28

Category: Operating System / Network

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

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/jfrNetworkUtilization.cpp:

  static JfrTicks last_sample_instant;
  const JfrTicks cur_time = JfrTicks::now();
  if (cur_time > last_sample_instant) {
    const JfrTickspan interval = cur_time - last_sample_instant;
    for (NetworkInterface *cur = network_interfaces; cur != nullptr; cur = cur->next()) {
      InterfaceEntry& entry = get_entry(cur);
      const uint64_t current_bytes_in = cur->get_bytes_in();
      const uint64_t current_bytes_out = cur->get_bytes_out();
      const uint64_t read_rate = rate_per_second(current_bytes_in, entry.bytes_in, interval);
      const uint64_t write_rate = rate_per_second(current_bytes_out, entry.bytes_out, interval);
      if (read_rate > 0 || write_rate > 0) {
        write_interface_constant(entry);
        EventNetworkUtilization event(UNTIMED);
        event.set_starttime(cur_time);
        event.set_endtime(cur_time);
        event.set_networkInterface(entry.id);
        event.set_readRate(8 * read_rate);
        event.set_writeRate(8 * write_rate);
        event.commit();
      }
      // update existing entry with new values
      entry.bytes_in = current_bytes_in;
      entry.bytes_out = current_bytes_out;
    }

Event configuration settings across JFR profiles
Configuration enabled period
default true 5 s
profiling true 5 s

Event fields with their types and descriptions
Field Type Description
networkInterface NetworkInterfaceName Network Interface Network Interface Name
readRate long: bits-per-second Read Rate Number of incoming bits per second
writeRate long: bits-per-second Write Rate Number of outgoing bits per second

Examples 3
Example event data values and properties
networkInterface NetworkInterfaceName
eth0
readRate long: bits-per-second
5928
startTime long: millis
487918097434
writeRate long: bits-per-second
8120
Example event data values and properties
networkInterface NetworkInterfaceName
enP24070s1
readRate long: bits-per-second
3080
startTime long: millis
455798326999
writeRate long: bits-per-second
4328
Example event data values and properties
networkInterface NetworkInterfaceName
eth0
readRate long: bits-per-second
12800
startTime long: millis
15726471693
writeRate long: bits-per-second
11712

PhysicalMemory

default profiling startTime duration every chunk 11 17 21 25 27 28

Category: Operating System / Memory

OS Physical 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/jfr/periodic/jfrPeriodic.cpp:

 *  PhysicalMemory event represents:
 *
 *  @totalSize == The amount of physical memory (hw) installed and reported by the OS, in bytes.
 *  @usedSize  == The amount of physical memory currently in use in the system (reserved/committed), in bytes.
 *
 *  Both fields are systemwide, i.e. represents the entire OS/HW environment.
 *  These fields do not include virtual memory.
 *
 *  If running inside a guest OS on top of a hypervisor in a virtualized environment,
 *  the total memory reported is the amount of memory configured for the guest OS by the hypervisor.
 */
TRACE_REQUEST_FUNC(PhysicalMemory) {
  physical_memory_size_type totalPhysicalMemory = os::physical_memory();
  EventPhysicalMemory event;
  event.set_totalSize(totalPhysicalMemory);
  physical_memory_size_type avail_mem = 0;
  // Return value ignored - defaulting to 0 on failure.
  (void)os::available_memory(avail_mem);
  event.set_usedSize(totalPhysicalMemory - avail_mem);
  event.commit();
}

TRACE_REQUEST_FUNC(SwapSpace) {
  EventSwapSpace event;
  physical_memory_size_type total_swap_space = 0;

Event configuration settings across JFR profiles
Configuration enabled period
default true everyChunk
profiling true everyChunk

Event fields with their types and descriptions
Field Type Description
totalSize ulong: bytes Total Size Total amount of physical memory available to OS
usedSize ulong: bytes Used Size Total amount of physical memory in use

Examples 3
Example event data values and properties
startTime long: millis
23227658152
totalSize ulong: bytes
16766414848
usedSize ulong: bytes
1167523840
Example event data values and properties
startTime long: millis
456686403325
totalSize ulong: bytes
16766414848
usedSize ulong: bytes
3608088576
Example event data values and properties
startTime long: millis
448951520522
totalSize ulong: bytes
16766414848
usedSize ulong: bytes
7020429312

SwapSpace

default profiling startTime duration every chunk 23 25 27 28

Category: Operating System / Memory

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

OS Swap Space

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(PhysicalMemory) {
  physical_memory_size_type totalPhysicalMemory = os::physical_memory();
  EventPhysicalMemory event;
  event.set_totalSize(totalPhysicalMemory);
  physical_memory_size_type avail_mem = 0;
  // Return value ignored - defaulting to 0 on failure.
  (void)os::available_memory(avail_mem);
  event.set_usedSize(totalPhysicalMemory - avail_mem);
  event.commit();
}

TRACE_REQUEST_FUNC(SwapSpace) {
  EventSwapSpace event;
  physical_memory_size_type total_swap_space = 0;
  // Return value ignored - defaulting to 0 on failure.
  (void)os::total_swap_space(total_swap_space);
  event.set_totalSize(static_cast<s8>(total_swap_space));
  physical_memory_size_type free_swap_space = 0;
  // Return value ignored - defaulting to 0 on failure.
  (void)os::free_swap_space(free_swap_space);
  event.set_freeSize(static_cast<s8>(free_swap_space));
  event.commit();
}

Event configuration settings across JFR profiles
Configuration enabled period
default true everyChunk
profiling true everyChunk

Event fields with their types and descriptions
Field Type Description
totalSize long: bytes Total Size Total swap space available to the OS
freeSize long: bytes Free Size Free swap space

Examples 3
Example event data values and properties
freeSize long: bytes
3221221376
startTime long: millis
493059693171
totalSize long: bytes
3221221376
Example event data values and properties
freeSize long: bytes
3221221376
startTime long: millis
494160443856
totalSize long: bytes
3221221376
Example event data values and properties
freeSize long: bytes
3221221376
startTime long: millis
25441079041
totalSize long: bytes
3221221376

ProcessStart

default profiling startTime duration 15 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java

Category: Operating System

Excludes in stack trace: java.lang.ProcessBuilder, java.lang.Runtime::exec

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Operating system process started

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/java.base/share/classes/jdk/internal/event/ProcessStartEvent.java:

package jdk.internal.event;

/**
 * Event for the start of an OS procsss
 */

public final class ProcessStartEvent extends Event {
    public long pid;
    public String directory;
    public String command;
}

src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:

/**
 * This class registers all mirror events.
 */
final class MirrorEvents {
    private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();

    // Add mirror event mapping here. See MirrorEvent class for details.
    static {
        register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
        register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
        register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
        register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
        register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
        register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
        register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
        register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
        register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
        register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
        register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
        register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
        register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
        register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
        register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
        register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);

src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java:

@Category({"Operating System"})
@Label("Process Start")
@Name("jdk.ProcessStart")
@Description("Operating system process started")
@RemoveFields("duration")
@StackFilter({"java.lang.ProcessBuilder", "java.lang.Runtime::exec"})
public final class ProcessStartEvent extends MirrorEvent {
    @Label("Process Id")
    public long pid;

    @Label("Directory")
    public String directory;

    @Label("Command")
    public String command;
}

src/java.base/share/classes/java/lang/ProcessBuilder.java:

        for (String s : cmdarray) {
            if (s.indexOf('\u0000') >= 0) {
                throw new IOException("invalid null character in command");
            }
        }

        try {
            Process process = ProcessImpl.start(cmdarray,
                                     environment,
                                     dir,
                                     redirects,
                                     redirectErrorStream);
            ProcessStartEvent event = new ProcessStartEvent();
            if (event.isEnabled()) {
                event.directory = dir;
                event.command = String.join(" ", cmdarray);
                event.pid = process.pid();
                event.commit();
            }
            // Racy initialization for logging; errors in configuration may throw exceptions
            System.Logger logger = LOGGER;
            if (logger == null) {
                LOGGER = logger = System.getLogger("java.lang.ProcessBuilder");
            }

Event configuration settings across JFR profiles
Configuration enabled stackTrace
default true true
profiling true true

Event fields with their types and descriptions
Field Type Description
pid long Process Id
directory string Directory
command string Command

Examples 3
Example event data values and properties
command string
rm -rf /home/runner/work/jfrevents/jfrevents/harness-124410-7892773325794487906/apache-spark/gauss-mix/spark-df1eba34-4695-4783-bae8-11dc81e0887a
directory string
null
pid long
4939
startTime long: millis
510403071219
Example event data values and properties
command string
rm -rf /home/runner/work/jfrevents/jfrevents/harness-002552-11024252767585181307/apache-spark/gauss-mix/blockmgr-f7c75636-1699-4af0-941d-65cec3940163
directory string
null
pid long
4462
startTime long: millis
475245775886
Example event data values and properties
command string
java -version
directory string
null
pid long
5056
startTime long: millis
1147234961

ContainerCPUThrottling

default profiling startTime duration stackTrace 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/ContainerCPUThrottlingEvent.java

Category: Operating System / Processor

Container CPU throttling related information

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/JDKEvents.java:

    private static void initializeContainerEvents() {
        if (JVM.isContainerized() ) {
            Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "JVM is containerized");
            containerMetrics = Container.metrics();
            if (containerMetrics != null) {
                Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Container metrics are available");
            }
        }
        // The registration of events and hooks are needed to provide metadata,
        // even when not running in a container
        registerEvent(ContainerConfigurationEvent.class);
        registerEvent(ContainerCPUUsageEvent.class);
        registerEvent(ContainerCPUThrottlingEvent.class);
        registerEvent(ContainerMemoryUsageEvent.class);
        registerEvent(ContainerIOUsageEvent.class);

        PeriodicEvents.addJavaEvent(ContainerConfigurationEvent.class, emitContainerConfiguration);
        PeriodicEvents.addJavaEvent(ContainerCPUUsageEvent.class, emitContainerCPUUsage);
        PeriodicEvents.addJavaEvent(ContainerCPUThrottlingEvent.class, emitContainerCPUThrottling);
        PeriodicEvents.addJavaEvent(ContainerMemoryUsageEvent.class, emitContainerMemoryUsage);
        PeriodicEvents.addJavaEvent(ContainerIOUsageEvent.class, emitContainerIOUsage);
    }

    private static void registerEvent(Class<? extends jdk.internal.event.Event> eventClass) {
        MetadataRepository.getInstance().register(eventClass);
    }

    private static void emitExceptionStatistics() {
        ThrowableTracer.emitStatistics();
    }

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

    private static void emitContainerIOUsage() {
        if (containerMetrics != null) {
            ContainerIOUsageEvent event = new ContainerIOUsageEvent();

            event.serviceRequests = containerMetrics.getBlkIOServiceCount();
            event.dataTransferred = containerMetrics.getBlkIOServiced();
            event.commit();
        }
    }

    private static void emitContainerCPUThrottling() {
        if (containerMetrics != null) {
            ContainerCPUThrottlingEvent event = new ContainerCPUThrottlingEvent();

            event.cpuElapsedSlices = containerMetrics.getCpuNumPeriods();
            event.cpuThrottledSlices = containerMetrics.getCpuNumThrottled();
            event.cpuThrottledTime = containerMetrics.getCpuThrottledTime();
            event.commit();
        }
    }

    public static void remove() {
        PeriodicEvents.removeEvent(emitExceptionStatistics);
        PeriodicEvents.removeEvent(emitDirectBufferStatistics);

src/jdk.jfr/share/classes/jdk/jfr/events/ContainerCPUThrottlingEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.Timespan;
import jdk.jfr.internal.Type;

@Name(Type.EVENT_NAME_PREFIX + "ContainerCPUThrottling")
@Label("CPU Throttling")
@Category({"Operating System", "Processor"})
@Description("Container CPU throttling related information")
public class ContainerCPUThrottlingEvent extends AbstractPeriodicEvent {
  @Label("CPU Elapsed Slices")
  @Description("Number of time-slice periods that have elapsed if a CPU quota has been setup for the container")
  public long cpuElapsedSlices;

  @Label("CPU Throttled Slices")
  @Description("Number of time-slice periods that the CPU has been throttled or limited due to exceeding CPU quota")
  public long cpuThrottledSlices;

  @Label("CPU Throttled Time")
  @Description("Total time duration, in nanoseconds, that the CPU has been throttled or limited due to exceeding CPU quota")
  @Timespan

Event configuration settings across JFR profiles
Configuration enabled period
default true 30 s
profiling true 30 s

Event fields with their types and descriptions
Field Type Description
cpuElapsedSlices long CPU Elapsed Slices Number of time-slice periods that have elapsed if a CPU quota has been setup for the container
cpuThrottledSlices long CPU Throttled Slices Number of time-slice periods that the CPU has been throttled or limited due to exceeding CPU quota
cpuThrottledTime long: nanos CPU Throttled Time Total time duration, in nanoseconds, that the CPU has been throttled or limited due to exceeding CPU quota

ContainerCPUUsage

default profiling startTime duration stackTrace 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/ContainerCPUUsageEvent.java

Category: Operating System / Processor

Container CPU usage related information

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/JDKEvents.java:

    private static void initializeContainerEvents() {
        if (JVM.isContainerized() ) {
            Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "JVM is containerized");
            containerMetrics = Container.metrics();
            if (containerMetrics != null) {
                Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Container metrics are available");
            }
        }
        // The registration of events and hooks are needed to provide metadata,
        // even when not running in a container
        registerEvent(ContainerConfigurationEvent.class);
        registerEvent(ContainerCPUUsageEvent.class);
        registerEvent(ContainerCPUThrottlingEvent.class);
        registerEvent(ContainerMemoryUsageEvent.class);
        registerEvent(ContainerIOUsageEvent.class);

        PeriodicEvents.addJavaEvent(ContainerConfigurationEvent.class, emitContainerConfiguration);
        PeriodicEvents.addJavaEvent(ContainerCPUUsageEvent.class, emitContainerCPUUsage);
        PeriodicEvents.addJavaEvent(ContainerCPUThrottlingEvent.class, emitContainerCPUThrottling);
        PeriodicEvents.addJavaEvent(ContainerMemoryUsageEvent.class, emitContainerMemoryUsage);
        PeriodicEvents.addJavaEvent(ContainerIOUsageEvent.class, emitContainerIOUsage);
    }

    private static void registerEvent(Class<? extends jdk.internal.event.Event> eventClass) {
        MetadataRepository.getInstance().register(eventClass);
    }

    private static void emitExceptionStatistics() {
        ThrowableTracer.emitStatistics();

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

            t.cpuShares = containerMetrics.getCpuShares();
            t.effectiveCpuCount = containerMetrics.getEffectiveCpuCount();
            t.memorySoftLimit = containerMetrics.getMemorySoftLimit();
            t.memoryLimit = containerMetrics.getMemoryLimit();
            t.swapMemoryLimit = containerMetrics.getMemoryAndSwapLimit();
            t.hostTotalMemory = JVM.hostTotalMemory();
            t.hostTotalSwapMemory = JVM.hostTotalSwapMemory();
            t.commit();
        }
    }

    private static void emitContainerCPUUsage() {
        if (containerMetrics != null) {
            ContainerCPUUsageEvent event = new ContainerCPUUsageEvent();

            event.cpuTime = containerMetrics.getCpuUsage();
            event.cpuSystemTime = containerMetrics.getCpuSystemUsage();
            event.cpuUserTime = containerMetrics.getCpuUserUsage();
            event.commit();
        }
    }
    private static void emitContainerMemoryUsage() {
        if (containerMetrics != null) {
            ContainerMemoryUsageEvent event = new ContainerMemoryUsageEvent();

src/jdk.jfr/share/classes/jdk/jfr/events/ContainerCPUUsageEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.Timespan;
import jdk.jfr.internal.Type;

@Name(Type.EVENT_NAME_PREFIX + "ContainerCPUUsage")
@Label("CPU Usage")
@Category({"Operating System", "Processor"})
@Description("Container CPU usage related information")
public class ContainerCPUUsageEvent extends AbstractPeriodicEvent {
  @Label("CPU Time")
  @Description("Aggregate time consumed by all tasks in the container")
  @Timespan
  public long cpuTime;

  @Label("CPU User Time")
  @Description("Aggregate user time consumed by all tasks in the container")
  @Timespan
  public long cpuUserTime;

  @Label("CPU System Time")

Event configuration settings across JFR profiles
Configuration enabled period
default true 30 s
profiling true 30 s

Event fields with their types and descriptions
Field Type Description
cpuTime long: nanos CPU Time Aggregate time consumed by all tasks in the container
cpuUserTime long: nanos CPU User Time Aggregate user time consumed by all tasks in the container
cpuSystemTime long: nanos CPU System Time Aggregate system time consumed by all tasks in the container

ContainerMemoryUsage

default profiling startTime duration stackTrace 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/ContainerMemoryUsageEvent.java

Category: Operating System / Memory

Container memory usage related information

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/JDKEvents.java:

    private static void initializeContainerEvents() {
        if (JVM.isContainerized() ) {
            Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "JVM is containerized");
            containerMetrics = Container.metrics();
            if (containerMetrics != null) {
                Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Container metrics are available");
            }
        }
        // The registration of events and hooks are needed to provide metadata,
        // even when not running in a container
        registerEvent(ContainerConfigurationEvent.class);
        registerEvent(ContainerCPUUsageEvent.class);
        registerEvent(ContainerCPUThrottlingEvent.class);
        registerEvent(ContainerMemoryUsageEvent.class);
        registerEvent(ContainerIOUsageEvent.class);

        PeriodicEvents.addJavaEvent(ContainerConfigurationEvent.class, emitContainerConfiguration);
        PeriodicEvents.addJavaEvent(ContainerCPUUsageEvent.class, emitContainerCPUUsage);
        PeriodicEvents.addJavaEvent(ContainerCPUThrottlingEvent.class, emitContainerCPUThrottling);
        PeriodicEvents.addJavaEvent(ContainerMemoryUsageEvent.class, emitContainerMemoryUsage);
        PeriodicEvents.addJavaEvent(ContainerIOUsageEvent.class, emitContainerIOUsage);
    }

    private static void registerEvent(Class<? extends jdk.internal.event.Event> eventClass) {
        MetadataRepository.getInstance().register(eventClass);
    }

    private static void emitExceptionStatistics() {
        ThrowableTracer.emitStatistics();
    }

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

    private static void emitContainerCPUUsage() {
        if (containerMetrics != null) {
            ContainerCPUUsageEvent event = new ContainerCPUUsageEvent();

            event.cpuTime = containerMetrics.getCpuUsage();
            event.cpuSystemTime = containerMetrics.getCpuSystemUsage();
            event.cpuUserTime = containerMetrics.getCpuUserUsage();
            event.commit();
        }
    }
    private static void emitContainerMemoryUsage() {
        if (containerMetrics != null) {
            ContainerMemoryUsageEvent event = new ContainerMemoryUsageEvent();

            event.memoryFailCount = containerMetrics.getMemoryFailCount();
            event.memoryUsage = containerMetrics.getMemoryUsage();
            event.swapMemoryUsage = containerMetrics.getMemoryAndSwapUsage();
            event.hostMemoryUsage = JVM.hostMemoryUsage();
            event.commit();
        }
    }

    private static void emitContainerIOUsage() {
        if (containerMetrics != null) {

src/jdk.jfr/share/classes/jdk/jfr/events/ContainerMemoryUsageEvent.java:

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.DataAmount;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.Type;

@Name(Type.EVENT_NAME_PREFIX + "ContainerMemoryUsage")
@Label("Container Memory Usage")
@Category({"Operating System", "Memory"})
@Description("Container memory usage related information")
public final class ContainerMemoryUsageEvent extends AbstractPeriodicEvent {
    @Label("Memory Fail Count")
    @Description("Number of times that user memory requests in the container have exceeded the memory limit")
    public long memoryFailCount;

    @Label("Memory Usage")
    @Description("Amount of physical memory, in bytes, that is currently allocated in the current container")
    @DataAmount
    public long memoryUsage;

    @Label("Memory and Swap Usage")
    @Description("Amount of physical memory and swap space, in bytes, that is currently allocated in the current container")

Event configuration settings across JFR profiles
Configuration enabled period
default true 30 s
profiling true 30 s

Event fields with their types and descriptions
Field Type Description
memoryFailCount long Memory Fail Count Number of times that user memory requests in the container have exceeded the memory limit
memoryUsage long: bytes Memory Usage Amount of physical memory, in bytes, that is currently allocated in the current container
swapMemoryUsage long: bytes Memory and Swap Usage Amount of physical memory and swap space, in bytes, that is currently allocated in the current container
hostMemoryUsage long: bytes 27+ Host Memory Usage Amount of physical memory, in bytes, that is currently allocated in the host system

ContainerConfiguration

default profiling startTime duration stackTrace 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/ContainerConfigurationEvent.java

Category: Operating System

A set of container specific attributes

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/JDKEvents.java:

    private static void initializeContainerEvents() {
        if (JVM.isContainerized() ) {
            Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "JVM is containerized");
            containerMetrics = Container.metrics();
            if (containerMetrics != null) {
                Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Container metrics are available");
            }
        }
        // The registration of events and hooks are needed to provide metadata,
        // even when not running in a container
        registerEvent(ContainerConfigurationEvent.class);
        registerEvent(ContainerCPUUsageEvent.class);
        registerEvent(ContainerCPUThrottlingEvent.class);
        registerEvent(ContainerMemoryUsageEvent.class);
        registerEvent(ContainerIOUsageEvent.class);

        PeriodicEvents.addJavaEvent(ContainerConfigurationEvent.class, emitContainerConfiguration);
        PeriodicEvents.addJavaEvent(ContainerCPUUsageEvent.class, emitContainerCPUUsage);
        PeriodicEvents.addJavaEvent(ContainerCPUThrottlingEvent.class, emitContainerCPUThrottling);
        PeriodicEvents.addJavaEvent(ContainerMemoryUsageEvent.class, emitContainerMemoryUsage);
        PeriodicEvents.addJavaEvent(ContainerIOUsageEvent.class, emitContainerIOUsage);
    }

    private static void registerEvent(Class<? extends jdk.internal.event.Event> eventClass) {
        MetadataRepository.getInstance().register(eventClass);
    }

    private static void emitExceptionStatistics() {
        ThrowableTracer.emitStatistics();
    }

    private static void emitContainerConfiguration() {
        if (containerMetrics != null) {
            ContainerConfigurationEvent t = new ContainerConfigurationEvent();
            t.containerType = containerMetrics.getProvider();
            t.cpuSlicePeriod = containerMetrics.getCpuPeriod();
            t.cpuQuota = containerMetrics.getCpuQuota();
            t.cpuShares = containerMetrics.getCpuShares();
            t.effectiveCpuCount = containerMetrics.getEffectiveCpuCount();
            t.memorySoftLimit = containerMetrics.getMemorySoftLimit();
            t.memoryLimit = containerMetrics.getMemoryLimit();
            t.swapMemoryLimit = containerMetrics.getMemoryAndSwapLimit();
            t.hostTotalMemory = JVM.hostTotalMemory();
            t.hostTotalSwapMemory = JVM.hostTotalSwapMemory();
            t.commit();

src/jdk.jfr/share/classes/jdk/jfr/events/ContainerConfigurationEvent.java:

@Name(Type.EVENT_NAME_PREFIX + "ContainerConfiguration")
@Label("Container Configuration")
@Category({"Operating System"})
@Description("A set of container specific attributes")
public final class ContainerConfigurationEvent extends AbstractPeriodicEvent {
    @Label("Container Type")
    @Description("Container type information")
    public String containerType;

    @Label("CPU Slice Period")
    @Description("Length of the scheduling period for processes within the container")
    @Timespan(Timespan.MICROSECONDS)
    public long cpuSlicePeriod;

    @Label("CPU Quota")
    @Description("Total available run-time allowed during each scheduling period for all tasks in the container")

Event configuration settings across JFR profiles
Configuration enabled period
default true beginChunk
profiling true beginChunk

Event fields with their types and descriptions
Field Type Description
containerType string Container Type Container type information
cpuSlicePeriod long: microseconds CPU Slice Period Length of the scheduling period for processes within the container
cpuQuota long: microseconds CPU Quota Total available run-time allowed during each scheduling period for all tasks in the container
cpuShares long CPU Shares Relative weighting of processes with the container used for prioritizing the scheduling of processes across all containers running on a host
effectiveCpuCount long Effective CPU Count Number of effective processors that this container has available to it
memorySoftLimit long: bytes Memory Soft Limit Hint to the operating system that allows groups to specify the minimum required amount of physical memory
memoryLimit long: bytes Memory Limit Maximum amount of physical memory that can be allocated in the container
swapMemoryLimit long: bytes Memory and Swap Limit Maximum amount of physical memory and swap space, in bytes, that can be allocated in the container
hostTotalMemory long: bytes 20+ Container Host Total Memory Total memory of the host running the container
hostTotalSwapMemory long: bytes 23+ Container Host Total Swap Memory Total swap memory of the host running the container

ContainerIOUsage

default profiling startTime duration stackTrace 17 21 25 27 28

Source src/jdk.jfr/share/classes/jdk/jfr/events/ContainerIOUsageEvent.java

Category: Operating System / File System

Container IO usage related information

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/JDKEvents.java:

        if (JVM.isContainerized() ) {
            Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "JVM is containerized");
            containerMetrics = Container.metrics();
            if (containerMetrics != null) {
                Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Container metrics are available");
            }
        }
        // The registration of events and hooks are needed to provide metadata,
        // even when not running in a container
        registerEvent(ContainerConfigurationEvent.class);
        registerEvent(ContainerCPUUsageEvent.class);
        registerEvent(ContainerCPUThrottlingEvent.class);
        registerEvent(ContainerMemoryUsageEvent.class);
        registerEvent(ContainerIOUsageEvent.class);

        PeriodicEvents.addJavaEvent(ContainerConfigurationEvent.class, emitContainerConfiguration);
        PeriodicEvents.addJavaEvent(ContainerCPUUsageEvent.class, emitContainerCPUUsage);
        PeriodicEvents.addJavaEvent(ContainerCPUThrottlingEvent.class, emitContainerCPUThrottling);
        PeriodicEvents.addJavaEvent(ContainerMemoryUsageEvent.class, emitContainerMemoryUsage);
        PeriodicEvents.addJavaEvent(ContainerIOUsageEvent.class, emitContainerIOUsage);
    }

    private static void registerEvent(Class<? extends jdk.internal.event.Event> eventClass) {
        MetadataRepository.getInstance().register(eventClass);
    }

    private static void emitExceptionStatistics() {
        ThrowableTracer.emitStatistics();
    }

    private static void emitContainerConfiguration() {

src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:

        if (containerMetrics != null) {
            ContainerMemoryUsageEvent event = new ContainerMemoryUsageEvent();

            event.memoryFailCount = containerMetrics.getMemoryFailCount();
            event.memoryUsage = containerMetrics.getMemoryUsage();
            event.swapMemoryUsage = containerMetrics.getMemoryAndSwapUsage();
            event.hostMemoryUsage = JVM.hostMemoryUsage();
            event.commit();
        }
    }

    private static void emitContainerIOUsage() {
        if (containerMetrics != null) {
            ContainerIOUsageEvent event = new ContainerIOUsageEvent();

            event.serviceRequests = containerMetrics.getBlkIOServiceCount();
            event.dataTransferred = containerMetrics.getBlkIOServiced();
            event.commit();
        }
    }

    private static void emitContainerCPUThrottling() {
        if (containerMetrics != null) {
            ContainerCPUThrottlingEvent event = new ContainerCPUThrottlingEvent();

src/jdk.jfr/share/classes/jdk/jfr/events/ContainerIOUsageEvent.java:

@Name(Type.EVENT_NAME_PREFIX + "ContainerIOUsage")
@Label("Container IO Usage")
@Category({"Operating System", "File System"})
@Description("Container IO usage related information")
public class ContainerIOUsageEvent extends AbstractPeriodicEvent {

  @Label("Block IO Request Count")
  @Description("Number of block IO requests to the disk that have been issued by the container")
  public long serviceRequests;

  @Label("Block IO Transfer")
  @Description("Number of block IO bytes that have been transferred to/from the disk by the container")
  @DataAmount
  public long dataTransferred;
}

Event configuration settings across JFR profiles
Configuration enabled period
default true 30 s
profiling true 30 s

Event fields with their types and descriptions
Field Type Description
serviceRequests long Block IO Request Count Number of block IO requests to the disk that have been issued by the container
dataTransferred long: bytes Block IO Transfer Number of block IO bytes that have been transferred to/from the disk by the container

Types

Bytecode

14+

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Bytecode Instruction

Event fields with their types and descriptions
Field Type Description
bytecode string Instruction

Examples 3
if_icmpne
invokeinterface
checkcast

CalleeMethod

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Event fields with their types and descriptions
Field Type Description
type string Class
name string Method Name
descriptor string Method Descriptor

Examples 3
Example event data values and properties
descriptor string
(B)V
name string
putUncheckedByte
type string
jdk/jfr/internal/event/EventWriter
Example event data values and properties
descriptor string
([BII)[B
name string
copyOfRange
type string
java/util/Arrays
Example event data values and properties
descriptor string
()V
name string
<init>
type string
java/lang/Object

ChunkHeader

14+

Chunk Header

Event fields with their types and descriptions
Field Type Description
payload array byte Payload

Class

Java Class

Event fields with their types and descriptions
Field Type Description
classLoader ClassLoader Class Loader
name Symbol Name
package Package Package
modifiers int Access Modifiers
hidden boolean 15+ Hidden

ClassLoader

Java Class Loader

Event fields with their types and descriptions
Field Type Description
type Class Type
name Symbol Name

CodeBlobType

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Code Blob Type

Event fields with their types and descriptions
Field Type Description
type string Type

Examples 3
CodeHeap 'profiled nmethods'
CodeHeap 'profiled nmethods'
CodeHeap 'non-nmethods'

CompilerPhaseType

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Compiler Phase Type

Event fields with their types and descriptions
Field Type Description
phase string Phase

Examples 3
After CountedLoop
Before beautify loops
After Loop Optimizations

CompilerType

14+

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Compiler Type

Event fields with their types and descriptions
Field Type Description
compiler string Compiler

Examples 3

CopyFailed

Event fields with their types and descriptions
Field Type Description
objectCount ulong Object Count
firstSize ulong: bytes First Failed Object Size
smallestSize ulong: bytes Smallest Failed Object Size
totalSize ulong: bytes Total Object Size

DeoptimizationAction

14+

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Deoptimization Action

Event fields with their types and descriptions
Field Type Description
action string Action

Examples 3
reinterpret
maybe_recompile
maybe_recompile

DeoptimizationReason

14+

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Deoptimization Reason

Event fields with their types and descriptions
Field Type Description
reason string Reason

Examples 3
unstable_if
speculate_class_check
bimorphic_or_optimized_type_check

FlagValueOrigin

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Flag Value Origin

Event fields with their types and descriptions
Field Type Description
origin string Origin

Examples 3

FrameType

Frame type

Event fields with their types and descriptions
Field Type Description
description string Description

Examples 3
Inlined
Native
JIT compiled

G1EvacuationStatistics

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Event fields with their types and descriptions
Field Type Description
gcId uint GC Identifier
allocated ulong: bytes Allocated Total memory allocated by PLABs
wasted ulong: bytes Wasted Total memory wasted within PLABs due to alignment or refill
used ulong: bytes Used Total memory occupied by objects within PLABs
undoWaste ulong: bytes Undo Wasted Total memory wasted due to allocation undo within PLABs
regionEndWaste ulong: bytes Region End Wasted Total memory wasted at the end of regions due to refill
regionsRefilled uint Region Refills Number of regions refilled
numPlabsFilled ulong 17+ PLAB Fills Number of PLABs filled
directAllocated ulong: bytes Allocated (Direct) Total memory allocated using direct allocation outside of PLABs
numDirectAllocated ulong 17+ Direct Allocations Number of direct allocations
failureUsed ulong: bytes Used (Failure) Total memory occupied by objects in regions where evacuation failed
failureWaste ulong: bytes Wasted (Failure) Total memory left unused in regions where evacuation failed

Examples 3
Example event data values and properties
allocated ulong: bytes
0
directAllocated ulong: bytes
0
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
1065
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
0
undoWaste ulong: bytes
0
used ulong: bytes
0
wasted ulong: bytes
0
Example event data values and properties
allocated ulong: bytes
462240
directAllocated ulong: bytes
73256
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
1065
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
1
undoWaste ulong: bytes
0
used ulong: bytes
370792
wasted ulong: bytes
696
Example event data values and properties
allocated ulong: bytes
1799568
directAllocated ulong: bytes
0
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
71
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
1
undoWaste ulong: bytes
0
used ulong: bytes
1503016
wasted ulong: bytes
20040

G1HeapRegionType

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

G1 Heap Region Type

Event fields with their types and descriptions
Field Type Description
type string Type

Examples 3

G1YCType

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

G1 YC Type

Event fields with their types and descriptions
Field Type Description
type string Type

Examples 2

GCCause

GC Cause

Event fields with their types and descriptions
Field Type Description
cause string Cause

Examples 3
G1 Evacuation Pause
G1 Humongous Allocation
Heap Inspection Initiated GC

GCName

GC Name

Event fields with their types and descriptions
Field Type Description
name string Name

Examples 3

GCThresholdUpdater

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

GC Threshold Updater

Event fields with their types and descriptions
Field Type Description
updater string Updater

Examples 3
compute_new_size
compute_new_size
compute_new_size

GCWhen

GC When

Event fields with their types and descriptions
Field Type Description
when string When

Examples 3

InflateCause

Inflation Cause

Event fields with their types and descriptions
Field Type Description
cause string Cause

Examples 3
Monitor Wait
Monitor Enter
Monitor Wait

MetadataType

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Metadata Type

Event fields with their types and descriptions
Field Type Description
type string Type

Examples 3

MetaspaceObjectType

Metaspace Object Type

Event fields with their types and descriptions
Field Type Description
type string Type

MetaspaceSizes

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Event fields with their types and descriptions
Field Type Description
committed ulong: bytes Committed Committed memory for this space
used ulong: bytes Used Bytes allocated by objects in the space
reserved ulong: bytes Reserved Reserved memory for this space

Examples 3
Example event data values and properties
committed ulong: bytes
778633216
reserved ulong: bytes
805306368
used ulong: bytes
776803744
Example event data values and properties
committed ulong: bytes
179175424
reserved ulong: bytes
1073741824
used ulong: bytes
177477752
Example event data values and properties
committed ulong: bytes
957808640
reserved ulong: bytes
1879048192
used ulong: bytes
954281496

Method

Java Method

Event fields with their types and descriptions
Field Type Description
type Class Type
name Symbol Name
descriptor Symbol Descriptor
modifiers int Access Modifiers
hidden boolean Hidden

Module

Module

Event fields with their types and descriptions
Field Type Description
name Symbol Name
version Symbol Version
location Symbol Location
classLoader ClassLoader Class Loader

NMTType

21+

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Native Memory Tracking Type

Event fields with their types and descriptions
Field Type Description
name string Name

Examples 3
Native Memory Tracking
Arguments
Safepoint

NarrowOopMode

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Narrow Oop Mode

Event fields with their types and descriptions
Field Type Description
mode string Mode

Examples 3

NetworkInterfaceName

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Network Interface

Event fields with their types and descriptions
Field Type Description
networkInterface string Network Interface Network Interface Name

Examples 3

ObjectSpace

Appearing in: linux_ParallelGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, linux_G1GC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Event fields with their types and descriptions
Field Type Description
start ulong: address Start Address Start address of the space
end ulong: address End Address End address of the space
used ulong: bytes Used Bytes allocated by objects in the space
size ulong: bytes Size Size of the space

Examples 3
Example event data values and properties
end ulong: address
34357641216
size ulong: bytes
79691776
start ulong: address
34277949440
used ulong: bytes
0
Example event data values and properties
end ulong: address
32398901248
size ulong: bytes
2231369728
start ulong: address
30167531520
used ulong: bytes
254571992
Example event data values and properties
end ulong: address
34187771904
size ulong: bytes
1224736768
start ulong: address
32963035136
used ulong: bytes
592313328

OldObject

Appearing in: graalvm_linux_G1GC, graalvm_linux_native, linux_G1GC, linux_ParallelGC, linux_SerialGC

Missing in: linux_ShenandoahGC, linux_ZGC

Old Object

Event fields with their types and descriptions
Field Type Description
address ulong: address Memory Address
type Class Java Class
description string Object Description Object description
referrer Reference Referrer Object Object referencing this object

Examples 3
Example event data values and properties
address ulong: address
30404871592
description string
Size: 1
referrer Reference
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
8
name string
java/lang/ThreadLocal$ThreadLocalMap
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.4.1
name string
java/lang
Example event data values and properties
address ulong: address
30252914504
description string
null
referrer Reference
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/jar/Attributes
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.4.1
name string
java/util/jar
Example event data values and properties
address ulong: address
30175708344
description string
null
referrer Reference
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[B
package Package
null

OldObjectArray

Old Object Array

Event fields with their types and descriptions
Field Type Description
size int Array Size Size of array
index int Index Index in the array

OldObjectField

Old Object Field

Event fields with their types and descriptions
Field Type Description
name string Field Name of field
modifiers short Field Modifiers Field modifiers

OldObjectGcRoot

Appearing in: graalvm_linux_G1GC, graalvm_linux_native, linux_G1GC, linux_ParallelGC, linux_SerialGC

Missing in: linux_ShenandoahGC, linux_ZGC

GC Root

Event fields with their types and descriptions
Field Type Description
description string Root Description Root information
system OldObjectRootSystem System The subsystem of origin for the root
type OldObjectRootType Type The root type

Examples 3

OldObjectRootSystem

GC Root System

Event fields with their types and descriptions
Field Type Description
system string System

OldObjectRootType

GC Root Type

Event fields with their types and descriptions
Field Type Description
type string Type

Package

Package

Event fields with their types and descriptions
Field Type Description
name Symbol Name
module Module Module
exported boolean Exported

Reference

Appearing in: graalvm_linux_G1GC, graalvm_linux_native, linux_G1GC, linux_ParallelGC, linux_SerialGC

Missing in: linux_ShenandoahGC, linux_ZGC

Reference

Event fields with their types and descriptions
Field Type Description
array OldObjectArray Array Information Array or null if it is not an array
field OldObjectField Field Information Field or null if it is an array
object OldObject Object Object holder for this reference
skip int Skip Value The object is this many hops away

Examples 3

ReferenceType

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Reference Type

Event fields with their types and descriptions
Field Type Description
type string Type

Examples 3
Final reference
Weak reference
Soft reference

ShenandoahHeapRegionState

Appearing in: linux_ShenandoahGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ZGC

Shenandoah Heap Region State

Event fields with their types and descriptions
Field Type Description
state string State

Examples 3
Empty Committed
Empty Uncommitted
Humongous Start

StackFrame

Event fields with their types and descriptions
Field Type Description
method Method Java Method
lineNumber int Line Number
bytecodeIndex int Bytecode Index
type FrameType Frame Type

Examples 3
Example event data values and properties
bytecodeIndex int
1
lineNumber int
273
method Method
descriptor string
(I)[D
hidden boolean
false
modifiers int
1
name string
newArray
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.4.1
name string
java/net
hidden boolean
false
modifiers int
25
name string
scala/reflect/ManifestFactory$DoubleManifest
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
scala/reflect
type FrameType
Inlined
Example event data values and properties
bytecodeIndex int
12
lineNumber int
69
method Method
descriptor string
(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
hidden boolean
false
modifiers int
1
name string
apply
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.4.1
name string
java/net
hidden boolean
false
modifiers int
1537
name string
breeze/linalg/operators/BinaryRegistry
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
breeze/linalg/operators
type FrameType
JIT compiled
Example event data values and properties
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(ZJ)V
hidden boolean
false
modifiers int
257
name string
park
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.4.1
name string
jdk/internal/misc
type FrameType
Native

StackTrace

Stacktrace

Event fields with their types and descriptions
Field Type Description
truncated boolean Truncated
frames array StackFrame struct Stack Frames

Symbol

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Symbol

Event fields with their types and descriptions
Field Type Description
string string String

Examples 3
resource:///shared/netty-buffer-4.1.114.Final.jar
resource:///unique/apache-spark/spark-core_2.13-3.5.3.jar
jrt:///jdk.zipfs

Thread

Thread

Event fields with their types and descriptions
Field Type Description
osName string OS Thread Name
osThreadId long OS Thread Id
javaName string Java Thread Name
javaThreadId long Java Thread Id
group ThreadGroup Java Thread Group
virtual boolean 19+ Virtual Thread

ThreadGroup

Thread Group

Event fields with their types and descriptions
Field Type Description
parent ThreadGroup Parent
name string Name

Examples 3
Example event data values and properties
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
null
Example event data values and properties
name string
system
parent ThreadGroup
null

ThreadState

Java Thread State

Event fields with their types and descriptions
Field Type Description
name string Name

Examples 3
STATE_RUNNABLE
STATE_RUNNABLE
STATE_RUNNABLE

VMOperationType

VM Operation Type

Event fields with their types and descriptions
Field Type Description
type string Type

Examples 3
GC_HeapInspection
G1CollectForAllocation
G1TryInitiateConcMark

VMThreadState

25+

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

JVM Thread State

Event fields with their types and descriptions
Field Type Description
state string State

Examples 3
_thread_in_Java
_thread_in_Java
_thread_in_Java

VirtualSpace

Event fields with their types and descriptions
Field Type Description
start ulong: address Start Address Start address of the virtual space
committedEnd ulong: address Committed End Address End address of the committed memory for the virtual space
committedSize ulong: bytes Committed Size Size of the committed memory for the virtual space
reservedEnd ulong: address Reserved End Address End address of the reserved memory for the virtual space
reservedSize ulong: bytes Reserved Size Size of the reserved memory for the virtual space

Examples 3
Example event data values and properties
committedEnd ulong: address
30234640384
committedSize ulong: bytes
67108864
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
4192206848
start ulong: address
30167531520
Example event data values and properties
committedEnd ulong: address
33464254464
committedSize ulong: bytes
3296722944
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
4192206848
start ulong: address
30167531520
Example event data values and properties
committedEnd ulong: address
31035752448
committedSize ulong: bytes
868220928
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
4192206848
start ulong: address
30167531520

ZPageTypeType

15+

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC

Z Page Type

Event fields with their types and descriptions
Field Type Description
type string Type

Examples 1

ZStatisticsCounterType

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC

Z Statistics Counter

Event fields with their types and descriptions
Field Type Description
counter string Counter

Examples 1
Allocation Rate

ZStatisticsSamplerType

Appearing in: linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC

Z Statistics Sampler

Event fields with their types and descriptions
Field Type Description
sampler string Sampler

Examples 2
Concurrent Weak Roots OopStorageSet
JNI Critical Stall

XML Content Types

address

Annotation: jdk.jfr.MemoryAddress

Examples 3
30362878480
31012683776
94895174441632

bits-per-second

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Annotation: jdk.jfr.DataAmount(BITS), jdk.jfr.Frequency

Examples 3

bytes

Annotation: jdk.jfr.DataAmount(BYTES)

Examples 3

bytes-per-second

Annotation: jdk.jfr.DataAmount(BYTES), jdk.jfr.Frequency

certificateId

Appearing in: linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_G1GC, graalvm_linux_native

Annotation: jdk.jfr.events.CertificateId

Examples 3

epochmillis

Annotation: jdk.jfr.Timestamp(MILLISECONDS_SINCE_EPOCH)

Examples 3
-9223372036854775808
1788871449128
1788871449508

hertz

Appearing in: graalvm_linux_G1GC, linux_G1GC, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Missing in: graalvm_linux_native

Annotation: jdk.jfr.Frequency

Examples 3

microseconds

17+

Annotation: jdk.jfr.Timespan(MICROSECONDS)

millis

Annotation: jdk.jfr.Timespan(MILLISECONDS)

Examples 3
453411183660
452982764172
452978923322

nanos

Annotation: jdk.jfr.Timespan(NANOSECONDS)

Examples 3
19999999
-9223372036854775808
9000000

percentage

Annotation: jdk.jfr.Percentage

Examples 3
0.01369863
0.783105
0.79680365

tickspan

Annotation: jdk.jfr.Timespan(TICKS)

Examples 3

tickstamp

Annotation: jdk.jfr.Timestamp(TICKS)

XML Types

Class

Property Value
Parameter Type const Klass*
Field Type const Klass*
Java Type java.lang.Class
Examples 3
null
null
Example event data values and properties
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
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.4.1
name string
java/util/concurrent/locks

ClassLoader

Property Value
Parameter Type const ClassLoaderData*
Field Type const ClassLoaderData*
Examples 3
Example event data values and properties
name string
bootstrap
type Class
null
Example event data values and properties
name string
bootstrap
type Class
null
Example event data values and properties
name string
bootstrap
type Class
null

Method

Property Value
Parameter Type const Method*
Field Type const Method*
Examples 3
Example event data values and properties
descriptor string
(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
hidden boolean
false
modifiers int
1
name string
apply
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.4.1
name string
java/net
hidden boolean
false
modifiers int
1537
name string
breeze/linalg/operators/BinaryRegistry
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
breeze/linalg/operators
Example event data values and properties
descriptor string
(ZJ)V
hidden boolean
false
modifiers int
257
name string
park
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.4.1
name string
jdk/internal/misc
Example event data values and properties
descriptor string
(I)[D
hidden boolean
false
modifiers int
1
name string
newArray
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.4.1
name string
java/net
hidden boolean
false
modifiers int
25
name string
scala/reflect/ManifestFactory$DoubleManifest
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.4.1
name string
java/net
location string
null
name string
null
version string
null
name string
scala/reflect

Module

Property Value
Parameter Type const ModuleEntry*
Field Type const ModuleEntry*
Examples 3
Example event data values and properties
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
Example event data values and properties
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
Example event data values and properties
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1

Package

Property Value
Parameter Type const PackageEntry*