Introduction

The following are the events for OpenJDK 25 (jdk-25.0.5+4, permalink, 30-August-2026), and Graal VM 25.0.0 (jdk-25+29) . The events are collected from the event configuration and the source code. Visit the jfreventcollector repository for more information. This is also where you can contribute additional event descriptions, if you don't want to contribute them directly to the OpenJDK. The site generator lives on GitHub, too.

This page is maintained by Johannes Bechberger of the SapMachine team at SAP and contributors.

Some events have fake end times/durations; these are hidden in the event description here.

Flight Recorder

DumpReason

profiling default 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 = Atomic::load(&_jfr_shutdown_tid);
  if (shutdown_tid == max_julong) {
    // Someone tried but did not have a proper thread for the purpose.

Configuration enabled
profiling true
default true

Field Type Description
reason string Reason Reason for writing recording data to disk
recordingId int Recording Id Id of the recording that triggered the dump, or -1 if it was not related to a recording

DataLoss

profiling default startTime graal vm only

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_total_swap_memory(JNIEnv* env, jclass jvm))
#ifdef LINUX
  // We want the host swap memory, not the container value.
  return os::Linux::host_swap();
#else
  physical_memory_size_type total_swap_space = 0;
  // Return value ignored - defaulting to 0 on failure.
  (void)os::total_swap_space(total_swap_space);
  return static_cast<jlong>(total_swap_space);
#endif
JVM_END

JVM_ENTRY_NO_ENV(void, jfr_emit_data_loss(JNIEnv* env, jclass jvm, jlong bytes))
  EventDataLoss::commit(bytes, min_jlong);
JVM_END

JVM_ENTRY_NO_ENV(jlong, jfr_register_stack_filter(JNIEnv* env,  jclass jvm, jobjectArray classes, jobjectArray methods))
  return JfrStackFilterRegistry::add(classes, methods, thread);
JVM_END

JVM_ENTRY_NO_ENV(void, jfr_unregister_stack_filter(JNIEnv* env,  jclass jvm, jlong id))
  JfrStackFilterRegistry::remove(id);
JVM_END

NO_TRANSITION(jlong, jfr_nanos_now(JNIEnv* env, jclass jvm))

Configuration enabled
profiling true
default true

Field Type Description
amount ulong: bytes Amount Amount lost data
total ulong: bytes Total Total lost amount for thread

Flush

experimental startTime duration 14 17 21 25 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:

Configuration enabled threshold
profiling false 0 ns
default false 0 ns

Field Type Description
flushId ulong Flush Identifier
elements ulong Elements Written
size ulong: bytes Size Written

Examples 3
elements ulong
787
flushId ulong
12
size ulong: bytes
584783
startTime long: millis
12494694295
elements ulong
4965
flushId ulong
263
size ulong: bytes
607136
startTime long: millis
355693002388
elements ulong
5932
flushId ulong
256
size ulong: bytes
980852
startTime long: millis
681554548518

ActiveRecording

profiling default startTime duration stackTrace 11 17 21 25 27 28 graal vm

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

Category: Flight Recorder

Code Context

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

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

                // and check for missing files. This will emit more error logs that can be seen in subsequent recordings.
                for (PlatformRecording r : getRecordings()) {
                    r.removeNonExistantPaths();
                }
            }
        }
        // Decrease initial reference count
        chunk.release();
        FilePurger.purge();
    }

    private void writeMetaEvents() {
        long timestamp = JVM.counterTime();
        if (ActiveRecordingEvent.enabled()) {
            for (PlatformRecording r : getRecordings()) {
                if (r.getState() == RecordingState.RUNNING && r.shouldWriteMetadataEvent()) {
                    WriteablePath path = r.getDestination();
                    Duration age = r.getMaxAge();
                    Duration flush = r.getFlushInterval();
                    Long size = r.getMaxSize();
                    Instant rStart = r.getStartTime();
                    Duration rDuration = r.getDuration();
                    ActiveRecordingEvent.commit(
                        timestamp,
                        r.getId(),
                        r.getName(),
                        path == null ? null : path.getRealPathText(),
                        r.isToDisk(),
                        age == null ? Long.MAX_VALUE : age.toMillis(),
                        flush == null ? Long.MAX_VALUE : flush.toMillis(),
                        size == null ? Long.MAX_VALUE : size,
                        rStart == null ? Long.MAX_VALUE : rStart.toEpochMilli(),
                        rDuration == null ? Long.MAX_VALUE : rDuration.toMillis()
                    );

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

public final class JDKEvents {

    private static final Class<?>[] eventClasses = {
        ActiveSettingEvent.class,
        ActiveRecordingEvent.class,
        // jdk.internal.event.* classes need their mirror
        // event class to be listed in the MirrorEvents class.
        jdk.internal.event.DeserializationEvent.class,
        jdk.internal.event.ErrorThrownEvent.class,
        jdk.internal.event.ExceptionStatisticsEvent.class,
        jdk.internal.event.ExceptionThrownEvent.class,
        jdk.internal.event.FileForceEvent.class,
        jdk.internal.event.FileReadEvent.class,
        jdk.internal.event.FileWriteEvent.class,
        jdk.internal.event.ProcessStartEvent.class,
        jdk.internal.event.SecurityPropertyModificationEvent.class,

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

@Name(Type.EVENT_NAME_PREFIX + "ActiveRecording")
@Label("Flight Recording")
@Category("Flight Recorder")
@RemoveFields({"duration", "eventThread", "stackTrace"})
public final class ActiveRecordingEvent extends AbstractJDKEvent {

    // The order of these fields must be the same as the parameters in
    // commit(... , long, String, String, long, long, long, long, long)

    @Label("Id")
    public long id;

    @Label("Name")
    public String name;

    @Label("Destination")

Configuration enabled
profiling true
default true

Field Type Description
id long Id
name string Name
destination string Destination
disk boolean 21+ To Disk
maxAge long: millis Max Age
flushInterval long: millis 14+ Flush Interval
maxSize long: bytes Max Size
recordingStart long: epochmillis Start Time
recordingDuration long: millis Recording Duration

Examples 3
destination string
/home/runner/work/jfrevents/jfrevents/jfr/sample_linux_UseG1GC.jfr
disk boolean
true
flushInterval long: millis
1000
id long
1
maxAge long: millis
9223372036854775807
maxSize long: bytes
262144000
name string
1
recordingDuration long: millis
9223372036854775807
recordingStart long: epochmillis
1788049635062
startTime long: millis
346402314724
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
1788050011190
startTime long: millis
11195922230
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
1788049633289
startTime long: millis
662199286978

ActiveSetting

profiling default startTime duration stackTrace 11 17 21 25 27 28 graal vm

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

Category: Flight Recorder

Code Context

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

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

                        r.getId(),
                        r.getName(),
                        path == null ? null : path.getRealPathText(),
                        r.isToDisk(),
                        age == null ? Long.MAX_VALUE : age.toMillis(),
                        flush == null ? Long.MAX_VALUE : flush.toMillis(),
                        size == null ? Long.MAX_VALUE : size,
                        rStart == null ? Long.MAX_VALUE : rStart.toEpochMilli(),
                        rDuration == null ? Long.MAX_VALUE : rDuration.toMillis()
                    );
                }
            }
        }
        if (ActiveSettingEvent.enabled()) {
            for (EventControl ec : MetadataRepository.getInstance().getEventControls()) {
                ec.writeActiveSettingEvent(timestamp);
            }
        }
    }

    private void periodicTask() {
        if (!JVMSupport.hasJFR()) {
            return;
        }
        while (true) {

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

    void writeActiveSettingEvent(long timestamp) {
        if (!type.isRegistered()) {
            return;
        }
        for (NamedControl nc : namedControls) {
            if (nc.control.isVisible(type.hasEventHook()) && type.isVisible()) {
                String value = nc.control.getLastValue();
                if (value == null) {
                    value = nc.control.getDefaultValue();
                }
                if (ActiveSettingEvent.enabled()) {
                    ActiveSettingEvent.commit(timestamp, type.getId(), nc.name(), value);
                }
            }
        }
    }

    public ArrayList<NamedControl> getNamedControls() {
        return namedControls;
    }

    public PlatformEventType getEventType() {
        return type;

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

public final class JDKEvents {

    private static final Class<?>[] eventClasses = {
        ActiveSettingEvent.class,
        ActiveRecordingEvent.class,
        // jdk.internal.event.* classes need their mirror
        // event class to be listed in the MirrorEvents class.
        jdk.internal.event.DeserializationEvent.class,
        jdk.internal.event.ErrorThrownEvent.class,
        jdk.internal.event.ExceptionStatisticsEvent.class,
        jdk.internal.event.ExceptionThrownEvent.class,
        jdk.internal.event.FileForceEvent.class,
        jdk.internal.event.FileReadEvent.class,
        jdk.internal.event.FileWriteEvent.class,
        jdk.internal.event.ProcessStartEvent.class,

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

package jdk.jfr.events;

import jdk.jfr.Category;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.RemoveFields;
import jdk.jfr.internal.Type;

@Name(Type.EVENT_NAME_PREFIX + "ActiveSetting")
@Label("Recording Setting")
@Category("Flight Recorder")
@RemoveFields({"duration", "eventThread", "stackTrace"})
public final class ActiveSettingEvent extends AbstractJDKEvent {

    // The order of these fields must be the same as the parameters in
    // commit(... , long, String, String)

    @Label("Event Id")
    public long id;

    @Label("Setting Name")
    public String name;

    @Label("Setting Value")

Configuration enabled
profiling true
default true

Field Type Description
id long Event Id
name string Setting Name
value string Setting Value

Examples 3
id long
28
name string
enabled
startTime long: millis
623773870622
value string
true
id long
18
name string
enabled
startTime long: millis
268965684
value string
true
id long
88
name string
enabled
startTime long: millis
330130229258
value string
true

JVM

JVMInformation

profiling default startTime duration end of every chunk graal vm only

Category: Java Virtual Machine

Description of JVM and the Java application

Code Context

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

src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:

PeriodicType JfrPeriodicEventSet::type(void) {
  return _type;
}

TRACE_REQUEST_FUNC(ResidentSetSize) {
  os::jfr_report_memory_info();
}

TRACE_REQUEST_FUNC(JVMInformation) {
  ResourceMark rm;
  EventJVMInformation event;
  event.set_jvmName(VM_Version::vm_name());
  event.set_jvmVersion(VM_Version::internal_vm_info_string());
  event.set_javaArguments(Arguments::java_command());
  event.set_jvmArguments(Arguments::jvm_args());
  event.set_jvmFlags(Arguments::jvm_flags());
  event.set_jvmStartTime(Management::vm_init_done_time());
  event.set_pid(os::current_process_id());
  event.commit();
 }

TRACE_REQUEST_FUNC(OSInformation) {

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
jvmName string JVM Name
jvmVersion string JVM Version
jvmArguments string JVM Command Line Arguments
jvmFlags string JVM Settings File Arguments
javaArguments string Java Application Arguments
jvmStartTime long: epochmillis JVM Start Time
pid long Process Identifier

Examples 3
javaArguments string
/home/runner/work/jfrevents/jfrevents/.cache/renaissance.jar -t 5 -r 1 all
jvmArguments string
-XX:StartFlightRecording=filename=/home/runner/work/jfrevents/jfrevents/jfr/sample_linux_UseParallelGC.jfr,settings=/home/runner/work/jfrevents/jfrevents/.cache/jfc.jfc -XX:+UseParallelGC
jvmFlags string
null
jvmName string
OpenJDK 64-Bit Server VM
jvmStartTime long: epochmillis
1788049632948
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
2385
startTime long: millis
633345791288
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
1788050010939
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
4573
startTime long: millis
5677397575
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
1788049634777
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
2135
startTime long: millis
341036604108

InitialSystemProperty

profiling default startTime end of every chunk graal vm only

Category: Java Virtual Machine

System Property at JVM start

Code Context

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

src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:

  jlong max_size = conf.has_max_size_default_value() ? jmc_undefined_long : conf.max_size();
  EventYoungGenerationConfiguration event;
  event.set_maxSize((u8)max_size);
  event.set_minSize(conf.min_size());
  event.set_newRatio(static_cast<unsigned int>(conf.new_ratio()));
  event.commit();
}

TRACE_REQUEST_FUNC(InitialSystemProperty) {
  SystemProperty* p = Arguments::system_properties();
  JfrTicks time_stamp = JfrTicks::now();
  while (p !=  nullptr) {
    if (!p->internal()) {
      EventInitialSystemProperty event(UNTIMED);
      event.set_key(p->key());
      event.set_value(p->value());
      event.set_starttime(time_stamp);
      event.set_endtime(time_stamp);
      event.commit();
    }
    p = p->next();
  }
}

TRACE_REQUEST_FUNC(ThreadAllocationStatistics) {

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
key string Key
value string Value

Examples 3
key string
java.vm.compressedOopsMode
startTime long: millis
270692556
value string
Zero based
key string
java.vm.info
startTime long: millis
331693869189
value string
mixed mode, sharing
key string
java.vm.specification.version
startTime long: millis
627353953830
value string
25

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/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_start_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_start_event.should_commit()) {

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

//         readers (we must ensure write ordering)
//
// Note that placeholders are deleted at any time, as they are removed
// when a class is completely loaded. Therefore, readers as well as writers
// of placeholders must hold the SystemDictionary_lock.
//

class BootstrapInfo;
class ClassFileStream;
class ClassLoadInfo;
class Dictionary;
class PackageEntry;
class GCTimer;
class EventClassLoad;
class Symbol;

template <class E> class GrowableArray;

class SystemDictionary : AllStatic {
  friend class AOTLinkedClassBulkLoader;
  friend class BootstrapInfo;
  friend class LambdaProxyClassDictionary;
  friend class vmClasses;

 public:

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

  static bool check_shared_class_super_type(InstanceKlass* klass, InstanceKlass* super,
                                            Handle class_loader,
                                            bool is_superclass, TRAPS);
  static bool check_shared_class_super_types(InstanceKlass* ik, Handle class_loader, TRAPS);
  // Second part of load_shared_class
  static void load_shared_class_misc(InstanceKlass* ik, ClassLoaderData* loader_data) NOT_CDS_RETURN;
  static void restore_archived_method_handle_intrinsics_impl(TRAPS) NOT_CDS_RETURN;

protected:
  // Used by SystemDictionaryShared and LambdaProxyClassDictionary

  static bool add_loader_constraint(Symbol* name, Klass* klass_being_linked,  Handle loader1,
                                    Handle loader2);
  static void post_class_load_event(EventClassLoad* event, const InstanceKlass* k, const ClassLoaderData* init_cld);
  static InstanceKlass* load_shared_class(InstanceKlass* ik,
                                          Handle class_loader,
                                          Handle protection_domain,
                                          const ClassFileStream *cfs,
                                          PackageEntry* pkg_entry,
                                          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);

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

        InstanceKlass* check = loader_data->dictionary()->find_class(current, name);
        if (check != nullptr) {
          // Klass is already loaded, so just return it
          return check;
        }
        // check if other thread failed to load and cleaned up
        oldprobe = PlaceholderTable::get_entry(name, loader_data);
      }
    }
  }
  return nullptr;
}

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

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

Configuration enabled stackTrace threshold
profiling false true 0 ms
default false true 0 ms

Field Type Description
loadedClass Class Loaded Class
definingClassLoader ClassLoader Defining Class Loader
initiatingClassLoader ClassLoader Initiating Class Loader

Examples 3
definingClassLoader ClassLoader
name string
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
true
modifiers int
4112
name string
org.apache.spark.status.AppStatusListener$$Lambda/0x0000000072b0dc00
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
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/String;[BIILjava/security/ProtectionDomain;ZILjava/lang/Object;)Ljava/lang/Class;
hidden boolean
false
modifiers int
264
name string
defineClass0
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
332991632816
definingClassLoader ClassLoader
name string
bootstrap
type Class
null
initiatingClassLoader ClassLoader
name string
bootstrap
type Class
null
loadedClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1537
name string
java/util/zip/Checksum
package Package
exported boolean
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/zip
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
5
lineNumber int
731
method Method
descriptor string
()[B
hidden boolean
false
modifiers int
1
name string
getBytes
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
0
name string
jdk/internal/loader/URLClassPath$JarLoader$1
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
jdk/internal/loader
type FrameType
Interpreted
truncated boolean
false
startTime long: millis
289088505
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$$anon$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
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
633605617831

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

    // before references to the initiating class loader.
    loader_data->record_dependency(loaded_class);

    update_dictionary(THREAD, loaded_class, loader_data);

    if (JvmtiExport::should_post_class_load()) {
      JvmtiExport::post_class_load(THREAD, loaded_class);
    }
  }
  return loaded_class;
}

static void post_class_define_event(InstanceKlass* k, const ClassLoaderData* def_cld) {
  EventClassDefine event;
  if (event.should_commit()) {
    event.set_definedClass(k);
    event.set_definingClassLoader(def_cld);
    event.commit();
  }
}

void SystemDictionary::define_instance_class(InstanceKlass* k, Handle class_loader, TRAPS) {

  ClassLoaderData* loader_data = k->class_loader_data();
  assert(loader_data->class_loader() == class_loader(), "they must be the same");

Configuration enabled stackTrace
profiling false true
default false true

Field Type Description
definedClass Class Defined Class
definingClassLoader ClassLoader Defining Class Loader

Examples 3
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
17
name string
org/apache/spark/scheduler/OutputCommitCoordinator$OutputCommitCoordinatorEndpoint$$anonfun$receive$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
org/apache/spark/scheduler
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
664227665271
definedClass 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
definingClassLoader ClassLoader
name string
bootstrap
type Class
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
5
lineNumber int
58
method Method
descriptor string
(Ljava/util/jar/JarVerifier;Ljava/io/InputStream;Ljava/lang/String;)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
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
Interpreted
truncated boolean
false
startTime long: millis
288507815
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
1537
name string
scala/PartialFunction
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
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
354890371749

ClassRedefinition

profiling default 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;

Configuration enabled
profiling true
default true

Field Type Description
redefinedClass Class Redefined Class
classModificationCount int Class Modification Count The number of times the class has changed
redefinitionId ulong Class Redefinition Id

Examples 3
classModificationCount int
2
redefinedClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/ArrayList
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/util
redefinitionId ulong
2
startTime long: millis
1056066193
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
1252154394
classModificationCount int
2
redefinedClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/ArrayList
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/util
redefinitionId ulong
2
startTime long: millis
1309685126

RedefineClasses

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

Configuration enabled stackTrace threshold
profiling true true 0 ms
default true true 0 ms

Field Type Description
classCount int Class Count
redefinitionId ulong Class Redefinition Id

Examples 3
classCount int
1
redefinitionId ulong
2
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(J[Ljava/lang/instrument/ClassDefinition;)V
hidden boolean
false
modifiers int
258
name string
redefineClasses0
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
sun/instrument/InstrumentationImpl
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.instrument
name string
java.instrument
version string
25.0.4.1
name string
sun/instrument
type FrameType
Native
truncated boolean
false
startTime long: millis
1258816712
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
1053806356
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
1306708552

RetransformClasses

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

Configuration enabled stackTrace threshold
profiling true true 0 ms
default true true 0 ms

Field Type Description
classCount int Class Count
redefinitionId ulong Class Redefinition Id

Examples 3
classCount int
1
redefinitionId ulong
1
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(J[Ljava/lang/Class;)V
hidden boolean
false
modifiers int
258
name string
retransformClasses0
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
sun/instrument/InstrumentationImpl
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.instrument
name string
java.instrument
version string
25.0.4.1
name string
sun/instrument
type FrameType
Native
truncated boolean
false
startTime long: millis
1297732222
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
1044182083
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
1248216715

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.

Configuration enabled
profiling false
default false

Field Type Description
unloadedClass Class Unloaded Class
definingClassLoader ClassLoader Defining Class Loader

Examples 3
definingClassLoader ClassLoader
name string
null
type Class
classLoader ClassLoader
name string
app
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
10
name string
jdk/internal/loader/ClassLoaders$AppClassLoader
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.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
1694535299
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/Unloadable499130474276
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
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
365418381874
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/0x0000000073294400
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
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
668944326403
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
org.renaissance.jdk.streams.MnemonicsCoderWithStream$$Lambda/0x0000000061b0ac00
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/renaissance/jdk/streams

JVM: Code Cache

CodeCacheFull

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

Configuration enabled
profiling true
default true

Field Type Description
codeBlobType CodeBlobType Code Heap
startAddress ulong: address Start Address
commitedTopAddress ulong: address Commited Top
reservedTopAddress ulong: address Reserved Top
entryCount int Entries
methodCount int Methods
adaptorCount int Adaptors
unallocatedCapacity ulong: bytes Unallocated
fullCount int Full Count
codeCacheMaxCapacity ulong: bytes 17+ Code Cache Maximum Capacity

CodeCacheStatistics

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

Configuration enabled period
profiling true everyChunk
default true everyChunk

Field Type Description
codeBlobType CodeBlobType Code Heap
startAddress ulong: address Start Address
reservedTopAddress ulong: address Reserved Top
entryCount int Entries
methodCount int Methods
adaptorCount int Adaptors
unallocatedCapacity ulong: bytes Unallocated
fullCount int Full Count

Examples 3
adaptorCount int
0
codeBlobType CodeBlobType
CodeHeap 'profiled nmethods'
entryCount int
1805
fullCount int
0
methodCount int
1805
reservedTopAddress ulong: address
139993041338368
startAddress ulong: address
139992917606400
startTime long: millis
16463947630
unallocatedCapacity ulong: bytes
120095360
adaptorCount int
0
codeBlobType CodeBlobType
CodeHeap 'non-profiled nmethods'
entryCount int
8234
fullCount int
0
methodCount int
8234
reservedTopAddress ulong: address
139908278648832
startAddress ulong: address
139908154916864
startTime long: millis
640047534845
unallocatedCapacity ulong: bytes
113004800
adaptorCount int
0
codeBlobType CodeBlobType
CodeHeap 'profiled nmethods'
entryCount int
10272
fullCount int
0
methodCount int
10272
reservedTopAddress ulong: address
140680504541184
startAddress ulong: address
140680380809216
startTime long: millis
330135496902
unallocatedCapacity ulong: bytes
99152768

CodeCacheConfiguration

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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
initialSize ulong: bytes Initial Size
reservedSize ulong: bytes Reserved Size
nonNMethodSize ulong: bytes Non-Nmethod Size
profiledSize ulong: bytes Profiled Size
nonProfiledSize ulong: bytes Non-Profiled Size
expansionSize ulong: bytes Expansion Size
minBlockLength ulong: bytes Minimum Block Length
startAddress ulong: address Start Address
reservedTopAddress ulong: address Reserved Top

Examples 3
expansionSize ulong: bytes
65536
initialSize ulong: bytes
2555904
minBlockLength ulong: bytes
6
nonNMethodSize ulong: bytes
6291456
nonProfiledSize ulong: bytes
123731968
profiledSize ulong: bytes
123731968
reservedSize ulong: bytes
253755392
reservedTopAddress ulong: address
140680634564608
startAddress ulong: address
140680380809216
startTime long: millis
331693995098
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
139908278648832
startAddress ulong: address
139908024893440
startTime long: millis
635816158103
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
139993171361792
startAddress ulong: address
139992917606400
startTime long: millis
21676650299

JVM: Compiler

JITRestart

profiling default 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.

Configuration enabled
profiling true
default true

Field Type Description
freedMemory ulong: bytes Freed Memory
codeCacheMaxCapacity ulong: bytes Code Cache Maximum Capacity

Compilation

profiling default 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/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/EmptyEventProvider.java:

package jdk.vm.ci.hotspot;

/**
 * An empty implementation for {@link EventProvider}. This implementation is used when no logging is
 * requested.
 */
final class EmptyEventProvider implements EventProvider {

    static InternalError shouldNotReachHere() {
        throw new InternalError("should not reach here");
    }

    @Override
    public CompilationEvent newCompilationEvent() {
        return new EmptyCompilationEvent();
    }

    static class EmptyCompilationEvent implements CompilationEvent {
        @Override
        public void commit() {
            throw shouldNotReachHere();
        }

        @Override
        public boolean shouldWrite() {
            // Events of this class should never been written.
            return false;
        }

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/EventProvider.java:

     * Creates and returns an empty implementation for {@link EventProvider}. This implementation
     * can be used when no logging is requested.
     */
    static EventProvider createEmptyEventProvider() {
        return new EmptyEventProvider();
    }

    /**
     * Creates and returns an empty implementation for {@link CompilationEvent}.
     */
    static CompilationEvent createEmptyCompilationEvent() {
        return new EmptyCompilationEvent();
    }

    /**
     * Creates and returns an empty implementation for {@link CompilationEvent}.
     */
    static CompilerFailureEvent createEmptyCompilerFailureEvent() {
        return new EmptyCompilerFailureEvent();
    }

    /**
     * An instant event is an event that is not considered to have taken any time.

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/EventProvider.java:

        /**
         * Ends the timing period for this event.
         */
        void end();
    }

    /**
     * Creates a new {@link CompilationEvent}.
     *
     * @return a compilation event
     */
    CompilationEvent newCompilationEvent();

    /**
     * A compilation event.
     */
    public interface CompilationEvent extends TimedEvent {
        void setMethod(String method);

        void setCompileId(int compileId);

        void setCompileLevel(int compileLevel);

        void setSucceeded(boolean succeeded);

src/hotspot/share/compiler/compilerEvent.hpp:

#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif

class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;

class CompilerEvent : AllStatic {
 public:
  static jlong ticksNow() {
    // Using Ticks for consistent usage outside JFR folder.
    JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
  }

  class CompilationEvent : AllStatic {
   public:
    static void post(EventCompilation& event, int compile_id, CompilerType type, Method* method,
                     int compile_level, bool success, bool is_osr, int code_size,
                     int inlined_bytecodes, size_t arenaBytes) NOT_JFR_RETURN();
  };

  class CompilationFailureEvent : AllStatic {
   public:
    static void post(EventCompilationFailure& event, int compile_id, const char* reason) NOT_JFR_RETURN();
  };

  class PhaseEvent : AllStatic {
    friend class CompilerPhaseTypeConstant;

src/hotspot/share/compiler/compileBroker.cpp:

void CompileBroker::handle_compile_error(CompilerThread* thread, CompileTask* task, ciEnv* ci_env,
                                         int compilable, const char* failure_reason) {
  if (!AbortVMOnCompilationFailure) {
    return;
  }
  if (compilable == ciEnv::MethodCompilable_not_at_tier) {
    fatal("Not compilable at tier %d: %s", task->comp_level(), failure_reason);
  }
  if (compilable == ciEnv::MethodCompilable_never) {
    fatal("Never compilable: %s", failure_reason);
  }
}

static void post_compilation_event(EventCompilation& event, CompileTask* task) {
  assert(task != nullptr, "invariant");
  CompilerEvent::CompilationEvent::post(event,
                                        task->compile_id(),
                                        task->compiler()->type(),
                                        task->method(),
                                        task->comp_level(),
                                        task->is_success(),
                                        task->osr_bci() != CompileBroker::standard_entry_bci,
                                        task->nm_total_size(),
                                        task->num_inlined_bytecodes(),
                                        task->arena_bytes());
}

src/hotspot/share/compiler/compileBroker.cpp:

  // Allocate a new set of JNI handles.
  JNIHandleMark jhm(thread);
  Method* target_handle = task->method();
  int compilable = ciEnv::MethodCompilable;
  const char* failure_reason = nullptr;
  bool failure_reason_on_C_heap = false;
  const char* retry_message = nullptr;

#if INCLUDE_JVMCI
  if (UseJVMCICompiler && comp != nullptr && comp->is_jvmci()) {
    JVMCICompiler* jvmci = (JVMCICompiler*) comp;

    TraceTime t1("compilation", &time);
    EventCompilation event;
    JVMCICompileState compile_state(task, jvmci);
    JVMCIRuntime *runtime = nullptr;

    if (JVMCI::in_shutdown()) {
      failure_reason = "in JVMCI shutdown";
      retry_message = "not retryable";
      compilable = ciEnv::MethodCompilable_never;
    } else if (compile_state.target_method_is_old()) {
      // Skip redefined methods
      failure_reason = "redefined method";
      retry_message = "not retryable";

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

Configuration enabled threshold
profiling true 100 ms
default true 1000 ms

Field Type Description
compileId int Compilation Identifier
compiler CompilerType 14+ Compiler
method Method Method
compileLevel ushort Compilation Level
succeded boolean Succeeded
isOsr boolean On Stack Replacement
codeSize ulong: bytes Compiled Code Size
inlinedBytes ulong: bytes Inlined Code Size
arenaBytes ulong: bytes 23+ Arena Usage

Examples 3
arenaBytes ulong: bytes
0
codeSize ulong: bytes
4096
compileId int
94076
compileLevel ushort
3
compiler CompilerType
c1
inlinedBytes ulong: bytes
116
isOsr boolean
false
method Method
descriptor string
()Ljava/lang/Object;
hidden boolean
true
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
true
modifiers int
4112
name string
org.apache.spark.SparkConf$$Lambda/0x0000000072314400
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
startTime long: millis
330448442381
succeded boolean
true
arenaBytes ulong: bytes
0
codeSize ulong: bytes
232
compileId int
93756
compileLevel ushort
1
compiler CompilerType
c1
inlinedBytes ulong: bytes
0
isOsr boolean
false
method Method
descriptor string
()Ljava/lang/String;
hidden boolean
false
modifiers int
1
name string
details
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/scheduler/StageInfo
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
623777051148
succeded boolean
true
arenaBytes ulong: bytes
0
codeSize ulong: bytes
304
compileId int
1400
compileLevel ushort
3
compiler CompilerType
c1
inlinedBytes ulong: bytes
0
isOsr boolean
false
method Method
descriptor string
(II)I
hidden boolean
false
modifiers int
9
name string
rotateLeft
type 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
startTime long: millis
298792827
succeded boolean
true

CompilerPhase

profiling default 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/jvmci/jvmciCompilerToVM.cpp:

C2V_END

C2V_VMENTRY_0(jint, registerCompilerPhase, (JNIEnv* env, jobject, jstring jphase_name))
#if INCLUDE_JFR
  JVMCIObject phase_name = JVMCIENV->wrap(jphase_name);
  const char *name = JVMCIENV->as_utf8_string(phase_name);
  return CompilerEvent::PhaseEvent::get_phase_id(name, true, true, true);
#else
  return -1;
#endif // !INCLUDE_JFR
C2V_END

C2V_VMENTRY(void, notifyCompilerPhaseEvent, (JNIEnv* env, jobject, jlong startTime, jint phase, jint compileId, jint level))
  EventCompilerPhase event(UNTIMED);
  if (event.should_commit()) {
    CompilerEvent::PhaseEvent::post(event, startTime, phase, compileId, level);
  }
C2V_END

C2V_VMENTRY(void, notifyCompilerInliningEvent, (JNIEnv* env, jobject, jint compileId, ARGUMENT_PAIR(caller), ARGUMENT_PAIR(callee), jboolean succeeded, jstring jmessage, jint bci))
  EventCompilerInlining event;
  if (event.should_commit()) {
    Method* caller = UNPACK_PAIR(Method, caller);
    Method* callee = UNPACK_PAIR(Method, callee);
    JVMCIObject message = JVMCIENV->wrap(jmessage);

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/JFR.java:

        /**
         * @return current JFR time stamp
         */
        public static long now() {
            return compilerToVM().ticksNow();
        }
    }

    /**
     * Helper methods for managing JFR CompilerPhase events. The events are defined in {@code
     * src/share/jfr/metadata/metadata.xml}.
     */
    public static final class CompilerPhaseEvent {

        private static final ConcurrentHashMap<String, Integer> phaseToId = new ConcurrentHashMap<>();

        private static int getPhaseToId(String phaseName) {
            return phaseToId.computeIfAbsent(phaseName, k -> compilerToVM().registerCompilerPhase(phaseName));
        }

        /**
         * Commits a CompilerPhase event.
         *
         * @param startTime time captured at the start of compiler phase

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 cpt, 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, cpt, C->_compile_id, level);
  }
#ifndef PRODUCT
  ResourceMark rm;
  stringStream ss;
  ss.print_raw(CompilerPhaseTypeHelper::to_description(cpt));
  int iter = ++_igv_phase_iter[cpt];
  if (iter > 1) {
    ss.print(" %d", iter);
  }

src/hotspot/share/opto/compile.cpp:

// Only used from CompileWrapper
void Compile::begin_method() {
#ifndef PRODUCT
  if (_method != nullptr && should_print_igv(1)) {
    _igv_printer->begin_method();
  }
#endif
  C->_latest_stage_start_counter.stamp();
}

// Only used from CompileWrapper
void Compile::end_method() {
  EventCompilerPhase event(UNTIMED);
  if (event.should_commit()) {
    CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, PHASE_END, C->_compile_id, 1);
  }

#ifndef PRODUCT
  if (_method != nullptr && should_print_igv(1)) {
    _igv_printer->end_method();
  }
#endif
}

src/hotspot/share/compiler/compilerEvent.cpp:

  event.set_isOsr(is_osr);
  event.set_codeSize(code_size);
  event.set_inlinedBytes(inlined_bytecodes);
  event.set_arenaBytes(arenaBytes);
  commit(event);
}

void CompilerEvent::CompilationFailureEvent::post(EventCompilationFailure& event, int compile_id, const char* reason) {
  event.set_compileId(compile_id);
  event.set_failureMessage(reason);
  event.commit();
}

void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
  event.set_starttime(start_time);
  event.set_phase((u1) phase);
  event.set_compileId(compile_id);
  event.set_phaseLevel((short)level);
  event.commit();
}

void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) {
  event.set_compileId(compile_id);
  event.set_caller(caller);
  event.set_callee(callee);

Configuration enabled threshold
profiling true 10 s
default true 60 s

Field Type Description
phase CompilerPhaseType Compile Phase
compileId int Compilation Identifier
phaseLevel ushort Phase Level

Examples 3
compileId int
94018
phase CompilerPhaseType
After Iter GVN
phaseLevel ushort
3
startTime long: millis
330130548034
compileId int
1294
phase CompilerPhaseType
Before Macro Expansion
phaseLevel ushort
3
startTime long: millis
269871449
compileId int
93731
phase CompilerPhaseType
After iterative spilling
phaseLevel ushort
4
startTime long: millis
623774587089

CompilationFailure

profiling startTime eventThread 11 17 21 25 27 28

Category: Java Virtual Machine / Compiler

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

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

Configuration enabled
profiling true
default false

Field Type Description
failureMessage string Failure Message
compileId int Compilation Identifier

Examples 3
compileId int
98762
failureMessage string
retry without subsuming loads
startTime long: millis
356580770854
compileId int
2603
failureMessage string
Jvmti state change invalidated dependencies
startTime long: millis
1061593178
compileId int
117358
failureMessage string
retry without subsuming loads
startTime long: millis
693634136311

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

#else
  return -1;
#endif // !INCLUDE_JFR
C2V_END

C2V_VMENTRY(void, notifyCompilerPhaseEvent, (JNIEnv* env, jobject, jlong startTime, jint phase, jint compileId, jint level))
  EventCompilerPhase event(UNTIMED);
  if (event.should_commit()) {
    CompilerEvent::PhaseEvent::post(event, startTime, phase, compileId, level);
  }
C2V_END

C2V_VMENTRY(void, notifyCompilerInliningEvent, (JNIEnv* env, jobject, jint compileId, ARGUMENT_PAIR(caller), ARGUMENT_PAIR(callee), jboolean succeeded, jstring jmessage, jint bci))
  EventCompilerInlining event;
  if (event.should_commit()) {
    Method* caller = UNPACK_PAIR(Method, caller);
    Method* callee = UNPACK_PAIR(Method, callee);
    JVMCIObject message = JVMCIENV->wrap(jmessage);
    CompilerEvent::InlineEvent::post(event, compileId, caller, callee, succeeded, JVMCIENV->as_utf8_string(message), bci);
  }
C2V_END

C2V_VMENTRY(void, setThreadLocalObject, (JNIEnv* env, jobject, jint id, jobject value))
  requireInHotSpot("setThreadLocalObject", JVMCI_CHECK);
  if (id == 0) {

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/JFR.java:

         * @param phaseName compiler phase name
         * @param compileId current compilation unit id
         * @param phaseLevel compiler phase nesting level
         */
        public static void write(long startTime, String phaseName, int compileId, int phaseLevel) {
            compilerToVM().notifyCompilerPhaseEvent(startTime, getPhaseToId(phaseName), compileId, phaseLevel);
        }
    }

    /**
     * Helper methods for managing JFR CompilerInlining events. The events are defined in {@code
     * src/share/jfr/metadata/metadata.xml}.
     */
    public static final class CompilerInliningEvent {

        /**
         * Commits a CompilerInlining event.
         *
         * @param compileId current compilation unit id
         * @param caller caller method
         * @param callee callee method
         * @param succeeded inlining succeeded or not
         * @param message extra information on inlining
         * @param bci invocation byte code index
         */

src/hotspot/share/opto/bytecodeInfo.cpp:

  int caller_bci = jvm->bci();
  ciMethod* caller_method = jvm->method();
  const char* inline_msg = msg();
  assert(inline_msg != nullptr, "just checking");
  if (C->log() != nullptr) {
    if (success) {
      C->log()->inline_success(inline_msg);
    } else {
      C->log()->inline_fail(inline_msg);
    }
  }
  CompileTask::print_inlining_ul(callee_method, inline_level(), caller_bci, inlining_result_of(success), inline_msg);
  C->inline_printer()->record(callee_method, jvm, inlining_result_of(success), inline_msg);
  EventCompilerInlining event;
  if (event.should_commit()) {
    guarantee(callee_method != nullptr, "would crash in CompilerEvent::InlineEvent::post");
    CompilerEvent::InlineEvent::post(event, C->compile_id(), caller_method->get_Method(), callee_method, success, inline_msg, caller_bci);
  }
}

//------------------------------ok_to_inline-----------------------------------
bool InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms, ciCallProfile& profile,
                              bool& should_delay) {
#ifdef ASSERT
  assert(callee_method != nullptr, "caller checks for optimized virtual!");

src/hotspot/share/compiler/compilerEvent.hpp:

#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif

class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;

class CompilerEvent : AllStatic {
 public:
  static jlong ticksNow() {
    // Using Ticks for consistent usage outside JFR folder.
    JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
  }

src/hotspot/share/compiler/compilerEvent.hpp:

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

Configuration enabled
profiling false
default false

Field Type Description
compileId int Compilation Identifier
caller Method Caller Method
callee CalleeMethod struct Callee Method
succeeded boolean Succeeded
message string Message
bci int Bytecode Index

Examples 3
bci int
14
callee CalleeMethod
descriptor string
()V
name string
releaseFence
type string
scala/runtime/Statics
caller Method
descriptor string
([DIII)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
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
compileId int
94018
message string
inline (hot)
startTime long: millis
330130349947
succeeded boolean
true
bci int
3
callee CalleeMethod
descriptor string
(J)V
name string
putUncheckedLong
type string
jdk/jfr/internal/event/EventWriter
caller Method
descriptor string
(C)V
hidden boolean
false
modifiers int
2
name string
putUncheckedChar
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
1338
message string
callee is too large
startTime long: millis
269878454
succeeded boolean
false
bci int
1
callee CalleeMethod
descriptor string
(Ljdk/internal/ref/Cleaner;)Z
name string
remove
type string
jdk/internal/ref/Cleaner
caller Method
descriptor string
()V
hidden boolean
false
modifiers int
1
name string
clean
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
jdk/internal/ref/Cleaner
package Package
exported boolean
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/ref
compileId int
93712
message string
inline (hot)
startTime long: millis
623185367830
succeeded boolean
true

Deoptimization

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

Configuration enabled stackTrace
profiling true true
default true false

Field Type Description
compileId int Compilation Identifier
compiler CompilerType Compiler
method Method Method
lineNumber int Line Number
bci int Bytecode Index
instruction Bytecode Instruction
reason DeoptimizationReason Reason
action DeoptimizationAction Action

Examples 3
action DeoptimizationAction
maybe_recompile
bci int
9
compileId int
95238
compiler CompilerType
c2
instruction Bytecode
if_icmpge
lineNumber int
677
method Method
descriptor string
(Ljava/lang/Object;Ljava/lang/Object;I)I
hidden boolean
false
modifiers int
17
name string
indexOf$extension
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/ArrayOps$
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
profile_predicate
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
9
lineNumber int
677
method Method
descriptor string
(Ljava/lang/Object;Ljava/lang/Object;I)I
hidden boolean
false
modifiers int
17
name string
indexOf$extension
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/ArrayOps$
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
false
startTime long: millis
340410764209
action DeoptimizationAction
maybe_recompile
bci int
4
compileId int
2017
compiler CompilerType
c2
instruction Bytecode
invokeinterface
lineNumber int
1079
method Method
descriptor string
()Z
hidden boolean
false
modifiers int
1
name string
hasNext
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
0
name string
java/util/Collections$UnmodifiableCollection$1
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/util
reason DeoptimizationReason
bimorphic_or_optimized_type_check
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
4
lineNumber int
1079
method Method
descriptor string
()Z
hidden boolean
false
modifiers int
1
name string
hasNext
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
0
name string
java/util/Collections$UnmodifiableCollection$1
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/util
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
706502308
action DeoptimizationAction
reinterpret
bci int
60
compileId int
93380
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
JIT compiled
truncated boolean
false
startTime long: millis
639361939053

CompilerQueueUtilization

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

Configuration enabled period
profiling true 5 s
default true 10 s

Field Type Description
compiler CompilerType Compiler
addedRate long: hertz Requets Added Rate Requests added per second
removedRate long: hertz Requests Removed Rate Requests removed per second
queueSize long Queue Size
peakQueueSize long Peak Queue Size
addedCount long Requests Added
removedCount long Requests Removed
totalAddedCount long Total Requests Added
totalRemovedCount long Total Requests Removed
compilerThreadCount int Compiler Thread Count

Examples 3
addedCount long
127
addedRate long: hertz
5
compiler CompilerType
c2
compilerThreadCount int
1
peakQueueSize long
199
queueSize long
0
removedCount long
135
removedRate long: hertz
5
startTime long: millis
667230401741
totalAddedCount long
18921
totalRemovedCount long
18921
addedCount long
3573
addedRate long: hertz
690
compiler CompilerType
c1
compilerThreadCount int
1
peakQueueSize long
191
queueSize long
0
removedCount long
3573
removedRate long: hertz
690
startTime long: millis
357788666264
totalAddedCount long
79509
totalRemovedCount long
79509
addedCount long
361
addedRate long: hertz
67
compiler CompilerType
c2
compilerThreadCount int
1
peakQueueSize long
12
queueSize long
0
removedCount long
361
removedRate long: hertz
67
startTime long: millis
5363579373
totalAddedCount long
361
totalRemovedCount long
361

CompilerStatistics

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

Configuration enabled period
profiling true 1000 ms
default true 1000 ms

Field Type Description
compileCount int Compiled Methods
bailoutCount int Bailouts
invalidatedCount int Invalidated Compilations
osrCompileCount int OSR Compilations
standardCompileCount int Standard Compilations
osrBytesCompiled ulong: bytes OSR Bytes Compiled
standardBytesCompiled ulong: bytes Standard Bytes Compiled
nmethodsSize ulong: bytes Compilation Resulting Size
nmethodCodeSize ulong: bytes Compilation Resulting Code Size
peakTimeSpent long: millis Peak Time
totalTimeSpent long: millis Total Time

Examples 3
bailoutCount int
3
compileCount int
2962
invalidatedCount int
0
nmethodCodeSize ulong: bytes
3934752
nmethodsSize ulong: bytes
5324120
osrBytesCompiled ulong: bytes
0
osrCompileCount int
19
peakTimeSpent long: millis
124
standardBytesCompiled ulong: bytes
0
standardCompileCount int
2943
startTime long: millis
13546349760
totalTimeSpent long: millis
2089
bailoutCount int
12
compileCount int
102411
invalidatedCount int
0
nmethodCodeSize ulong: bytes
163363120
nmethodsSize ulong: bytes
228858904
osrBytesCompiled ulong: bytes
0
osrCompileCount int
1023
peakTimeSpent long: millis
4361
standardBytesCompiled ulong: bytes
0
standardCompileCount int
101388
startTime long: millis
359826754290
totalTimeSpent long: millis
258437
bailoutCount int
11
compileCount int
114197
invalidatedCount int
0
nmethodCodeSize ulong: bytes
171625856
nmethodsSize ulong: bytes
247175760
osrBytesCompiled ulong: bytes
0
osrCompileCount int
1134
peakTimeSpent long: millis
37137
standardBytesCompiled ulong: bytes
0
standardCompileCount int
113063
startTime long: millis
690200102548
totalTimeSpent long: millis
1176653

CompilerConfiguration

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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
threadCount int Thread Count
tieredCompilation boolean Tiered Compilation
dynamicCompilerThreadCount boolean 20+ Uses Dynamic Number of Compiler Threads

Examples 3
dynamicCompilerThreadCount boolean
true
startTime long: millis
360225527003
threadCount int
3
tieredCompilation boolean
true
dynamicCompilerThreadCount boolean
true
startTime long: millis
643965511620
threadCount int
3
tieredCompilation boolean
true
dynamicCompilerThreadCount boolean
true
startTime long: millis
21676647381
threadCount int
3
tieredCompilation boolean
true

JVM: Diagnostics

SyncOnValueBasedClass

experimental profiling default 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);
  }
}

Configuration enabled stackTrace
profiling true true
default true true

Field Type Description
valueBasedClass Class Value Based Class

Examples 3
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
1061380273
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
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
1268405389
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
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
1316708395
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

HeapDump

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

Configuration enabled stackTrace threshold
profiling true true 0 ns
default true true 0 ns

Field Type Description
destination string Destination Path of the Dump
size long Size
gcBeforeDump boolean GC Before Dump
onOutOfMemoryError boolean Heap Dump on Out of Memory Error
overwrite boolean 21+ Overwrite Heap dump overwrites previous file location if it exists
compression int 21+ Compression Level Compression level of the dump, if larger than 0 we use gzip compression with this level

Examples 3
compression int
-1
destination string
/tmp/jfr_sample_heap_692438966985.hprof
gcBeforeDump boolean
true
onOutOfMemoryError boolean
false
overwrite boolean
false
size long
14457191
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
1322774564
compression int
-1
destination string
/tmp/jfr_sample_heap_1230658096118.hprof
gcBeforeDump boolean
true
onOutOfMemoryError boolean
false
overwrite boolean
false
size long
14299400
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
1273687150
compression int
-1
destination string
/tmp/jfr_sample_heap_498519543395.hprof
gcBeforeDump boolean
true
onOutOfMemoryError boolean
false
overwrite boolean
false
size long
14311290
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
1066265807

JavaAgent

profiling default 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_name(agent->name());
  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) {
  const JvmtiAgentList::Iterator it =JvmtiAgentList::java_agents();
  while (it.has_next()) {
    const JvmtiAgent* agent = it.next();
    assert(agent->is_jplis(), "invariant");
    EventJavaAgent event;
    send_agent_event(event, agent);
  }
}

static void send_native_agent_events(const JvmtiAgentList::Iterator& it) {
  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);

Configuration enabled period
profiling true endChunk
default true endChunk

Field Type Description
name string Name
options string Options
dynamic boolean Dynamic If the agent attached to the JVM dynamically during runtime, i.e. not at startup
initializationTime Ticks Initialization Time The time the JVM initialized the agent
initializationDuration Tickspan Initialization Duration The duration of executing the initialization method, either premain or agentmain

Examples 3
dynamic boolean
true
initializationDuration Tickspan
3230233
initializationTime Ticks
558420642
name string
/tmp/jfr_agent2989635411373305399.jar
options string
null
startTime long: millis
19150627008
dynamic boolean
true
initializationDuration Tickspan
2587727
initializationTime Ticks
537856510
name string
/tmp/jfr_agent17713628179556880129.jar
options string
null
startTime long: millis
23728224629
dynamic boolean
true
initializationDuration Tickspan
2526515
initializationTime Ticks
439239955
name string
/tmp/jfr_agent17265025421583405949.jar
options string
null
startTime long: millis
21650548551

NativeAgent

profiling default 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:

  const JvmtiAgentList::Iterator it =JvmtiAgentList::java_agents();
  while (it.has_next()) {
    const JvmtiAgent* agent = it.next();
    assert(agent->is_jplis(), "invariant");
    EventJavaAgent event;
    send_agent_event(event, agent);
  }
}

static void send_native_agent_events(const JvmtiAgentList::Iterator& it) {
  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);
  }
}

TRACE_REQUEST_FUNC(NativeAgent) {
  const JvmtiAgentList::Iterator native_agents_it = JvmtiAgentList::native_agents();
  send_native_agent_events(native_agents_it);
  const JvmtiAgentList::Iterator xrun_agents_it = JvmtiAgentList::xrun_agents();
  send_native_agent_events(xrun_agents_it);
}

Configuration enabled period
profiling true endChunk
default true endChunk

Field Type Description
name string Name
options string Options
dynamic boolean Dynamic If the library attached to the JVM dynamically during runtime, i.e. not at startup
initializationTime Ticks Initialization Time The time the JVM initialized the agent
initializationDuration Tickspan Initialization Duration The duration of executing the JVMTI VMInit event callback. If no VMInit callback is specified, the duration is 0. For a dynamically loaded agent, it is the duration of executing the call to Agent_OnAttach.
path string Path The path of the library

JVM: Flag

IntFlagChanged

profiling default 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 {

Configuration enabled
profiling true
default true

Field Type Description
name string Name
oldValue int Old Value
newValue int New Value
origin FlagValueOrigin Origin

Examples 3
name string
HeapDumpGzipLevel
newValue int
0
oldValue int
1
origin FlagValueOrigin
Management
startTime long: millis
1027847379
name string
HeapDumpGzipLevel
newValue int
0
oldValue int
1
origin FlagValueOrigin
Management
startTime long: millis
1273947261
name string
HeapDumpGzipLevel
newValue int
1
oldValue int
0
origin FlagValueOrigin
Management
startTime long: millis
1226162376

UnsignedIntFlagChanged

profiling default 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 {

Configuration enabled
profiling true
default true

Field Type Description
name string Name
oldValue uint Old Value
newValue uint New Value
origin FlagValueOrigin Origin

Examples 3
name string
FullGCHeapDumpLimit
newValue uint
1
oldValue uint
0
origin FlagValueOrigin
Management
startTime long: millis
1273971296
name string
FullGCHeapDumpLimit
newValue uint
0
oldValue uint
1
origin FlagValueOrigin
Management
startTime long: millis
1027869034
name string
FullGCHeapDumpLimit
newValue uint
1
oldValue uint
0
origin FlagValueOrigin
Management
startTime long: millis
1226202095

LongFlagChanged

profiling default 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 {

Configuration enabled
profiling true
default true

Field Type Description
name string Name
oldValue long Old Value
newValue long New Value
origin FlagValueOrigin Origin

UnsignedLongFlagChanged

profiling default 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 {

Configuration enabled
profiling true
default true

Field Type Description
name string Name
oldValue ulong Old Value
newValue ulong New Value
origin FlagValueOrigin Origin

Examples 3
name string
MinHeapFreeRatio
newValue ulong
45
oldValue ulong
40
origin FlagValueOrigin
Management
startTime long: millis
1273653501
name string
SoftMaxHeapSize
newValue ulong
4192206848
oldValue ulong
2096103424
origin FlagValueOrigin
Management
startTime long: millis
1027923771
name string
MaxHeapFreeRatio
newValue ulong
70
oldValue ulong
75
origin FlagValueOrigin
Management
startTime long: millis
1225975339

DoubleFlagChanged

profiling default 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 {

Configuration enabled
profiling true
default true

Field Type Description
name string Name
oldValue double Old Value
newValue double New Value
origin FlagValueOrigin Origin

Examples 3
name string
G1PeriodicGCSystemLoadThreshold
newValue double
0.0
oldValue double
0.5
origin FlagValueOrigin
Management
startTime long: millis
1226105642
name string
G1PeriodicGCSystemLoadThreshold
newValue double
0.0
oldValue double
0.5
origin FlagValueOrigin
Management
startTime long: millis
1273897688
name string
G1PeriodicGCSystemLoadThreshold
newValue double
0.5
oldValue double
0.0
origin FlagValueOrigin
Management
startTime long: millis
1027791583

BooleanFlagChanged

profiling default 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:

Configuration enabled
profiling true
default true

Field Type Description
name string Name
oldValue boolean Old Value
newValue boolean New Value
origin FlagValueOrigin Origin

Examples 3
name string
PrintConcurrentLocks
newValue boolean
true
oldValue boolean
false
origin FlagValueOrigin
Management
startTime long: millis
1027588939
name string
PrintConcurrentLocks
newValue boolean
false
oldValue boolean
true
origin FlagValueOrigin
Management
startTime long: millis
1273587227
name string
PrintConcurrentLocks
newValue boolean
false
oldValue boolean
true
origin FlagValueOrigin
Management
startTime long: millis
1225842071

StringFlagChanged

profiling default 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(char, old_value);
  }
  // Unlike the other APIs, the old value is NOT returned, so the caller won't need to free it.
  // The callers typically don't care what the old value is.

Configuration enabled
profiling true
default true

Field Type Description
name string Name
oldValue string Old Value
newValue string New Value
origin FlagValueOrigin Origin

Examples 3
name string
HeapDumpPath
newValue string
/tmp/jfr_heap
oldValue string
null
origin FlagValueOrigin
Management
startTime long: millis
1226015669
name string
HeapDumpPath
newValue string
/tmp/jfr_heap
oldValue string
null
origin FlagValueOrigin
Management
startTime long: millis
1273790417
name string
HeapDumpPath
newValue string
/tmp/jfr_heap
oldValue string
null
origin FlagValueOrigin
Management
startTime long: millis
1027752265

IntFlag

profiling default 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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
name string Name
value int Value
origin FlagValueOrigin Origin

Examples 3
name string
HeapDumpGzipLevel
origin FlagValueOrigin
Default
startTime long: millis
623778497854
value int
0
name string
UnguardOnExecutionViolation
origin FlagValueOrigin
Default
startTime long: millis
271075414
value int
0
name string
ObjectAlignmentInBytes
origin FlagValueOrigin
Default
startTime long: millis
330135499159
value int
8

UnsignedIntFlag

profiling default 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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
name string Name
value uint Value
origin FlagValueOrigin Origin

Examples 3
name string
ConcGCThreads
origin FlagValueOrigin
Ergonomic
startTime long: millis
330135518396
value uint
1
name string
HandshakeTimeout
origin FlagValueOrigin
Default
startTime long: millis
271087349
value uint
0
name string
TestCrashInErrorHandler
origin FlagValueOrigin
Default
startTime long: millis
627354115630
value uint
0

LongFlag

profiling default 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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
name string Name
value long Value
origin FlagValueOrigin Origin

Examples 3
name string
DominatorSearchLimit
origin FlagValueOrigin
Default
startTime long: millis
271109258
value long
1000
name string
MaxNodeLimit
origin FlagValueOrigin
Default
startTime long: millis
330135525810
value long
80000
name string
PrintPhaseLevel
origin FlagValueOrigin
Default
startTime long: millis
623778526797
value long
0

UnsignedLongFlag

profiling default 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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
name string Name
value ulong Value
origin FlagValueOrigin Origin

Examples 3
name string
MinHeapFreeRatio
origin FlagValueOrigin
Default
startTime long: millis
623778550101
value ulong
0
name string
InitialHeapSize
origin FlagValueOrigin
Ergonomic
startTime long: millis
330135550104
value ulong
262144000
name string
MetaspaceSize
origin FlagValueOrigin
Default
startTime long: millis
271138772
value ulong
22020096

DoubleFlag

profiling default 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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
name string Name
value double Value
origin FlagValueOrigin Origin

Examples 3
name string
SafepointTimeoutDelay
origin FlagValueOrigin
Default
startTime long: millis
11196631055
value double
10000.0
name string
MaxRAMPercentage
origin FlagValueOrigin
Default
startTime long: millis
623778573105
value double
25.0
name string
ZCollectionIntervalMinor
origin FlagValueOrigin
Default
startTime long: millis
331694054793
value double
-1.0

BooleanFlag

profiling default 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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
name string Name
value boolean Value
origin FlagValueOrigin Origin

Examples 3
name string
TraceRangeCheckElimination
origin FlagValueOrigin
Default
startTime long: millis
271158634
value boolean
false
name string
PrintBailouts
origin FlagValueOrigin
Default
startTime long: millis
330135562013
value boolean
false
name string
CheckUnhandledOops
origin FlagValueOrigin
Default
startTime long: millis
623778632503
value boolean
false

StringFlag

profiling default 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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
name string Name
value string Value
origin FlagValueOrigin Origin

Examples 3
name string
OnOutOfMemoryError
origin FlagValueOrigin
Default
startTime long: millis
331694111575
value string
name string
AOTConfiguration
origin FlagValueOrigin
Default
startTime long: millis
627354255457
value string
null
name string
HiMemReportExec
origin FlagValueOrigin
Default
startTime long: millis
271243386
value string
null

JVM: GC: Collector

GarbageCollection

profiling default startTime duration eventThread graal vm only

Category: Java Virtual Machine / GC / Collector

Garbage collection performed by the JVM

Code Context

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

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

// All GC dependencies against the trace framework is contained within this file.

typedef uintptr_t TraceAddress;

bool GCTracer::should_send_cpu_time_event() const {
  return EventGCCPUTime::is_enabled();
}

void GCTracer::send_garbage_collection_event() const {
  EventGarbageCollection event(UNTIMED);
  if (event.should_commit()) {
    event.set_gcId(GCId::current());
    event.set_name(_shared_gc_info.name());
    event.set_cause((u2) _shared_gc_info.cause());
    event.set_sumOfPauses(_shared_gc_info.sum_of_pauses());
    event.set_longestPause(_shared_gc_info.longest_pause());
    event.set_starttime(_shared_gc_info.start_timestamp());
    event.set_endtime(_shared_gc_info.end_timestamp());
    event.commit();
  }
}

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier
name GCName Name The name of the Garbage Collector
cause GCCause Cause The reason for triggering this Garbage Collection
sumOfPauses Tickspan Sum of Pauses Sum of all the times in which Java execution was paused during the garbage collection
longestPause Tickspan Longest Pause Longest individual pause during the garbage collection

Examples 3
cause GCCause
G1 Humongous Allocation
gcId uint
1188
longestPause Tickspan
0
name GCName
G1Old
startTime long: millis
346399906285
sumOfPauses Tickspan
0
cause GCCause
G1 Evacuation Pause
gcId uint
37
longestPause Tickspan
772340
name GCName
G1New
startTime long: millis
1242058305
sumOfPauses Tickspan
772340
cause GCCause
Heap Inspection Initiated GC
gcId uint
341
longestPause Tickspan
244810306
name GCName
ParallelOld
startTime long: millis
640710192557
sumOfPauses Tickspan
244810306

SystemGC

profiling default startTime duration eventThread stackTrace graal vm only

Category: Java Virtual Machine / GC / Collector

Code Context

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

src/hotspot/share/prims/jvm.cpp:

    event.commit();
  }
JVM_END


JVM_ENTRY_NO_ENV(void, JVM_Halt(jint code))
  before_exit(thread, true);
  vm_exit(code);
JVM_END


JVM_ENTRY_NO_ENV(void, JVM_GC(void))
  if (!DisableExplicitGC) {
    EventSystemGC event;
    event.set_invokedConcurrent(ExplicitGCInvokesConcurrent);
    Universe::heap()->collect(GCCause::_java_lang_system_gc);
    event.commit();
  }
JVM_END


JVM_LEAF(jlong, JVM_MaxObjectInspectionAge(void))
  return Universe::heap()->millis_since_last_whole_heap_examined();
JVM_END

Configuration enabled stackTrace threshold
profiling true true 0 ms
default true true 0 ms

Field Type Description
invokedConcurrent boolean Invoked Concurrent

Examples 3
invokedConcurrent boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
()V
hidden boolean
false
modifiers int
257
name string
gc
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
java/lang/Runtime
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
365340457315
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
685433987614
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
2158595019

ParallelOldGarbageCollection

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

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier
densePrefix ulong: address Dense Prefix The address of the dense prefix, used when compacting

Examples 2
densePrefix ulong: address
30173822976
gcId uint
27
startTime long: millis
1649734792
densePrefix ulong: address
30427578368
gcId uint
347
startTime long: millis
652169939014

YoungGarbageCollection

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

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier
tenuringThreshold uint Tenuring Threshold

Examples 3
gcId uint
1172
startTime long: millis
343007319004
tenuringThreshold uint
15
gcId uint
24
startTime long: millis
1129271387
tenuringThreshold uint
1
gcId uint
348
startTime long: millis
655321398192
tenuringThreshold uint
1

OldGarbageCollection

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

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier

Examples 3
gcId uint
128
startTime long: millis
2083369003
gcId uint
339
startTime long: millis
638750630596
gcId uint
1226
startTime long: millis
366308379259

G1GarbageCollection

profiling default 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:

  send_adaptive_ihop_statistics(threshold,
                                internal_target_occupancy,
                                current_occupancy,
                                additional_buffer_size,
                                predicted_allocation_rate,
                                predicted_marking_length,
                                prediction_active);
}

void G1NewTracer::send_g1_young_gc_event() {
  // Check that the pause type has been updated to something valid for this event.
  G1GCPauseTypeHelper::assert_is_young_pause(_pause);

  EventG1GarbageCollection e(UNTIMED);
  if (e.should_commit()) {
    e.set_gcId(GCId::current());
    e.set_type(static_cast<uint>(_pause));
    e.set_starttime(_shared_gc_info.start_timestamp());
    e.set_endtime(_shared_gc_info.end_timestamp());
    e.commit();
  }
}

void G1NewTracer::send_evacuation_info_event(G1EvacInfo* info) {
  EventEvacuationInformation e;

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier
type G1YCType Type

Examples 3
gcId uint
2
startTime long: millis
452237514
type G1YCType
Normal
gcId uint
1232
startTime long: millis
479060589776
type G1YCType
Normal
gcId uint
1145
startTime long: millis
339166348431
type G1YCType
Mixed

ZYoungGarbageCollection

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

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier
tenuringThreshold uint Tenuring Threshold

Examples 2
gcId uint
291
startTime long: millis
360047184889
tenuringThreshold uint
0
gcId uint
9
startTime long: millis
1182763604
tenuringThreshold uint
0

ZOldGarbageCollection

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

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier

Examples 2
gcId uint
304
startTime long: millis
377519253967
gcId uint
21
startTime long: millis
1437833424

JVM: GC: Configuration

GCConfiguration

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

Configuration enabled period
profiling true everyChunk
default true everyChunk

Field Type Description
youngCollector GCName Young Garbage Collector The garbage collector used for the young generation
oldCollector GCName Old Garbage Collector The garbage collector used for the old generation
parallelGCThreads uint Parallel GC Threads Number of parallel threads to use for garbage collection
concurrentGCThreads uint Concurrent GC Threads Number of concurrent threads to use for garbage collection
usesDynamicGCThreads boolean Uses Dynamic GC Threads Whether a dynamic number of GC threads are used or not
isExplicitGCConcurrent boolean Concurrent Explicit GC Whether System.gc() is concurrent or not
isExplicitGCDisabled boolean Disabled Explicit GC Whether System.gc() will cause a garbage collection or not
pauseTarget long: millis Pause Target Target for GC pauses
gcTimeRatio uint GC Time Ratio Target for runtime vs garbage collection time

Examples 3
concurrentGCThreads uint
1
gcTimeRatio uint
12
isExplicitGCConcurrent boolean
false
isExplicitGCDisabled boolean
false
oldCollector GCName
G1Old
parallelGCThreads uint
4
pauseTarget long: millis
-9223372036854775808
startTime long: millis
333553399715
usesDynamicGCThreads boolean
true
youngCollector GCName
G1New
concurrentGCThreads uint
1
gcTimeRatio uint
12
isExplicitGCConcurrent boolean
false
isExplicitGCDisabled boolean
false
oldCollector GCName
G1Old
parallelGCThreads uint
4
pauseTarget long: millis
-9223372036854775808
startTime long: millis
25412745285
usesDynamicGCThreads boolean
true
youngCollector GCName
G1New
concurrentGCThreads uint
0
gcTimeRatio uint
99
isExplicitGCConcurrent boolean
false
isExplicitGCDisabled boolean
false
oldCollector GCName
ParallelOld
parallelGCThreads uint
4
pauseTarget long: millis
-9223372036854775808
startTime long: millis
676256348282
usesDynamicGCThreads boolean
true
youngCollector GCName
ParallelScavenge

GCSurvivorConfiguration

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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
maxTenuringThreshold ubyte Maximum Tenuring Threshold Upper limit for the age of how old objects to keep in the survivor area
initialTenuringThreshold ubyte Initial Tenuring Threshold Initial age limit for how old objects to keep in survivor area

Examples 3
initialTenuringThreshold ubyte
7
maxTenuringThreshold ubyte
15
startTime long: millis
16528189472
initialTenuringThreshold ubyte
7
maxTenuringThreshold ubyte
15
startTime long: millis
633589034548
initialTenuringThreshold ubyte
7
maxTenuringThreshold ubyte
15
startTime long: millis
341215162090

GCTLABConfiguration

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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
usesTLABs boolean TLABs Used If Thread Local Allocation Buffers (TLABs) are in use
minTLABSize ulong: bytes Minimum TLAB Size
tlabRefillWasteLimit ulong: bytes TLAB Refill Waste Limit

Examples 3
minTLABSize ulong: bytes
2048
startTime long: millis
16528189929
tlabRefillWasteLimit ulong: bytes
64
usesTLABs boolean
true
minTLABSize ulong: bytes
2048
startTime long: millis
331872766873
tlabRefillWasteLimit ulong: bytes
64
usesTLABs boolean
true
minTLABSize ulong: bytes
2048
startTime long: millis
640956229542
tlabRefillWasteLimit ulong: bytes
64
usesTLABs boolean
true

GCHeapConfiguration

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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
minSize ulong: bytes Minimum Heap Size
maxSize ulong: bytes Maximum Heap Size
initialSize ulong: bytes Initial Heap Size
usesCompressedOops boolean If Compressed Oops Are Used If compressed Oops (Ordinary Object Pointers) are enabled
compressedOopsMode NarrowOopMode Compressed Oops Mode The kind of compressed oops being used
objectAlignment ulong: bytes Object Alignment Object alignment (in bytes) on the heap
heapAddressBits ubyte Heap Address Size Heap Address Size (in bits)

Examples 3
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
5690161045
usesCompressedOops boolean
true
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
624028077796
usesCompressedOops boolean
true
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
331872767885
usesCompressedOops boolean
true

YoungGenerationConfiguration

profiling default 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) {
  SystemProperty* p = Arguments::system_properties();
  JfrTicks time_stamp = JfrTicks::now();
  while (p !=  nullptr) {
    if (!p->internal()) {

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
minSize ulong: bytes Minimum Young Generation Size
maxSize ulong: bytes Maximum Young Generation Size
newRatio uint New Ratio The size of the young generation relative to the tenured generation

Examples 3
maxSize ulong: bytes
1396703232
minSize ulong: bytes
85983232
newRatio uint
2
startTime long: millis
652413942191
maxSize ulong: bytes
2514485248
minSize ulong: bytes
1363144
newRatio uint
2
startTime long: millis
348467951943
maxSize ulong: bytes
2514485248
minSize ulong: bytes
1363144
newRatio uint
2
startTime long: millis
21692437130

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

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

Field Type Description
gcId uint GC Identifier
name string Name The name of the GC runner

G1MMU

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

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
timeSlice long: millis Time Slice Time slice used to calculate MMU
gcTime long: millis GC Time Time stopped because of GC during last time slice
pauseTarget long: millis Pause Target Max time allowed to be spent on GC during last time slice

Examples 3
gcId uint
16
gcTime long: millis
6
pauseTarget long: millis
200
startTime long: millis
910563401
timeSlice long: millis
201
gcId uint
1220
gcTime long: millis
46
pauseTarget long: millis
200
startTime long: millis
475789178758
timeSlice long: millis
201
gcId uint
1182
gcTime long: millis
9
pauseTarget long: millis
200
startTime long: millis
345661116906
timeSlice long: millis
201

EvacuationInformation

profiling default 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:

  G1GCPauseTypeHelper::assert_is_young_pause(_pause);

  EventG1GarbageCollection e(UNTIMED);
  if (e.should_commit()) {
    e.set_gcId(GCId::current());
    e.set_type(static_cast<uint>(_pause));
    e.set_starttime(_shared_gc_info.start_timestamp());
    e.set_endtime(_shared_gc_info.end_timestamp());
    e.commit();
  }
}

void G1NewTracer::send_evacuation_info_event(G1EvacInfo* info) {
  EventEvacuationInformation e;
  if (e.should_commit()) {
    e.set_gcId(GCId::current());
    e.set_cSetRegions(info->collection_set_regions());
    e.set_cSetUsedBefore(info->collection_set_used_before());
    e.set_cSetUsedAfter(info->collection_set_used_after());
    e.set_allocationRegions(info->allocation_regions());
    e.set_allocationRegionsUsedBefore(info->alloc_regions_used_before());
    e.set_allocationRegionsUsedAfter(info->alloc_regions_used_before() + info->bytes_used());
    e.set_bytesCopied(info->bytes_used());
    e.set_regionsFreed(info->regions_freed());
    e.commit();

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
cSetRegions uint Collection Set Regions
cSetUsedBefore ulong: bytes Collection Set Before Memory usage before GC in the collection set regions
cSetUsedAfter ulong: bytes Collection Set After Memory usage after GC in the collection set regions
allocationRegions uint Allocation Regions Regions chosen as allocation regions during evacuation (includes survivors and old space regions)
allocationRegionsUsedBefore ulong: bytes Allocation Regions Before Memory usage before GC in allocation regions
allocationRegionsUsedAfter ulong: bytes Allocation Regions After Memory usage after GC in allocation regions
bytesCopied ulong: bytes Bytes Copied
regionsFreed uint Regions Freed

Examples 3
allocationRegions uint
1
allocationRegionsUsedAfter ulong: bytes
120192
allocationRegionsUsedBefore ulong: bytes
0
bytesCopied ulong: bytes
120192
cSetRegions uint
6
cSetUsedAfter ulong: bytes
0
cSetUsedBefore ulong: bytes
12582912
gcId uint
1209
regionsFreed uint
6
startTime long: millis
471924073066
allocationRegions uint
3
allocationRegionsUsedAfter ulong: bytes
6250256
allocationRegionsUsedBefore ulong: bytes
2047776
bytesCopied ulong: bytes
4202480
cSetRegions uint
6
cSetUsedAfter ulong: bytes
0
cSetUsedBefore ulong: bytes
12579720
gcId uint
22
regionsFreed uint
6
startTime long: millis
1119323243
allocationRegions uint
1
allocationRegionsUsedAfter ulong: bytes
409584
allocationRegionsUsedBefore ulong: bytes
0
bytesCopied ulong: bytes
409584
cSetRegions uint
53
cSetUsedAfter ulong: bytes
0
cSetUsedBefore ulong: bytes
108595696
gcId uint
1187
regionsFreed uint
53
startTime long: millis
346399877125

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

Configuration enabled
profiling false
default false

Field Type Description
gcId uint GC Identifier
objectClass Class Object Class
count long Count
totalSize ulong: bytes Total Size

Examples 3
count long
57541
gcId uint
1110
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/ArrayList
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/util
startTime long: millis
331809874744
totalSize ulong: bytes
1380984
count long
84081
gcId uint
333
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
16
name string
java/lang/invoke/MemberName
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang/invoke
startTime long: millis
627594486061
totalSize ulong: bytes
3363240
count long
1650
gcId uint
18
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
jdk/jfr/AnnotationElement
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
startTime long: millis
1036050816
totalSize ulong: bytes
39600

G1EvacuationYoungStatistics

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

Configuration enabled
profiling true
default true

Field Type Description
statistics G1EvacuationStatistics struct Evacuation Statistics

Examples 3
startTime long: millis
340672679745
statistics G1EvacuationStatistics
allocated ulong: bytes
1665296
directAllocated ulong: bytes
1209504
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
1154
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
2
undoWaste ulong: bytes
0
used ulong: bytes
1510360
wasted ulong: bytes
16560
startTime long: millis
2151533236
statistics G1EvacuationStatistics
allocated ulong: bytes
6144
directAllocated ulong: bytes
2088896
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
136
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
2112
regionsRefilled uint
1
undoWaste ulong: bytes
0
used ulong: bytes
4176
wasted ulong: bytes
0
startTime long: millis
476018332673
statistics G1EvacuationStatistics
allocated ulong: bytes
570368
directAllocated ulong: bytes
658552
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
1221
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
1
undoWaste ulong: bytes
0
used ulong: bytes
509368
wasted ulong: bytes
6360

G1EvacuationOldStatistics

profiling default 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 current_occupancy,
                                             size_t last_allocation_size,
                                             double last_allocation_duration,

Configuration enabled
profiling true
default true

Field Type Description
statistics G1EvacuationStatistics struct Evacuation Statistics

Examples 3
startTime long: millis
471922678062
statistics G1EvacuationStatistics
allocated ulong: bytes
0
directAllocated ulong: bytes
0
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
1209
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
startTime long: millis
339554431225
statistics G1EvacuationStatistics
allocated ulong: bytes
0
directAllocated ulong: bytes
0
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
1147
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
startTime long: millis
2438656808
statistics G1EvacuationStatistics
allocated ulong: bytes
2048
directAllocated ulong: bytes
1398080
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
162
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
1
undoWaste ulong: bytes
0
used ulong: bytes
32
wasted ulong: bytes
0

G1BasicIHOP

profiling default 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:

  EventG1EvacuationOldStatistics old_evt;
  if (old_evt.should_commit()) {
    old_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
    old_evt.commit();
  }
}

void G1NewTracer::send_basic_ihop_statistics(size_t threshold,
                                             size_t target_occupancy,
                                             size_t current_occupancy,
                                             size_t last_allocation_size,
                                             double last_allocation_duration,
                                             double last_marking_length) {
  EventG1BasicIHOP evt;
  if (evt.should_commit()) {
    evt.set_gcId(GCId::current());
    evt.set_threshold(threshold);
    evt.set_targetOccupancy(target_occupancy);
    evt.set_thresholdPercentage(target_occupancy > 0 ? ((double)threshold / target_occupancy) : 0.0);
    evt.set_currentOccupancy(current_occupancy);
    evt.set_recentMutatorAllocationSize(last_allocation_size);
    evt.set_recentMutatorDuration(last_allocation_duration * MILLIUNITS);
    evt.set_recentAllocationRate(last_allocation_duration != 0.0 ? last_allocation_size / last_allocation_duration : 0.0);
    evt.set_lastMarkingDuration(last_marking_length * MILLIUNITS);
    evt.commit();

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
threshold ulong: bytes Current IHOP Threshold Current IHOP threshold
thresholdPercentage float: percentage Current IHOP Threshold Current IHOP threshold in percent of old generation
targetOccupancy ulong: bytes Target Occupancy Target old generation occupancy to reach at the start of mixed GC
currentOccupancy ulong: bytes Current Occupancy Current old generation occupancy
recentMutatorAllocationSize ulong: bytes 11 17 21 25 until JDK 27 Recent Mutator Allocation Size Mutator allocation during mutator operation in the most recent interval
recentMutatorDuration long: millis 11 17 21 25 until JDK 27 Recent Mutator Duration Time the mutator ran in the most recent interval
recentAllocationRate double: bytes-per-second 11 17 21 25 until JDK 27 Recent Allocation Rate Allocation rate of the mutator in the most recent interval in bytes/second
lastMarkingDuration long: millis 11 17 21 25 until JDK 27 Last Marking Duration Last time from the end of the last concurrent start to the first mixed GC

Examples 3
currentOccupancy ulong: bytes
612893400
gcId uint
1175
lastMarkingDuration long: millis
1383
recentAllocationRate double: bytes-per-second
0.0
recentMutatorAllocationSize ulong: bytes
0
recentMutatorDuration long: millis
11
startTime long: millis
462613545196
targetOccupancy ulong: bytes
931135488
threshold ulong: bytes
0
thresholdPercentage float: percentage
0.0
currentOccupancy ulong: bytes
17896728
gcId uint
39
lastMarkingDuration long: millis
36
recentAllocationRate double: bytes-per-second
1.4726437982929375E7
recentMutatorAllocationSize ulong: bytes
890224
recentMutatorDuration long: millis
60
startTime long: millis
1309364253
targetOccupancy ulong: bytes
35651584
threshold ulong: bytes
16043212
thresholdPercentage float: percentage
0.45
currentOccupancy ulong: bytes
255870888
gcId uint
1147
lastMarkingDuration long: millis
820
recentAllocationRate double: bytes-per-second
0.0
recentMutatorAllocationSize ulong: bytes
0
recentMutatorDuration long: millis
145
startTime long: millis
339554449695
targetOccupancy ulong: bytes
868220928
threshold ulong: bytes
0
thresholdPercentage float: percentage
0.0

G1AdaptiveIHOP

profiling default 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:

    evt.set_recentAllocationRate(last_allocation_duration != 0.0 ? last_allocation_size / last_allocation_duration : 0.0);
    evt.set_lastMarkingDuration(last_marking_length * MILLIUNITS);
    evt.commit();
  }
}

void G1NewTracer::send_adaptive_ihop_statistics(size_t threshold,
                                                size_t internal_target_occupancy,
                                                size_t current_occupancy,
                                                size_t additional_buffer_size,
                                                double predicted_allocation_rate,
                                                double predicted_marking_length,
                                                bool prediction_active) {
  EventG1AdaptiveIHOP evt;
  if (evt.should_commit()) {
    evt.set_gcId(GCId::current());
    evt.set_threshold(threshold);
    evt.set_thresholdPercentage(internal_target_occupancy > 0 ? ((double)threshold / internal_target_occupancy) : 0.0);
    evt.set_ihopTargetOccupancy(internal_target_occupancy);
    evt.set_currentOccupancy(current_occupancy);
    evt.set_additionalBufferSize(additional_buffer_size);
    evt.set_predictedAllocationRate(predicted_allocation_rate);
    evt.set_predictedMarkingDuration(predicted_marking_length * MILLIUNITS);
    evt.set_predictionActive(prediction_active);
    evt.commit();

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
threshold ulong: bytes Threshold Current IHOP Threshold
thresholdPercentage float: percentage Threshold Current IHOP threshold in percent of the internal target occupancy
ihopTargetOccupancy ulong: bytes IHOP Target Occupancy Internal target old generation occupancy to reach at the start of mixed GC
currentOccupancy ulong: bytes Current Occupancy Current old generation occupancy
additionalBufferSize ulong: bytes Additional Buffer Additional buffer size
predictedAllocationRate double: bytes-per-second 11 17 21 25 until JDK 27 Predicted Allocation Rate Current predicted allocation rate for the mutator in bytes/second
predictedMarkingDuration long: millis Predicted Marking Duration Current predicted time from the end of the last concurrent start to the first mixed GC
predictionActive boolean Prediction Active Indicates whether the adaptive IHOP prediction is active

Examples 3
additionalBufferSize ulong: bytes
1314914304
currentOccupancy ulong: bytes
255543192
gcId uint
1118
ihopTargetOccupancy ulong: bytes
2083939942
predictedAllocationRate double: bytes-per-second
3.6387230235473734E8
predictedMarkingDuration long: millis
1508
predictionActive boolean
true
startTime long: millis
334031118289
threshold ulong: bytes
220036108
thresholdPercentage float: percentage
0.10558659
additionalBufferSize ulong: bytes
150994944
currentOccupancy ulong: bytes
13416832
gcId uint
16
ihopTargetOccupancy ulong: bytes
239075328
predictedAllocationRate double: bytes-per-second
2.024249942760931E8
predictedMarkingDuration long: millis
72
predictionActive boolean
false
startTime long: millis
910569907
threshold ulong: bytes
113246208
thresholdPercentage float: percentage
0.47368422
additionalBufferSize ulong: bytes
570425344
currentOccupancy ulong: bytes
283525472
gcId uint
1265
ihopTargetOccupancy ulong: bytes
904501657
predictedAllocationRate double: bytes-per-second
6.87681228040451E8
predictedMarkingDuration long: millis
1828
predictionActive boolean
true
startTime long: millis
509822397984
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();
  }
}

Configuration enabled
profiling true
default false

Field Type Description
gcId uint GC Identifier Identifier signifying GC during which the object was promoted
objectClass Class Object Class Class of promoted object
objectSize ulong: bytes Object Size Size of promoted object
tenuringAge uint Object Tenuring Age Tenuring age of a surviving object before being copied. The tenuring age of an object is a value between 0-15 and is incremented each scavenge the object survives. Newly allocated objects have tenuring age 0.
tenured boolean Tenured True if object was promoted to Old space, otherwise the object was aged and copied to a Survivor space
plabSize ulong: bytes PLAB Size Size of the allocated PLAB to which the object was copied

Examples 3
gcId uint
3
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[B
package Package
null
objectSize ulong: bytes
4112
plabSize ulong: bytes
66752
startTime long: millis
456884648
tenured boolean
false
tenuringAge uint
0
gcId uint
346
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
1041
name string
[Lbreeze/linalg/Vector;
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
7216
plabSize ulong: bytes
32760
startTime long: millis
652137229638
tenured boolean
false
tenuringAge uint
0
gcId uint
1106
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
12
name string
org/apache/commons/collections4/map/AbstractReferenceMap$ReferenceEntry
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/collections4/map
objectSize ulong: bytes
32
plabSize ulong: bytes
2048
startTime long: millis
331204000060
tenured boolean
false
tenuringAge uint
0

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 {

Configuration enabled
profiling true
default false

Field Type Description
gcId uint GC Identifier Identifier signifying GC during which the object was promoted
objectClass Class Object Class Class of promoted object
objectSize ulong: bytes Object Size Size of promoted object
tenuringAge uint Object Tenuring Age Tenuring age of a surviving object before being copied. The tenuring age of an object is a value between 0-15 and is incremented each scavenge the object survives. Newly allocated objects have tenuring age 0.
tenured boolean Tenured True if object was promoted to Old space, otherwise the object was aged and copied to a Survivor space

Examples 3
gcId uint
348
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
1041
name string
[Lorg/apache/spark/unsafe/memory/MemoryBlock;
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/memory
objectSize ulong: bytes
32784
startTime long: millis
655322228634
tenured boolean
false
tenuringAge uint
0
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
449520017
tenured boolean
true
tenuringAge uint
0
gcId uint
1106
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
280080
startTime long: millis
331204941399
tenured boolean
false
tenuringAge uint
0

PromotionFailed

profiling default 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;

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
promotionFailed CopyFailed struct Promotion Failed Data
thread Thread Running Thread

EvacuationFailed

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

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
evacuationFailed CopyFailed struct Evacuation Failed Data

ConcurrentModeFailure

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

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier

Examples 3
gcId uint
1109
startTime long: millis
331871852630
gcId uint
1163
startTime long: millis
459190799037
gcId uint
718
startTime long: millis
7423470780

GCCPUTime

profiling default 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;

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
userTime ulong: nanos User Time
systemTime ulong: nanos System Time
realTime ulong: nanos Real Time

Examples 3
gcId uint
1150
realTime ulong: nanos
0
startTime long: millis
339743064815
systemTime ulong: nanos
0
userTime ulong: nanos
9999999
gcId uint
89
realTime ulong: nanos
19999999
startTime long: millis
1732687045
systemTime ulong: nanos
0
userTime ulong: nanos
9999999
gcId uint
364
realTime ulong: nanos
299999999
startTime long: millis
679172749418
systemTime ulong: nanos
9999999
userTime ulong: nanos
980000000

AllocationRequiringGC

startTime eventThread stackTrace graal vm only

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

Configuration enabled stackTrace
profiling false true
default false true

Field Type Description
gcId uint Pending GC Identifier
size ulong: bytes Allocation Size

Examples 3
gcId uint
12
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
JIT compiled
truncated boolean
false
startTime long: millis
649327384
gcId uint
1114
size ulong: bytes
140048
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
15
lineNumber int
3537
method Method
descriptor string
([BI)[B
hidden boolean
false
modifiers int
9
name string
copyOf
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
java/util/Arrays
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/util
type FrameType
JIT compiled
truncated boolean
true
startTime long: millis
333124041837
gcId uint
348
size ulong: bytes
16
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
655321288399

TenuringDistribution

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

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
age uint Age
size ulong: bytes Size

Examples 3
age uint
15
gcId uint
0
size ulong: bytes
0
startTime long: millis
280869425
age uint
1
gcId uint
1337
size ulong: bytes
1321736
startTime long: millis
575663798899
age uint
5
gcId uint
1108
size ulong: bytes
0
startTime long: millis
331686569816

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

Configuration enabled
profiling false
default false

Field Type Description
index uint Index
from G1HeapRegionType From
to G1HeapRegionType To
start ulong: address Start
used ulong: bytes Used

Examples 3
from G1HeapRegionType
Free
index uint
117
start ulong: address
30412898304
startTime long: millis
330447470442
to G1HeapRegionType
Continues Humongous
used ulong: bytes
0
from G1HeapRegionType
Free
index uint
26
start ulong: address
30222057472
startTime long: millis
490331697
to G1HeapRegionType
Survivor
used ulong: bytes
0
from G1HeapRegionType
Free
index uint
501
start ulong: address
31218204672
startTime long: millis
459862475872
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

Configuration enabled period
profiling false everyChunk
default false everyChunk

Field Type Description
gcId uint GC Identifier
objectClass Class Object Class
count long Count
totalSize ulong: bytes Total Size

Examples 3
count long
19296
gcId uint
1107
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
java/lang/reflect/Field
package Package
exported boolean
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
startTime long: millis
331534797525
totalSize ulong: bytes
1234944
count long
19308
gcId uint
331
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
java/lang/reflect/Field
package Package
exported boolean
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
startTime long: millis
623944068198
totalSize ulong: bytes
1235712
count long
28
gcId uint
25
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[C
package Package
null
startTime long: millis
1142202609
totalSize ulong: bytes
203904

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

Configuration enabled period
profiling false everyChunk
default false everyChunk

Field Type Description
index uint Index
type G1HeapRegionType Type
start ulong: address Start
used ulong: bytes Used

Examples 3
index uint
1
start ulong: address
30169628672
startTime long: millis
11124088280
type G1HeapRegionType
Old
used ulong: bytes
2097128
index uint
63
start ulong: address
30299652096
startTime long: millis
330321279990
type G1HeapRegionType
Old
used ulong: bytes
2094264
index uint
257
start ulong: address
30706499584
startTime long: millis
459191670027
type G1HeapRegionType
Free
used ulong: bytes
0

ZAllocationStall

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

Configuration enabled stackTrace threshold
profiling true true 17+ 0 ms
default true true 17+ 0 ms

Field Type Description
type ZPageTypeType Type
size ulong: bytes Size

ZPageAllocation

profiling default 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) {
    EventZPageAllocation event;

    Ticks end_timestamp = Ticks::now();
    const ZPageAllocationStats st = stats();

    event.commit(_start_timestamp,
                 end_timestamp,
                 (u8)_type,
                 size(),
                 st._total_harvested,
                 st._total_committed_capacity,
                 (unsigned)st._num_harvested_vmems,

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) {
  EventZPageAllocation event;

  ZPageAllocation allocation(type, size, flags, age);

  // Allocate the page
  ZPage* const page = alloc_page_inner(&allocation);
  if (page == nullptr) {
    return nullptr;
  }

  // Update allocation statistics. Exclude gc relocations to avoid
  // artificial inflation of the allocation rate during relocation.

Configuration enabled stackTrace threshold
profiling true true 15+ 1 ms
default true true 15+ 1 ms

Field Type Description
type ZPageTypeType 15+ Type
size ulong: bytes 15+ Size
harvested ulong: bytes 25+ Harvested
committed ulong: bytes 15+ Committed
harvestedRanges uint 25+ Harvested Ranges Number of harvested memory ranges
multiPartition boolean 25+ Multi-Partition
successful boolean 25+ Successful
nonBlocking boolean Non-Blocking

Examples 2
committed ulong: bytes
0
harvested ulong: bytes
0
harvestedRanges uint
0
multiPartition boolean
false
nonBlocking boolean
false
size ulong: bytes
2097152
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
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
467291009
successful boolean
true
type ZPageTypeType
Small
committed ulong: bytes
0
harvested ulong: bytes
0
harvestedRanges uint
0
multiPartition boolean
false
nonBlocking boolean
false
size ulong: bytes
2097152
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
951
method Method
descriptor string
(D)Ljava/lang/Double;
hidden boolean
false
modifiers int
9
name string
valueOf
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
java/lang/Double
package Package
exported boolean
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
351446326382
successful boolean
true
type ZPageTypeType
Small

ZRelocationSet

profiling default 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 {

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
total ulong: bytes Total
empty ulong: bytes Empty
relocate ulong: bytes 16+ Relocate

Examples 2
empty ulong: bytes
113246208
relocate ulong: bytes
5135120
startTime long: millis
389727263702
total ulong: bytes
920649728
empty ulong: bytes
60817408
relocate ulong: bytes
8856
startTime long: millis
1686931304
total ulong: bytes
73400320

ZRelocationSetGroup

profiling default 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 = selected_live_bytes[i];
    _stats[i]._npages_selected = npages_selected[i];
  }

  log_debug(gc, reloc)("Relocation Set (%s Pages): %d->%d, %d skipped, %zu forwarding entries",
                       _name, selected_from, selected_to, npages - selected_from, selected_forwarding_entries);
}

void ZRelocationSetSelectorGroup::select() {
  if (is_disabled()) {
    return;
  }

  EventZRelocationSetGroup event;

  if (is_selectable()) {
    select_inner();
  } else {
    // Mark pages as not selected
    const int npages = _live_pages.length();
    for (int from = 1; from <= npages; from++) {
      ZPage* const page = _live_pages.at(from - 1);
      _not_selected_pages.append(page);
    }
  }

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
type ZPageTypeType Type
candidatePages ulong 21+ Candidate Pages
total ulong: bytes Total
empty ulong: bytes Empty
selectedPages ulong 21+ Selected Pages
relocate ulong: bytes 16+ Relocate

Examples 2
candidatePages ulong
1
empty ulong: bytes
0
relocate ulong: bytes
0
selectedPages ulong
0
startTime long: millis
373572140353
total ulong: bytes
33554432
type ZPageTypeType
Medium
candidatePages ulong
1
empty ulong: bytes
33554432
relocate ulong: bytes
0
selectedPages ulong
0
startTime long: millis
1019967290
total ulong: bytes
33554432
type ZPageTypeType
Medium

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

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;

Configuration enabled threshold
profiling false 0 ms
default false 0 ms

Field Type Description
id ZStatisticsCounterType Id
increment ulong Increment
value ulong Value

Examples 2
id ZStatisticsCounterType
Allocation Rate
increment ulong
2097152
startTime long: millis
351456945651
value ulong
79691776
id ZStatisticsCounterType
Allocation Rate
increment ulong
2097152
startTime long: millis
599347231
value ulong
90177536

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

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

Configuration enabled threshold
profiling false 0 ms
default false 0 ms

Field Type Description
id ZStatisticsSamplerType Id
value ulong Value

Examples 2
id ZStatisticsSamplerType
Mark SeqNum Reset Contention
startTime long: millis
1075271193
value ulong
0
id ZStatisticsSamplerType
Concurrent Weak Roots OopStorageSet
startTime long: millis
352308529728
value ulong
2183177

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

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;

Configuration enabled threshold
profiling false 0 ms
default false 0 ms

Field Type Description
gcId uint GC Identifier
name string Name

Examples 2
gcId uint
9
name string
Concurrent Roots JavaThreads
startTime long: millis
1197147907
gcId uint
287
name string
Concurrent Mark Roots
startTime long: millis
351693997747

ZUncommit

profiling default startTime duration eventThread 15 17 21 25 27 28

Category: Java Virtual Machine / GC / Detailed

Uncommitting of memory

Code Context

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

src/hotspot/share/gc/z/zUncommitter.cpp:

bool ZUncommitter::should_continue() const {
  ZLocker<ZConditionLock> locker(&_lock);
  return !_stop;
}

void ZUncommitter::update_statistics(size_t uncommitted, Ticks start, Tickspan* accumulated_time) const {
  // Update counter
  ZStatInc(ZCounterUncommit, uncommitted);

  Ticks end = Ticks::now();

  // Send event
  EventZUncommit::commit(start, end, uncommitted);

  // Track accumulated time
  *accumulated_time += end - start;
}

void ZUncommitter::run_thread() {
  // Initialize first cycle timeout
  _next_cycle_timeout = to_millis(ZUncommitDelay);

  while (wait(_next_cycle_timeout)) {
    // Counters for event and statistics

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
uncommitted ulong: bytes Uncommitted

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)) {
    report_java_out_of_memory("Unable to uncommit region");
  }
  if (!heap->uncommit_bitmap_slice(this)) {
    report_java_out_of_memory("Unable to uncommit bitmaps for region");
  }
  heap->decrease_committed(ShenandoahHeapRegion::region_size_bytes());
}

void ShenandoahHeapRegion::set_state(RegionState to) {
  EventShenandoahHeapRegionStateChange evt;
  if (evt.should_commit()){
    evt.set_index((unsigned) index());
    evt.set_start((uintptr_t)bottom());
    evt.set_used(used());
    evt.set_from(state());
    evt.set_to(to);
    evt.commit();
  }
  Atomic::release_store(&_state, to);
}

Configuration enabled
profiling false
default false

Field Type Description
index uint Index
from ShenandoahHeapRegionState From
to ShenandoahHeapRegionState To
start ulong: address Start
used ulong: bytes Used

Examples 2
from ShenandoahHeapRegionState
Empty Committed
index uint
2986
start ulong: address
33298579456
startTime long: millis
555846689457
to ShenandoahHeapRegionState
Empty Uncommitted
used ulong: bytes
0
from ShenandoahHeapRegionState
Empty Uncommitted
index uint
3615
start ulong: address
33958133760
startTime long: millis
701250127
to ShenandoahHeapRegionState
Regular
used ulong: bytes
0

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

Configuration enabled period
profiling false everyChunk
default false everyChunk

Field Type Description
index uint Index
state ShenandoahHeapRegionState State
start ulong: address Start
used ulong: bytes Used

Examples 2
index uint
46
start ulong: address
30215766016
startTime long: millis
385413801
state ShenandoahHeapRegionState
Empty Committed
used ulong: bytes
0
index uint
3751
start ulong: address
34100740096
startTime long: millis
558550845449
state ShenandoahHeapRegionState
Regular
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_promoted_humongous, size_t regions_promoted_regular,
    size_t regular_promoted_garbage, size_t regular_promoted_free, 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_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_regionsPromotedRegular(regions_promoted_regular);
    e.set_regularPromotedGarbage(regular_promoted_garbage);
    e.set_regularPromotedFree(regular_promoted_free);
    e.set_freeRegions(free_regions);
    e.set_regionsImmediate(regions_immediate);

Configuration enabled
profiling false
default false

Field Type Description
gcId uint GC Identifier
cSetRegions ulong Collection Set Regions
cSetUsedBefore ulong: bytes Collection Set Before Memory usage before GC in the collection set regions
cSetUsedAfter ulong: bytes Collection Set After Memory usage after GC in the collection set regions
collectedOld ulong: bytes 25 until JDK 27 Collected Old Memory collected from old generation
collectedPromoted ulong: bytes 25 until JDK 27 Collected Promoted Memory collected from generation promotion
collectedYoung ulong: bytes 25 until JDK 27 Collection Young Memory collected from young generation
regionsPromotedHumongous ulong 25 until JDK 27 Regions Promoted Humongous
regionsPromotedRegular ulong 25 until JDK 27 Regions Promoted Regular
regularPromotedGarbage ulong: bytes 25 until JDK 27 Regular Promoted Garbage Garbage memory of in place promoted regular regions
regularPromotedFree ulong: bytes 25 until JDK 27 Regular Promoted Free Free memory of in place promoted regular regions
freeRegions ulong 25+ Free Regions Free regions prior to collection
regionsImmediate ulong Regions Immediate
immediateBytes ulong: bytes Immediate Bytes

JVM: GC: Heap

GCHeapSummary

profiling default startTime graal vm only

Category: Java Virtual Machine / GC / Heap

Code Context

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

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

  space.set_used(summary.used());
  space.set_size(summary.size());
  return space;
}

class GCHeapSummaryEventSender : public GCHeapSummaryVisitor {
  GCWhen::Type _when;
 public:
  GCHeapSummaryEventSender(GCWhen::Type when) : _when(when) {}

  void visit(const GCHeapSummary* heap_summary) const {
    const VirtualSpaceSummary& heap_space = heap_summary->heap();

    EventGCHeapSummary e;
    if (e.should_commit()) {
      e.set_gcId(GCId::current());
      e.set_when((u1)_when);
      e.set_heapSpace(to_struct(heap_space));
      e.set_heapUsed(heap_summary->used());
      e.commit();
    }
  }

  void visit(const G1HeapSummary* g1_heap_summary) const {
    visit((GCHeapSummary*)g1_heap_summary);

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
when GCWhen When
heapSpace VirtualSpace struct Heap Space
heapUsed ulong: bytes Heap Used Bytes allocated by objects in the heap

Examples 3
gcId uint
23
heapSpace VirtualSpace
committedEnd ulong: address
30203183104
committedSize ulong: bytes
35651584
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
4192206848
start ulong: address
30167531520
heapUsed ulong: bytes
19099880
startTime long: millis
1125585844
when GCWhen
Before GC
gcId uint
1100
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
255147400
startTime long: millis
330123736095
when GCWhen
Before GC
gcId uint
365
heapSpace VirtualSpace
committedEnd ulong: address
32956743680
committedSize ulong: bytes
2789212160
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
4192206848
start ulong: address
30167531520
heapUsed ulong: bytes
266490688
startTime long: millis
679521870460
when GCWhen
After GC

MetaspaceSummary

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

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
when GCWhen When
gcThreshold ulong: bytes GC Threshold
metaspace MetaspaceSizes struct Total
dataSpace MetaspaceSizes struct Data
classSpace MetaspaceSizes struct Class

Examples 3
classSpace MetaspaceSizes
committed ulong: bytes
179175424
reserved ulong: bytes
1073741824
used ulong: bytes
177540016
dataSpace MetaspaceSizes
committed ulong: bytes
779091968
reserved ulong: bytes
805306368
used ulong: bytes
777221432
gcId uint
347
gcThreshold ulong: bytes
1597046784
metaspace MetaspaceSizes
committed ulong: bytes
958267392
reserved ulong: bytes
1879048192
used ulong: bytes
954761448
startTime long: millis
652413700012
when GCWhen
After GC
classSpace MetaspaceSizes
committed ulong: bytes
3014656
reserved ulong: bytes
1073741824
used ulong: bytes
2864144
dataSpace MetaspaceSizes
committed ulong: bytes
11993088
reserved ulong: bytes
67108864
used ulong: bytes
11868272
gcId uint
45
gcThreshold ulong: bytes
25034752
metaspace MetaspaceSizes
committed ulong: bytes
15007744
reserved ulong: bytes
1140850688
used ulong: bytes
14732416
startTime long: millis
1343679221
when GCWhen
Before GC
classSpace MetaspaceSizes
committed ulong: bytes
179306496
reserved ulong: bytes
1073741824
used ulong: bytes
177641168
dataSpace MetaspaceSizes
committed ulong: bytes
778895360
reserved ulong: bytes
805306368
used ulong: bytes
777092784
gcId uint
1141
gcThreshold ulong: bytes
1596784640
metaspace MetaspaceSizes
committed ulong: bytes
958201856
reserved ulong: bytes
1879048192
used ulong: bytes
954733952
startTime long: millis
338255517643
when GCWhen
After GC

PSHeapSummary

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

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
when GCWhen When
oldSpace VirtualSpace struct Old Space
oldObjectSpace ObjectSpace struct Old Object Space
youngSpace VirtualSpace struct Young Space
edenSpace ObjectSpace struct Eden Space
fromSpace ObjectSpace struct From Space
toSpace ObjectSpace struct To Space

Examples 2
edenSpace ObjectSpace
end ulong: address
33483128832
size ulong: bytes
520093696
start ulong: address
32963035136
used ulong: bytes
27098616
fromSpace ObjectSpace
end ulong: address
33495711744
size ulong: bytes
6291456
start ulong: address
33489420288
used ulong: bytes
0
gcId uint
69
oldObjectSpace ObjectSpace
end ulong: address
30343692288
size ulong: bytes
176160768
start ulong: address
30167531520
used ulong: bytes
6550640
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
2332505682
toSpace ObjectSpace
end ulong: address
33489420288
size ulong: bytes
6291456
start ulong: address
33483128832
used ulong: bytes
0
when GCWhen
Before GC
youngSpace VirtualSpace
committedEnd ulong: address
33495711744
committedSize ulong: bytes
532676608
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
1396703232
start ulong: address
32963035136
edenSpace ObjectSpace
end ulong: address
34009513984
size ulong: bytes
1046478848
start ulong: address
32963035136
used ulong: bytes
1046478848
fromSpace ObjectSpace
end ulong: address
34112274432
size ulong: bytes
2097152
start ulong: address
34110177280
used ulong: bytes
0
gcId uint
346
oldObjectSpace ObjectSpace
end ulong: address
31826378752
size ulong: bytes
1658847232
start ulong: address
30167531520
used ulong: bytes
260496184
oldSpace VirtualSpace
committedEnd ulong: address
31826378752
committedSize ulong: bytes
1658847232
reservedEnd ulong: address
32963035136
reservedSize ulong: bytes
2795503616
start ulong: address
30167531520
startTime long: millis
652136356873
toSpace ObjectSpace
end ulong: address
34252783616
size ulong: bytes
92274688
start ulong: address
34160508928
used ulong: bytes
0
when GCWhen
Before GC
youngSpace VirtualSpace
committedEnd ulong: address
34252783616
committedSize ulong: bytes
1289748480
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
1396703232
start ulong: address
32963035136

G1HeapSummary

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

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
when GCWhen When
edenUsedSize ulong: bytes Eden Used Size
edenTotalSize ulong: bytes Eden Total Size
survivorUsedSize ulong: bytes Survivor Used Size
oldGenUsedSize ulong: bytes 21+ Old Generation Used Size
numberOfRegions uint Number of Regions

Examples 3
edenTotalSize ulong: bytes
7504144
edenUsedSize ulong: bytes
4194304
gcId uint
4
numberOfRegions uint
14
oldGenUsedSize ulong: bytes
8207440
startTime long: millis
459012524
survivorUsedSize ulong: bytes
884464
when GCWhen
Before GC
edenTotalSize ulong: bytes
456985936
edenUsedSize ulong: bytes
306184192
gcId uint
1122
numberOfRegions uint
410
oldGenUsedSize ulong: bytes
422283752
startTime long: millis
334795488125
survivorUsedSize ulong: bytes
193200
when GCWhen
After GC
edenTotalSize ulong: bytes
553648128
edenUsedSize ulong: bytes
0
gcId uint
1201
numberOfRegions uint
440
oldGenUsedSize ulong: bytes
270802176
startTime long: millis
469986888276
survivorUsedSize ulong: bytes
0
when GCWhen
After GC

JVM: GC: Metaspace

MetaspaceGCThreshold

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

Configuration enabled
profiling true
default true

Field Type Description
oldValue ulong: bytes Old Value
newValue ulong: bytes New Value
updater GCThresholdUpdater Updater

Examples 3
newValue ulong: bytes
1595932672
oldValue ulong: bytes
1594949632
startTime long: millis
635249856697
updater GCThresholdUpdater
compute_new_size
newValue ulong: bytes
25362432
oldValue ulong: bytes
25034752
startTime long: millis
9129227663
updater GCThresholdUpdater
compute_new_size
newValue ulong: bytes
1598685184
oldValue ulong: bytes
1597767680
startTime long: millis
351981812053
updater GCThresholdUpdater
compute_new_size

MetaspaceAllocationFailure

profiling default 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,

Configuration enabled stackTrace
profiling true true
default true true

Field Type Description
classLoader ClassLoader Class Loader
hiddenClassLoader boolean 15+ Hidden Class Loader
size ulong: bytes Size
metadataType MetadataType Metadata Type
metaspaceObjectType MetaspaceObjectType Metaspace Object Type

MetaspaceOOM

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

Configuration enabled stackTrace
profiling true true
default true true

Field Type Description
classLoader ClassLoader Class Loader
hiddenClassLoader boolean 15+ Hidden Class Loader
size ulong: bytes Size
metadataType MetadataType Metadata Type
metaspaceObjectType MetaspaceObjectType Metaspace Object Type

MetaspaceChunkFreeListSummary

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

Configuration enabled
profiling true
default true

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

Examples 3
gcId uint
16
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
910599621
when GCWhen
After GC
gcId uint
1107
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
331604341106
when GCWhen
After GC
gcId uint
336
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
634894606694
when GCWhen
Before GC

JVM: GC: Phases

GCPhasePause

profiling default startTime duration eventThread graal vm only

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

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
gcId uint
337
name string
GC Pause
startTime long: millis
635817013591
gcId uint
96
name string
GC Pause
startTime long: millis
1783239275
gcId uint
1159
name string
GC Pause
startTime long: millis
341036925968

GCPhasePauseLevel1

profiling default startTime duration eventThread graal vm only

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

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
gcId uint
36
name string
Phase 3: Adjust pointers
startTime long: millis
1236774606
gcId uint
1118
name string
Notify PhantomReferences
startTime long: millis
334026507595
gcId uint
338
name string
Post Compact
startTime long: millis
637672489595

GCPhasePauseLevel2

profiling default startTime duration eventThread graal vm only

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;

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
gcId uint
1136
name string
Unregister NMethods
startTime long: millis
336675047781
gcId uint
334
name string
Flush Marking Stats
startTime long: millis
629733354551
gcId uint
36
name string
Phase 1: Flush Mark Stats Cache
startTime long: millis
1234008259

GCPhasePauseLevel3

startTime duration eventThread graal vm only

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;

Configuration enabled threshold
profiling false 0 ms
default false 0 ms

Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
gcId uint
35
name string
Trigger cleanups
startTime long: millis
1224407542
gcId uint
337
name string
Trigger cleanups
startTime long: millis
635904224527
gcId uint
1130
name string
G1 Complete Cleaning
startTime long: millis
335812170742

GCPhasePauseLevel4

startTime duration eventThread graal vm only

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;

Configuration enabled threshold
profiling false 0 ms
default false 0 ms

Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
gcId uint
1232
name string
Balance queues
startTime long: millis
372833916895
gcId uint
1218
name string
Balance queues
startTime long: millis
474997689919
gcId uint
335
name string
Balance queues
startTime long: millis
633432498128

GCPhaseConcurrent

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

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:

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
gcId uint
297
name string
Concurrent evacuation
startTime long: millis
561109367052
gcId uint
145
name string
Concurrent Rebuild Remembered Sets and Scrub Regions
startTime long: millis
2235419580
gcId uint
1179
name string
Concurrent Preclean
startTime long: millis
344970160581

GCPhaseConcurrentLevel1

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

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier
name string Name

Examples 3
gcId uint
250
name string
Preclean SoftReferences
startTime long: millis
3309821934
gcId uint
309
name string
ClassLoaderData
startTime long: millis
582482227806
gcId uint
1173
name string
Preclean SoftReferences
startTime long: millis
343336031229

GCPhaseConcurrentLevel2

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

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier
name string Name

Examples 2
gcId uint
291
name string
Trigger cleanups
startTime long: millis
360663200667
gcId uint
28
name string
Trigger cleanups
startTime long: millis
1585106216

GCPhaseParallel

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

class ShenandoahSuspendibleThreadSetJoiner {
private:
  SuspendibleThreadSetJoiner _joiner;
public:
  ShenandoahSuspendibleThreadSetJoiner(bool active = true) : _joiner(active) {

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::ParPhase const _par_phase;
  uint const _worker_id;

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

#endif // SHARE_GC_SHENANDOAH_SHENANDOAHPHASETIMINGS_HPP

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

      _worker_freelists[worker].~G1FreeRegionList();
    }
    FREE_C_HEAP_ARRAY(G1FreeRegionList, _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++) {

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

  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;
  G1EvacPhaseWithTrimTimeTracker timer(pss, code_root_scan_time, code_root_trim_partially_time);

  G1GCPhaseTimes* p = _g1h->phase_times();

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

Configuration enabled threshold
profiling true 0 ms
default true 0 ms

Field Type Description
gcId uint GC Identifier
gcWorkerId uint GC Worker Identifier
name string Name

Examples 3
gcId uint
1
gcWorkerId uint
2
name string
VM Global
startTime long: millis
448883762
gcId uint
1099
gcWorkerId uint
0
name string
ThreadService OopStorage
startTime long: millis
330122664725
gcId uint
307
gcWorkerId uint
0
name string
Finish Mark
startTime long: millis
579545885126

JVM: GC: Reference

GCReferenceStatistics

profiling default 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;

Configuration enabled
profiling true
default true

Field Type Description
gcId uint GC Identifier
type ReferenceType Type
count ulong Total Count

Examples 3
count ulong
0
gcId uint
342
startTime long: millis
642078888920
type ReferenceType
Soft reference
count ulong
0
gcId uint
7
startTime long: millis
501319502
type ReferenceType
Final reference
count ulong
1
gcId uint
1114
startTime long: millis
333128522447
type ReferenceType
Phantom reference

JVM: Heap

GCHeapMemoryUsage

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

Configuration enabled period
profiling true everyChunk
default true everyChunk

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
committed ulong: bytes
868220928
max ulong: bytes
4192206848
startTime long: millis
344406448777
used ulong: bytes
262706136
committed ulong: bytes
35651584
max ulong: bytes
4192206848
startTime long: millis
21676522577
used ulong: bytes
15449144
committed ulong: bytes
2803892224
max ulong: bytes
3726639104
startTime long: millis
633345748965
used ulong: bytes
267115576

GCHeapMemoryPoolUsage

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

Configuration enabled period
profiling true everyChunk
default true everyChunk

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
committed ulong: bytes
0
max ulong: bytes
-1
name string
G1 Survivor Space
startTime long: millis
5677377401
used ulong: bytes
0
committed ulong: bytes
1658847232
max ulong: bytes
2795503616
name string
PS Old Gen
startTime long: millis
682240292904
used ulong: bytes
279304992
committed ulong: bytes
505413632
max ulong: bytes
-1
name string
G1 Eden Space
startTime long: millis
360225375142
used ulong: bytes
0

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

Code Context

The event is likely defined 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.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/EventProvider.java:

    /**
     * Creates and returns an empty implementation for {@link CompilationEvent}.
     */
    static CompilerFailureEvent createEmptyCompilerFailureEvent() {
        return new EmptyCompilerFailureEvent();
    }

    /**
     * An instant event is an event that is not considered to have taken any time.
     */
    public interface InstantEvent {
        /**
         * Commits the event.
         */
        void commit();

        /**
         * Determines if this particular event instance would be committed to the data stream right
         * now if application called {@link #commit()}. This in turn depends on whether the event is
         * enabled and possible other factors.
         *
         * @return if this event would be committed on a call to {@link #commit()}.
         */
        boolean shouldWrite();
    }

    /**
     * Timed events describe an operation that somehow consumes time.
     */
    public interface TimedEvent extends InstantEvent {
        /**
         * Starts the timing for this event.
         */
        void begin();

        /**
         * Ends the timing period for this event.
         */
        void end();
    }

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/EventProvider.java:

        void setIsOsr(boolean isOsr);

        void setCodeSize(int codeSize);

        void setInlinedBytes(int inlinedBytes);
    }

    /**
     * Creates a new {@link CompilerFailureEvent}.
     *
     * @return a compiler failure event
     */
    CompilerFailureEvent newCompilerFailureEvent();

    /**
     * A compiler failure event.
     */
    public interface CompilerFailureEvent extends InstantEvent {
        void setCompileId(int compileId);

        void setMessage(String message);
    }
}

Value

internal startTime eventThread 18 21 25 27 28

Category: Java Virtual Machine / Internal

Field Type Description
value ulong Value

Text

internal startTime eventThread 18 21 25 27 28

Category: Java Virtual Machine / Internal

Field Type Description
text string Text

JVM: Memory

ResidentSetSize

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

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

Configuration enabled period
profiling true 1000 ms
default true 1000 ms

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
peak ulong: bytes
5294510080
size ulong: bytes
2693607424
startTime long: millis
351531874977
peak ulong: bytes
403091456
size ulong: bytes
181231616
startTime long: millis
12493998724
peak ulong: bytes
7464689664
size ulong: bytes
5579845632
startTime long: millis
624028366154

NativeMemoryUsage

profiling default startTime duration every chunk graal vm only

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

Configuration enabled period
profiling true 1000 ms
default true 1000 ms

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
committed ulong: bytes
14381928
reserved ulong: bytes
257438568
startTime long: millis
1316143108
type NMTType
Code
committed ulong: bytes
1216512
reserved ulong: bytes
38936576
startTime long: millis
3337514175
type NMTType
Thread Stack
committed ulong: bytes
181920
reserved ulong: bytes
181920
startTime long: millis
2422489378
type NMTType
Module

NativeMemoryUsageTotal

profiling default startTime duration every chunk graal vm only

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

Configuration enabled period
profiling true 1000 ms
default true 1000 ms

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
committed ulong: bytes
278113533
reserved ulong: bytes
5805481213
startTime long: millis
11474086774
committed ulong: bytes
352167878
reserved ulong: bytes
5697669062
startTime long: millis
1366506805
committed ulong: bytes
873163641
reserved ulong: bytes
5770587001
startTime long: millis
23817330016

NativeMemoryUsageTotalPeak

experimental startTime duration graal vm only

Category: Java Virtual Machine / Memory

Total native memory peak usage for the JVM (GraalVM Native Image only). Might not be the exact sum of the NativeMemoryUsagePeak events due to timing.

Field Type Description
peakReserved long: bytes Peak Reserved
peakCommitted long: bytes Peak Committed
countAtPeak long Count At Peak

NativeMemoryUsagePeak

experimental startTime duration graal vm only

Category: Java Virtual Machine / Memory

Native memory peak usage for a given memory type in the JVM (GraalVM Native Image only).

Field Type Description
type string Memory Type
peakReserved long: bytes Peak Reserved
peakCommitted long: bytes Peak Committed
countAtPeak long Count At Peak

JVM: Method Tracing

MethodTiming

profiling default 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/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.VirtualThreadStartEvent.class,
        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.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.VirtualThreadStartEvent.class,
        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.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;

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

Configuration enabled filter period
profiling true null endChunk
default true null endChunk

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

profiling default 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/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,
        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.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,
        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;

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

Configuration enabled filter stackTrace threshold
profiling true null true 0 ms
default true null true 0 ms

JVM: Profiling

OldObjectSample

cutoff profiling default startTime eventThread stackTrace graal vm only

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

Configuration cutoff enabled stackTrace
profiling 0 ns true true
default 0 ns true false

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
allocationTime Ticks
78301272586
arrayElements int
70
lastKnownHeapUsage ulong: bytes
220051344
object OldObject
address ulong: address
30208448536
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
294452619355
objectSize ulong: bytes
88
root OldObjectGcRoot
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
-1
lineNumber int
-1
method Method
descriptor string
(I)V
hidden boolean
true
modifiers int
1
name string
apply$mcVI$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
true
modifiers int
4112
name string
org.apache.spark.scheduler.DirectTaskResult$$Lambda/0x000000006a163c00
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
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
372753891941
allocationTime Ticks
809332564
arrayElements int
27288
lastKnownHeapUsage ulong: bytes
10342832
object OldObject
address ulong: address
30275505928
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
24588273669
objectSize ulong: bytes
27304
root OldObjectGcRoot
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
4
lineNumber int
48
method Method
descriptor string
(I)[B
hidden boolean
false
modifiers int
9
name string
newBytesFor
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
16
name string
java/lang/StringUTF16
package Package
exported boolean
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
Interpreted
truncated boolean
false
startTime long: millis
25397606233
allocationTime Ticks
686817681280
arrayElements int
32
lastKnownHeapUsage ulong: bytes
242108424
object OldObject
address ulong: address
30413501176
description string
null
referrer Reference
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[J
package Package
null
objectAge Tickspan
8940764357
objectSize ulong: bytes
272
root OldObjectGcRoot
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
7
lineNumber int
64
method Method
descriptor string
()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
io/netty/channel/epoll/EpollTcpInfo
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
Interpreted
truncated boolean
false
startTime long: millis
695758445637

ExecutionSample

profiling default startTime every chunk graal vm only

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

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

Configuration enabled period
profiling true 10 ms
default true 20 ms

Field Type Description
sampledThread Thread Thread
stackTrace StackTrace Stack Trace
state ThreadState Thread State

Examples 3
sampledThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
pool-1-thread-2
javaThreadId long
35
osName string
pool-1-thread-2
osThreadId long
4605
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
7
lineNumber int
484
method Method
descriptor string
(Ljava/lang/Object;[Ljava/lang/Object;I)V
hidden boolean
false
modifiers int
2
name string
add
type 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
type FrameType
Inlined
truncated boolean
false
startTime long: millis
2951184273
state ThreadState
STATE_RUNNABLE
sampledThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Executor task launch worker for task 0.0 in stage 49.0 (TID 190)
javaThreadId long
1707
osName string
Executor task launch worker for task 0.0 in stage 49.0 (TID 190)
osThreadId long
4212
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
127
lineNumber int
958
method Method
descriptor string
(Ljava/lang/Object;)Ljava/lang/Object;
hidden boolean
false
modifiers int
1
name string
get
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/concurrent/ConcurrentHashMap
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/util/concurrent
type FrameType
Inlined
truncated boolean
false
startTime long: millis
330667681200
state ThreadState
STATE_RUNNABLE
sampledThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Executor task launch worker for task 0.0 in stage 38.0 (TID 146)
javaThreadId long
1839
osName string
Executor task launch worker for task 0.0 in stage 38.0 (TID 146)
osThreadId long
4617
virtual boolean
false
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
624775330139
state ThreadState
STATE_RUNNABLE

NativeMethodSample

profiling default startTime every chunk 11 17 21 25 27 28 graal vm

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

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

Configuration enabled period
profiling true 20 ms
default true 20 ms

Field Type Description
sampledThread Thread Thread
stackTrace StackTrace Stack Trace
state ThreadState Thread State

Examples 3
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-8
javaThreadId long
1034
osName string
finagle/netty4-2-8
osThreadId long
3725
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
623298112739
state ThreadState
STATE_RUNNABLE
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
4574
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(Ljava/io/FileDescriptor;I)V
hidden boolean
false
modifiers int
264
name string
shutdown
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
sun/nio/ch/Net
package Package
exported boolean
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
7719039670
state ThreadState
STATE_RUNNABLE
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
886
osName string
finagle/netty4-2-1
osThreadId long
3279
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
331361087413
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();
  Atomic::inc(&count);
  if (biased) {
    Atomic::inc(&biased_count);
  }

Configuration enabled stackTrace throttle
profiling false true 10ms
default false true 500/s

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
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
4574
virtual boolean
false
failed boolean
false
samplingPeriod Tickspan
10000000
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(Ljava/io/File;)Z
hidden boolean
false
modifiers int
258
name string
delete0
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
16
name string
java/io/UnixFileSystem
package Package
exported boolean
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
Native
truncated boolean
false
startTime long: millis
1101800852
biased boolean
false
eventThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
spark-listener-group-appStatus
javaThreadId long
1661
osName string
spark-listener-group-appStatus
osThreadId long
4202
virtual boolean
false
failed boolean
false
samplingPeriod Tickspan
10000000
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
183
lineNumber int
623
method Method
descriptor string
(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
hidden boolean
false
modifiers int
2
name string
doPut
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/concurrent/ConcurrentSkipListMap
package Package
exported boolean
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
JIT compiled
truncated boolean
false
startTime long: millis
330519159607
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 0.0 in stage 38.0 (TID 146)
javaThreadId long
1839
osName string
Executor task launch worker for task 0.0 in stage 38.0 (TID 146)
osThreadId long
4617
virtual boolean
false
failed boolean
false
samplingPeriod Tickspan
10000000
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
624124772440

CPUTimeSamplesLost

experimental profiling default 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();
  Atomic::inc(&count);
  if (biased) {
    Atomic::inc(&biased_count);
  }
  if (Atomic::load(&count) % 1000 == 0) {
    log_debug(jfr)("CPU thread sampler sent %zu events, lost %d, biased %zu\n", Atomic::load(&count), Atomic::load(&_lost_samples_sum), Atomic::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;
}

Configuration enabled
profiling true
default true

Field Type Description
lostSamples int Lost Samples
eventThread Thread Thread

Examples 3
eventThread 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 38.0 (TID 147)
javaThreadId long
1841
osName string
Executor task launch worker for task 1.0 in stage 38.0 (TID 147)
osThreadId long
4620
virtual boolean
false
lostSamples int
2
startTime long: millis
625301779072
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
4574
virtual boolean
false
lostSamples int
5
startTime long: millis
10911493906
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 49.0 (TID 193)
javaThreadId long
1705
osName string
Executor task launch worker for task 3.0 in stage 49.0 (TID 193)
osThreadId long
4209
virtual boolean
false
lostSamples int
2
startTime long: millis
331416158807

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:

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

Configuration enabled stackTrace threshold
profiling false false 0 ms
default false false 0 ms

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

Configuration enabled stackTrace threshold
profiling false false 0 ms
default false false 0 ms

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

Configuration enabled
profiling false
default false

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

Configuration enabled
profiling false
default false

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
  set_anchor(_thread, rs.sp());
  log_frames(_thread);

Configuration enabled
profiling false
default false

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

Configuration enabled
profiling false
default false

Field Type Description
id ulong Continuation ID

ReservedStackActivation

profiling default 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,

Configuration enabled stackTrace
profiling true true
default true true

Field Type Description
method Method Java Method

SafepointBegin

profiling default startTime duration eventThread graal vm only

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

  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().
  Threads_lock->lock();

  assert( _state == _not_synchronized, "trying to safepoint synchronize with wrong state");

  int nof_threads = Threads::number_of_threads();

Configuration enabled threshold
profiling true 0 ms
default true 10 ms

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
jniCriticalThreadCount int
0
safepointId ulong
47
startTime long: millis
1231399911
totalThreadCount int
26
jniCriticalThreadCount int
0
safepointId ulong
1667
startTime long: millis
338891419922
totalThreadCount int
300
jniCriticalThreadCount int
0
safepointId ulong
499
startTime long: millis
629637632059
totalThreadCount int
300

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.
  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
  // Mark all threads

Configuration enabled threshold
profiling false 0 ms
default false 10 ms

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
initialThreadCount int
1
iterations int
3
runningThreadCount int
0
safepointId ulong
516
startTime long: millis
641992557750
initialThreadCount int
0
iterations int
1
runningThreadCount int
0
safepointId ulong
84
startTime long: millis
1604745277
initialThreadCount int
1
iterations int
507
runningThreadCount int
0
safepointId ulong
1659
startTime long: millis
337536415124

SafepointEnd

startTime duration eventThread graal vm only

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

  disarm_safepoint();

  Universe::heap()->safepoint_synchronize_end();

  SafepointTracing::end();

  post_safepoint_end_event(event, safepoint_id());
}

Configuration enabled threshold
profiling false 0 ms
default false 10 ms

Field Type Description
safepointId ulong Safepoint Identifier

Examples 3
safepointId ulong
1661
startTime long: millis
338259860714
safepointId ulong
69
startTime long: millis
1466312391
safepointId ulong
493
startTime long: millis
623184614612

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(address pc) {

Configuration enabled stackTrace threshold throttle
profiling false false 0 ms off
default false true 0 ms off

Field Type Description
threadState VMThreadState VM Thread State

Examples 3
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
904
method Method
descriptor string
(Ljava/lang/Object;)Lscala/Option;
hidden boolean
false
modifiers int
1
name string
get
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/concurrent/TrieMap
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/concurrent
type FrameType
Interpreted
truncated boolean
false
startTime long: millis
623343775377
threadState VMThreadState
_thread_in_Java
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
17
lineNumber int
124
method Method
descriptor string
(Ljava/lang/Object;)I
hidden boolean
false
modifiers int
9
name string
anyHash
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/Statics
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
330136220610
threadState VMThreadState
_thread_in_Java
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
67
lineNumber int
116
method Method
descriptor string
(Ljava/security/cert/PKIXParameters;)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
8
name string
sun/security/provider/certpath/PKIX$ValidatorParams
package Package
exported boolean
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/security/provider/certpath
type FrameType
Interpreted
truncated boolean
false
startTime long: millis
814506492
threadState VMThreadState
_thread_in_Java

ExecuteVMOperation

profiling default startTime duration eventThread graal vm only

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

  if (UsePerfData && os::is_thread_cpu_time_supported()) {

Configuration enabled threshold
profiling true 0 ms
default true 10 ms

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
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 2.0 in stage 49.0 (TID 192)
javaThreadId long
1709
osName string
Executor task launch worker for task 2.0 in stage 49.0 (TID 192)
osThreadId long
4214
virtual boolean
false
operation VMOperationType
G1TryInitiateConcMark
safepoint boolean
true
safepointId ulong
1659
startTime long: millis
338060195287
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
2402
virtual boolean
false
operation VMOperationType
GC_HeapInspection
safepoint boolean
true
safepointId ulong
508
startTime long: millis
637341470448
blocking boolean
true
caller 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
4574
virtual boolean
false
operation VMOperationType
G1CollectFull
safepoint boolean
true
safepointId ulong
98
startTime long: millis
1718331539

Shutdown

profiling default 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;

Configuration enabled stackTrace
profiling true true
default true true

Field Type Description
reason string Reason Reason for JVM shutdown

Examples 3
reason string
No remaining non-daemon Java threads
stackTrace StackTrace
null
startTime long: millis
372753216957
reason string
No remaining non-daemon Java threads
stackTrace StackTrace
null
startTime long: millis
25397212686
reason string
No remaining non-daemon Java threads
stackTrace StackTrace
null
startTime long: millis
695757235743

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

Configuration enabled period
profiling true 10 s
default false 10 s

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
bucketCount ulong
131072
bucketCountAverage float
5.284477
bucketCountMaximum ulong
17
bucketCountStandardDeviation float
2.3027265
bucketCountVariance float
5.302549
entryCount ulong
692647
insertionRate float
820.4153
removalRate float
11.540954
startTime long: millis
686065120705
totalFootprint ulong: bytes
75322136
bucketCount ulong
32768
bucketCountAverage float
1.1372986
bucketCountMaximum ulong
7
bucketCountStandardDeviation float
1.0597289
bucketCountVariance float
1.1230253
entryCount ulong
37267
insertionRate float
42.186695
removalRate float
41.99048
startTime long: millis
20660977536
totalFootprint ulong: bytes
2451880
bucketCount ulong
131072
bucketCountAverage float
5.2593994
bucketCountMaximum ulong
18
bucketCountStandardDeviation float
2.29658
bucketCountVariance float
5.27428
entryCount ulong
689360
insertionRate float
5208.6006
removalRate float
13.459925
startTime long: millis
362900208303
totalFootprint ulong: bytes
75037648

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

Configuration enabled period
profiling true 10 s
default false 10 s

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
bucketCount ulong
65536
bucketCountAverage float
1.810318
bucketCountMaximum ulong
13
bucketCountStandardDeviation float
1.3438128
bucketCountVariance float
1.8058329
entryCount ulong
118641
insertionRate float
18.416216
removalRate float
9.696417
startTime long: millis
352661991470
totalFootprint ulong: bytes
12918904
bucketCount ulong
65536
bucketCountAverage float
1.9351501
bucketCountMaximum ulong
12
bucketCountStandardDeviation float
1.3890462
bucketCountVariance float
1.9294493
entryCount ulong
126822
insertionRate float
302.48105
removalRate float
5.327773
startTime long: millis
686065127665
totalFootprint ulong: bytes
13734384
bucketCount ulong
65536
bucketCountAverage float
0.100234985
bucketCountMaximum ulong
3
bucketCountStandardDeviation float
0.31697375
bucketCountVariance float
0.10047235
entryCount ulong
6569
insertionRate float
24.392668
removalRate float
0.0
startTime long: millis
20677151891
totalFootprint ulong: bytes
1039848

ThreadDump

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

Configuration enabled period
profiling true 60 s
default true everyChunk

Field Type Description
result string Thread Dump

Examples 3
result string
2026-08-30 00:33:17 Full thread dump OpenJDK 64-Bit Server VM (25.0.4.1+1-LTS mixed mode, sharing): Threads class SMR info: _java_thread_list=0x00007ff291f8b6c0, length=53, elements={ 0x00007ff2cc053c00, 0x00007ff2cc1421a0, 0x00007ff2cc144020, 0x00007ff2cc145e30, 0x00007ff2cc147c70, 0x00007ff2cc149
startTime long: millis
362922484892
result string
2026-08-30 00:37:57 Full thread dump OpenJDK 64-Bit Server VM (25.0.4.1+1-LTS mixed mode, sharing): Threads class SMR info: _java_thread_list=0x00007f3ea1fec3c0, length=300, elements={ 0x00007f3ef8053be0, 0x00007f3ef80ca390, 0x00007f3ef80cbf80, 0x00007f3ef80cdfc0, 0x00007f3ef80cfdd0, 0x00007f3ef80d
startTime long: millis
644402105978
result string
2026-08-30 00:33:41 Full thread dump OpenJDK 64-Bit Server VM (25.0.4.1+1-LTS mixed mode, sharing): Threads class SMR info: _java_thread_list=0x00005629a4c7d5b0, length=25, elements={ 0x00007f52bc055900, 0x00007f52bc155cf0, 0x00007f52bc157b50, 0x00007f52bc15a020, 0x00007f52bc15c0b0, 0x00007f52bc15d
startTime long: millis
10469171411

NativeLibrary

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

Configuration enabled period
profiling true everyChunk
default true everyChunk

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
baseAddress ulong: address
139907076980736
name string
/home/runner/.cache/JNA/temp/jna1172112389594103567.tmp
startTime long: millis
627354071795
topAddress ulong: address
139907081175040
baseAddress ulong: address
140680888336384
name string
/opt/hostedtoolcache/Java_SapMachine_jdk/25.0.4-1/x64/lib/libsimdsort.so
startTime long: millis
331414257887
topAddress ulong: address
140680888602624
baseAddress ulong: address
139993425100800
name string
/opt/hostedtoolcache/Java_SapMachine_jdk/25.0.4-1/x64/lib/libattach.so
startTime long: millis
11107683692
topAddress ulong: address
139993425117184

NativeLibraryLoad

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

Configuration enabled stackTrace threshold
profiling true true 0 ms
default true true 0 ms

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
errorMessage string
null
fpuCorrectionAttempt boolean
false
fpuCorrectionSuccess boolean
false
name string
/tmp/libzstd-jni-1.5.6-713842355941933794207.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
365246268049
success boolean
true
errorMessage string
null
fpuCorrectionAttempt boolean
false
fpuCorrectionSuccess boolean
false
name string
/opt/hostedtoolcache/Java_SapMachine_jdk/25.0.4-1/x64/lib/libattach.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
332273018
success boolean
true
errorMessage string
null
fpuCorrectionAttempt boolean
false
fpuCorrectionSuccess boolean
false
name string
/tmp/libzstd-jni-1.5.6-710342601340026692177.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
685338432911
success boolean
true

NativeLibraryUnload

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

Configuration enabled stackTrace threshold
profiling true true 0 ms
default true true 0 ms

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

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

Configuration enabled period
profiling true endChunk
default true endChunk

Field Type Description
source Module Source Module
requiredModule Module Required Module

Examples 3
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:/java.smartcardio
name string
java.smartcardio
version string
25.0.4.1
startTime long: millis
625340774118
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
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
jdk.proxy3
version string
null
startTime long: millis
331414278191
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
jrt:/jdk.editpad
name string
jdk.editpad
version string
25.0.4.1
startTime long: millis
5571237849

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

Configuration enabled period
profiling true endChunk
default false endChunk

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
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
java/security/cert
startTime long: millis
5571266937
targetModule Module
null
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
jdk/internal/vm
startTime long: millis
625341212027
targetModule Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.management
name string
java.management
version string
25.0.4.1
exportedPackage Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.desktop
name string
java.desktop
version string
25.0.4.1
name string
sun/awt
startTime long: millis
331414759059
targetModule 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
jrt:/jdk.unsupported.desktop
name string
jdk.unsupported.desktop
version string
25.0.4.1

Java Application

ThreadStart

profiling default startTime eventThread stackTrace graal vm only

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

Configuration enabled stackTrace
profiling true true
default true true

Field Type Description
thread Thread New Java Thread
parentThread Thread Parent Java Thread

Examples 3
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
4574
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
2552785650
thread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Thread-38
javaThreadId long
95
osName string
Thread-38
osThreadId long
4675
virtual boolean
false
parentThread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Thread-2
javaThreadId long
55
osName string
Thread-2
osThreadId long
4503
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
2
lineNumber int
2231
method Method
descriptor string
(Ljava/lang/Thread;Ljdk/internal/vm/ThreadContainer;)V
hidden boolean
false
modifiers int
1
name string
start
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
0
name string
java/lang/System$1
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
type FrameType
Inlined
truncated boolean
false
startTime long: millis
373001538766
thread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
shutdown-hook-0
javaThreadId long
1972
osName string
shutdown-hook-0
osThreadId long
4507
virtual boolean
false
parentThread Thread
group ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
C2 CompilerThread0
javaThreadId long
14
osName string
C2 CompilerThread0
osThreadId long
2397
virtual boolean
false
stackTrace StackTrace
null
startTime long: millis
656588876352
thread Thread
group ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
C2 CompilerThread1
javaThreadId long
15
osName string
C2 CompilerThread1
osThreadId long
4828
virtual boolean
false

ThreadEnd

profiling default startTime eventThread graal vm only

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

#if INCLUDE_CDS
  ClassListWriter::write_resolved_constants();

  if (CDSConfig::is_dumping_preimage_static_archive()) {
    MetaspaceShared::preload_and_dump(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();

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

Configuration enabled
profiling true
default true

Field Type Description
thread Thread Java Thread

Examples 3
startTime long: millis
1042838878
thread Thread
group ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Secondary finalizer
javaThreadId long
57
osName string
Secondary finalizer
osThreadId long
4637
virtual boolean
false
startTime long: millis
351779451793
thread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
block-manager-storage-async-thread-pool-18
javaThreadId long
1743
osName string
block-manager-storage-async-thread-pool-18
osThreadId long
4248
virtual boolean
false
startTime long: millis
664204751448
thread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
driver-heartbeater
javaThreadId long
1830
osName string
driver-heartbeater
osThreadId long
4605
virtual boolean
false

ThreadPark

profiling default startTime duration eventThread stackTrace graal vm only

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_SCOPED(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 Atomic::cmpxchg(addr, e, x) == e;
} UNSAFE_END

UNSAFE_ENTRY_SCOPED(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 Atomic::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 {

Configuration enabled stackTrace threshold
profiling true true 10 ms
default true true 20 ms

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
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
1789573562
timeout long: nanos
1000000
until long: epochmillis
-9223372036854775808
address ulong: address
30367573552
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
329074513628
timeout long: nanos
59999999955
until long: epochmillis
-9223372036854775808
address ulong: address
30390571240
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
620471116353
timeout long: nanos
59999999969
until long: epochmillis
-9223372036854775808

JavaMonitorEnter

profiling default startTime duration eventThread stackTrace graal vm only

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) {
  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 = Atomic::load(&_entry_list);
      if (w != nullptr) {

Configuration enabled stackTrace threshold
profiling true true 10 ms
default true true 20 ms

Field Type Description
monitorClass Class Monitor Class
previousOwner Thread Previous Monitor Owner
address ulong: address Monitor Address

Examples 3
address ulong: address
139993340652784
monitorClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
jdk/jfr/internal/PlatformRecorder
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
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
4574
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
15
lineNumber int
495
method Method
descriptor string
()V
hidden boolean
false
modifiers int
2
name string
periodicTask
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
jdk/jfr/internal/PlatformRecorder
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
type FrameType
Interpreted
truncated boolean
false
startTime long: millis
281033369
address ulong: address
94089260665504
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
dispatcher-BlockManagerMaster
javaThreadId long
1810
osName string
dispatcher-BlockManagerMaster
osThreadId long
4587
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
625708492784
address ulong: address
94669864611776
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/scheduler/TaskSchedulerImpl
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
previousOwner Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
dispatcher-event-loop-0
javaThreadId long
1663
osName string
dispatcher-event-loop-0
osThreadId long
4165
virtual boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
932
method Method
descriptor string
(Lorg/apache/spark/scheduler/TaskSetManager;JLorg/apache/spark/scheduler/DirectTaskResult;)V
hidden boolean
false
modifiers int
33
name string
handleSuccessfulTask
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/scheduler/TaskSchedulerImpl
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
type FrameType
Interpreted
truncated boolean
false
startTime long: millis
330435536077

JavaMonitorWait

profiling default startTime duration eventThread stackTrace graal vm only

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:

      node->TState = ObjectWaiter::TS_RUN;
    }
    Thread::SpinRelease(&_wait_set_lock);
  }

  // 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;
  bool was_notified = state == ObjectWaiter::TS_ENTER;
  assert(was_notified || state == ObjectWaiter::TS_RUN, "");
  node->_interrupted = !was_notified && current->is_interrupted(false);

  // Post JFR and JVMTI events.
  EventJavaMonitorWait wait_event;
  if (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;

  if (!was_notified) {
    bool acquired = vthread_monitor_enter(current, node);
    if (acquired) {
      guarantee(_recursions == 0, "invariant");

Configuration enabled stackTrace threshold
profiling true true 10 ms
default true true 20 ms

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
address ulong: address
140679295671408
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
333337204688
timedOut boolean
true
timeout long: millis
100
address ulong: address
139993342314720
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
3116174983
timedOut boolean
true
timeout long: millis
1
address ulong: address
94088977031328
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
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 38.0 (TID 147)
javaThreadId long
1841
osName string
Executor task launch worker for task 1.0 in stage 38.0 (TID 147)
osThreadId long
4620
virtual boolean
false
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
624616006077
timedOut boolean
false
timeout long: millis
0

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:

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

    if (!iterator->is_vthread()) {
      iterator->wait_reenter_begin(this);
    }
  }
  Thread::SpinRelease(&_wait_set_lock);
  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);
  }

Configuration enabled stackTrace threshold
profiling false true 0 ms
default false true 0 ms

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
address ulong: address
94089003267536
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
notifiedCount uint
1
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
642320688071
address ulong: address
140679295671408
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
notifiedCount uint
1
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
332857497500
address ulong: address
139993356814320
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
5199302286

JavaMonitorInflate

startTime duration eventThread stackTrace graal vm only

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:

  if (!ret_code) {
    log_info(monitorinflation)("Async Deflation DID NOT happen after %d checks.", N_CHECKS);
  }

  return ret_code;
}

jlong ObjectSynchronizer::time_since_last_async_deflation_ms() {
  return (os::javaTimeNanos() - last_async_deflation_time_ns()) / (NANOUNITS / MILLIUNITS);
}

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

src/hotspot/share/runtime/synchronizer.cpp:

  assert(thread == Thread::current() || thread->is_obj_deopt_suspend(), "must be");
  assert(LockingMode != LM_LIGHTWEIGHT, "LM_LIGHTWEIGHT cannot use inflate_for");
  return inflate_impl(thread, obj, cause);
}

ObjectMonitor* ObjectSynchronizer::inflate_impl(JavaThread* locking_thread, oop object, const InflateCause cause) {
  // The JavaThread* locking_thread requires that the locking_thread == Thread::current() or
  // is suspended throughout the call by some other mechanism.
  // 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 correctness that the
  // thread is set when called from ObjectSynchronizer::enter from the owning thread,
  // ObjectSynchronizer::enter_for from any thread, or ObjectSynchronizer::exit.
  assert(LockingMode != LM_LIGHTWEIGHT, "LM_LIGHTWEIGHT cannot use inflate_impl");
  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.
    // *  stack-locked - Coerce it to inflated from stack-locked.
    // *  INFLATING    - Busy wait for conversion from stack-locked to
    //                   inflated.

src/hotspot/share/runtime/lightweightSynchronizer.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* LightweightSynchronizer::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, current, &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/lightweightSynchronizer.cpp:

ObjectMonitor* LightweightSynchronizer::inflate_into_object_header(oop object, ObjectSynchronizer::InflateCause cause, JavaThread* locking_thread, Thread* current) {

  // The JavaThread* locking_thread parameter is only used by LM_LIGHTWEIGHT and requires
  // that the locking_thread == Thread::current() or is suspended throughout the call by
  // some other mechanism.
  // Even with LM_LIGHTWEIGHT 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 LM_LIGHTWEIGHT 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     - Just return if using stack-locking.
    //                   If using fast-locking and 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.

Configuration enabled stackTrace threshold
profiling false true 0 ms
default false true 0 ms

Field Type Description
monitorClass Class Monitor Class
address ulong: address Monitor Address
cause InflateCause Monitor Inflation Cause Cause of inflation

Examples 3
address ulong: address
32965590336
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
664246708761
address ulong: address
30209392952
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
2938575442
address ulong: address
31220350216
cause InflateCause
VM Internal
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
6
lineNumber int
717
method Method
descriptor string
()Ljava/util/zip/Inflater;
hidden boolean
false
modifiers int
0
name string
getInflater
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
10
name string
java/util/zip/ZipFile$CleanableResource
package Package
exported boolean
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/zip
type FrameType
Inlined
truncated boolean
true
startTime long: millis
354885632004

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_successor(current), "invariant");
      assert(has_owner(current), "invariant");
      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.

Configuration enabled threshold
profiling false 0 ms
default false 0 ms

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
address ulong: address
0
monitorClass Class
null
startTime long: millis
661047165957
address ulong: address
0
monitorClass Class
null
startTime long: millis
360428403891
address ulong: address
0
monitorClass Class
null
startTime long: millis
603667645953

VirtualThreadPinned

profiling default startTime duration eventThread stackTrace 19 21 25 27 28 graal vm

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/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);
    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.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 JavaThread: public Thread {
  friend class VMStructs;
  friend class JVMCIVMStructs;
  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:
  LockStack _lock_stack;
  OMCache _om_cache;

public:

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",

Configuration enabled stackTrace threshold
profiling true true 20 ms
default true true 20 ms

Field Type Description
blockingOperation string 24+ Blocking Operation
pinnedReason string 24+ Pinned Reason
carrierThread Thread 24+ Carrier Thread

ObjectAllocationInNewTLAB

startTime eventThread stackTrace graal vm only

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

Configuration enabled stackTrace
profiling false true
default false true

Field Type Description
objectClass Class Object Class Class of allocated object
allocationSize ulong: bytes Allocation Size
tlabSize ulong: bytes TLAB Size

Examples 3
allocationSize ulong: bytes
16
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
JIT compiled
truncated boolean
false
startTime long: millis
329686045135
tlabSize ulong: bytes
22856
allocationSize ulong: bytes
80
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
623571490061
tlabSize ulong: bytes
2765448
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
458868069
tlabSize ulong: bytes
21264

ObjectAllocationOutsideTLAB

startTime eventThread stackTrace 11 17 21 25 27 28 graal vm

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

Configuration enabled stackTrace
profiling false true
default false true

Field Type Description
objectClass Class Object Class Class of allocated object
allocationSize ulong: bytes Allocation Size

Examples 3
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
624782241418
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
445174170
allocationSize ulong: bytes
688
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
11
lineNumber int
1059
method Method
descriptor string
()[Ljava/lang/Object;
hidden boolean
false
modifiers int
1
name string
toArray
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
16
name string
java/util/HashMap$Values
package Package
exported boolean
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
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
330130344684

ObjectAllocationSample

throttle profiling default startTime eventThread stackTrace graal vm only

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/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(Thread* thread) {
  const size_t desired_tlab_size_bytes = thread->tlab().desired_size() * HeapWordSize;
  const size_t alignment_reserve_bytes = thread->tlab().alignment_reserve_in_bytes();

Configuration enabled stackTrace throttle
profiling true true 300/s
default true true 150/s

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
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
java/lang/String
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/lang
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
149
lineNumber int
3722
method Method
descriptor string
(II[C)Ljava/lang/String;
hidden boolean
false
modifiers int
2
name string
readUtf
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
JIT compiled
truncated boolean
false
startTime long: millis
330630590979
weight long: bytes
789672
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
445259901
weight long: bytes
69904
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
15
lineNumber int
3537
method Method
descriptor string
([BI)[B
hidden boolean
false
modifiers int
9
name string
copyOf
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
java/util/Arrays
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/util
type FrameType
JIT compiled
truncated boolean
true
startTime long: millis
623354589599
weight long: bytes
213064

MethodTrace

profiling default 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/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,
        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.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,
        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;

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

Configuration enabled filter stackTrace threshold
profiling true null true 0 ms
default true null true 0 ms

Field Type Description
method Method Method

MethodTiming

profiling default 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/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.VirtualThreadStartEvent.class,
        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.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.VirtualThreadStartEvent.class,
        jdk.internal.event.VirtualThreadEndEvent.class,
        jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.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;

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

Configuration enabled filter period
profiling true null endChunk
default true null endChunk

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

JavaExceptionThrow

throttle profiling default 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

Configuration enabled stackTrace throttle
profiling true true 300/s 25+
default true true 100/s 25+

Field Type Description
message string Message
thrownClass Class Class

Examples 3
message string
null
startTime long: millis
624726631003
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
message string
null
startTime long: millis
330565698413
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
message string
'java.lang.Object java.lang.invoke.DirectMethodHandle$Holder.invokeStaticInit(java.lang.Object, long, java.lang.Object)'
startTime long: millis
308368400
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

FileRead

throttle profiling default 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/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/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);

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

Configuration enabled stackTrace threshold throttle
profiling true true 1 ms 300/s 25+
default true true 1 ms 100/s 25+

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
bytesRead long: bytes
1493
endOfFile boolean
false
path string
/tmp/jar_cache1611843270483800983.tmp
startTime long: millis
623346631838
bytesRead long: bytes
1024
endOfFile boolean
false
path string
/tmp/jfr_sample9952681845271421524.tmp
startTime long: millis
1536729243
bytesRead long: bytes
8192
endOfFile boolean
false
path string
/tmp/jar_cache7325961630893982477.tmp
startTime long: millis
331193615662

SocketWrite

throttle profiling default startTime duration 11 17 21 25 27 28 graal vm

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

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

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

Configuration enabled stackTrace threshold throttle
profiling true true 1 ms 300/s 25+
default true true 1 ms 100/s 25+

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
address string
127.0.0.1
bytesWritten long: bytes
64
host string
127.0.0.1
port int
39880
startTime long: millis
1567224846
address string
127.0.0.1
bytesWritten long: bytes
64
host string
127.0.0.1
port int
43037
startTime long: millis
2923378222
address string
127.0.0.1
bytesWritten long: bytes
64
host string
127.0.0.1
port int
38010
startTime long: millis
1542978853

SocketRead

throttle profiling default startTime duration 11 17 21 25 27 28 graal vm

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

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

    /**

Configuration enabled stackTrace threshold throttle
profiling true true 1 ms 300/s 25+
default true true 1 ms 100/s 25+

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
address string
127.0.0.1
bytesRead long: bytes
64
endOfStream boolean
false
host string
127.0.0.1
port int
35043
startTime long: millis
1579926630
timeout long: millis
0
address string
127.0.0.1
bytesRead long: bytes
64
endOfStream boolean
false
host string
127.0.0.1
port int
58176
startTime long: millis
2390679329
timeout long: millis
0
address string
127.0.0.1
bytesRead long: bytes
64
endOfStream boolean
false
host string
127.0.0.1
port int
39880
startTime long: millis
1567142489
timeout long: millis
0

VirtualThreadEnd

startTime duration 19 21 25 27 28 graal vm

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

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

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

Configuration enabled
profiling false
default false

Field Type Description
javaThreadId long Thread Id

Examples 3
javaThreadId long
45
startTime long: millis
587726756
javaThreadId long
44
startTime long: millis
619822637
javaThreadId long
51
startTime long: millis
496542237

JavaErrorThrow

profiling default 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

Configuration enabled stackTrace
profiling true true
default true true

Field Type Description
message string Message
thrownClass Class Class

Examples 3
message string
Native Library /opt/hostedtoolcache/Java_SapMachine_jdk/25.0.4-1/x64/lib/libnet.so already loaded in another classloader
startTime long: millis
1043438224
thrownClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/UnsatisfiedLinkError
package Package
exported boolean
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
message string
'int io.netty.channel.epoll.Native.offsetofEpollData()'
startTime long: millis
684766630846
thrownClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/lang/UnsatisfiedLinkError
package Package
exported boolean
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
message string
'java.lang.Object java.lang.invoke.DirectMethodHandle$Holder.newInvokeSpecial(java.lang.Object, long, java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object)'
startTime long: millis
365736316064
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

FileForce

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

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

Configuration enabled stackTrace threshold
profiling true true 10 ms
default true true 20 ms

Field Type Description
path string Path Full path of the file
metaData boolean Update Metadata Whether the file metadata is updated

Examples 3
metaData boolean
true
path string
/tmp/jfr_sample13477713470374668379.tmp
startTime long: millis
4303795923
metaData boolean
true
path string
/tmp/jfr_sample3451218038982396527.tmp
startTime long: millis
4956003200
metaData boolean
true
path string
/tmp/jfr_sample9952681845271421524.tmp
startTime long: millis
2501399588

FileWrite

throttle profiling default 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/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/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;
    }

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

Configuration enabled stackTrace threshold throttle
profiling true true 1 ms 300/s 25+
default true true 1 ms 100/s 25+

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
bytesWritten long: bytes
1
path string
/tmp/jfr_agent17265025421583405949.jar
startTime long: millis
302007648
bytesWritten long: bytes
8310
path string
/tmp/jar_cache7609655321695097645.tmp
startTime long: millis
354762885461
bytesWritten long: bytes
10004
path string
/tmp/jar_cache654401752169320692.tmp
startTime long: millis
668390118022

ThreadSleep

profiling default startTime duration 11 17 21 25 27 28 graal vm

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

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

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/jdk/internal/event/ThreadSleepEvent.java:

package jdk.internal.event;

/**
 * Event recording thread sleeping.
 */

public final class ThreadSleepEvent extends Event {
    public long time;
}

Configuration enabled stackTrace threshold
profiling true true 10 ms
default true true 20 ms

Field Type Description
time long: nanos Sleep Time

Examples 3
startTime long: millis
623326565166
time long: nanos
10000000
startTime long: millis
330558039690
time long: nanos
200000000
startTime long: millis
708400643
time long: nanos
5000000

VirtualThreadStart

startTime duration 19 21 25 27 28 graal vm

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

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

    private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
        mirrorLookup.put(eventClassName, 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/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;
}

Configuration enabled stackTrace
profiling false true
default false true

Field Type Description
javaThreadId long Thread Id

Examples 3
javaThreadId long
51
startTime long: millis
458073288
javaThreadId long
40
startTime long: millis
572491318
javaThreadId long
37
startTime long: millis
549988287

Java Application Statistics

JavaMonitorStatistics

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

Configuration enabled period
profiling true everyChunk
default true everyChunk

Field Type Description
count ulong Monitors in Use Current number of in-use monitors

Examples 3
count ulong
352
startTime long: millis
16507444188
count ulong
653
startTime long: millis
643965285325
count ulong
19
startTime long: millis
362362074491

JavaThreadStatistics

profiling default startTime duration every chunk graal vm only

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

Configuration enabled period
profiling true 1000 ms
default true 1000 ms

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
accumulatedCount long
1899
activeCount long
48
daemonCount long
47
peakCount long
298
startTime long: millis
358790956761
accumulatedCount long
2070
activeCount long
72
daemonCount long
67
peakCount long
297
startTime long: millis
689182456531
accumulatedCount long
349
activeCount long
22
daemonCount long
17
peakCount long
22
startTime long: millis
15548709887

ClassLoadingStatistics

profiling default startTime duration every chunk graal vm only

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

Configuration enabled period
profiling true 1000 ms
default true 1000 ms

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
loadedClassCount long
143584
startTime long: millis
370540839251
unloadedClassCount long
8395
loadedClassCount long
132731
startTime long: millis
668246128034
unloadedClassCount long
3087
loadedClassCount long
4104
startTime long: millis
12494084260
unloadedClassCount long
262

ClassLoaderStatistics

profiling default 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;

Configuration enabled period
profiling true everyChunk
default true everyChunk

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
blockSize ulong: bytes
2912
chunkSize ulong: bytes
6144
classCount long
1
classLoader ClassLoader
name string
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
17
name string
sun/reflect/misc/MethodUtil
package Package
exported boolean
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/reflect/misc
classLoaderData ulong: address
139993355150016
hiddenBlockSize ulong: bytes
0
hiddenChunkSize ulong: bytes
0
hiddenClassCount long
0
parentClassLoader 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
startTime long: millis
21626877461
blockSize ulong: bytes
13944
chunkSize ulong: bytes
18432
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
1
name string
org/codehaus/commons/compiler/util/reflect/ByteArrayClassLoader
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/codehaus/commons/compiler/util/reflect
classLoaderData ulong: address
139906738568768
hiddenBlockSize ulong: bytes
0
hiddenChunkSize ulong: bytes
0
hiddenClassCount long
0
parentClassLoader ClassLoader
null
startTime long: millis
625340490878
blockSize ulong: bytes
1440
chunkSize ulong: bytes
6144
classCount long
1
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
1
name string
org/codehaus/commons/compiler/util/reflect/ByteArrayClassLoader
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/codehaus/commons/compiler/util/reflect
classLoaderData ulong: address
140679811771648
hiddenBlockSize ulong: bytes
0
hiddenChunkSize ulong: bytes
0
hiddenClassCount long
0
parentClassLoader ClassLoader
null
startTime long: millis
331411822358

ThreadAllocationStatistics

profiling default startTime every chunk graal vm only

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<jlong> 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:
 *

Configuration enabled period
profiling true everyChunk
default true everyChunk

Field Type Description
allocated ulong: bytes Allocated Approximate number of bytes allocated since thread start
thread Thread Thread

Examples 3
allocated ulong: bytes
7101544
startTime long: millis
330135391698
thread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
RxComputationThreadPool-2
javaThreadId long
803
osName string
RxComputationThreadPool-2
osThreadId long
3159
virtual boolean
false
allocated ulong: bytes
0
startTime long: millis
271005669
thread Thread
group ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
JFR Recorder Thread
javaThreadId long
22
osName string
JFR Recorder Thread
osThreadId long
4592
virtual boolean
false
allocated ulong: bytes
1535896
startTime long: millis
623778377225
thread Thread
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
task-result-getter-2
javaThreadId long
1845
osName string
task-result-getter-2
osThreadId long
4624
virtual boolean
false

FinalizerStatistics

profiling default 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:

Configuration enabled period
profiling true endChunk
default true endChunk

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
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
629921878695
totalFinalizersRun ulong
0
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$HeapArena
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
333553404132
totalFinalizersRun ulong
0
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
577776800606
totalFinalizersRun ulong
0

DeprecatedInvocation

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

Configuration enabled level stackTrace
profiling true forRemoval true
default true forRemoval true

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
forRemoval boolean
true
invocationTime Ticks
613096350991
method Method
descriptor string
()Ljava/lang/SecurityManager;
hidden boolean
false
modifiers int
9
name string
getSecurityManager
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
80
lineNumber int
122
method Method
descriptor string
(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/Class;Ljava/lang/ClassLoader;Z)Ljava/lang/Iterable;
hidden boolean
false
modifiers int
8
name string
callServiceLoader
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/logging/log4j/util/ServiceLoaderUtil
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/logging/log4j/util
type FrameType
Interpreted
truncated boolean
true
startTime long: millis
627345200142
forRemoval boolean
true
invocationTime Ticks
1042574964
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
25417344436
forRemoval boolean
true
invocationTime Ticks
320360525300
method Method
descriptor string
(J)J
hidden boolean
false
modifiers int
1
name string
allocateMemory
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
573
lineNumber int
187
method Method
descriptor string
()Ljava/lang/Object;
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
8
name string
io/netty/util/internal/PlatformDependent0$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
io/netty/util/internal
type FrameType
Interpreted
truncated boolean
true
startTime long: millis
331681296777

ExceptionStatistics

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

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

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

Configuration enabled period
profiling true 1000 ms
default true 1000 ms

Field Type Description
throwables long Exceptions Created

Examples 3
startTime long: millis
624028505350
throwables long
2353412
startTime long: millis
4355092921
throwables long
338
startTime long: millis
352610658297
throwables long
2357658

DirectBufferStatistics

profiling default 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.ProcessStartEvent.class,
        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,
        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;
}

Configuration enabled period
profiling true 5 s
default true 5 s

Examples 3
startTime long: millis
362840545241
startTime long: millis
5363881151
startTime long: millis
680529567441

Java Development Kit

VirtualThreadSubmitFailed

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

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

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

Configuration enabled stackTrace
profiling true true
default true true

Field Type Description
javaThreadId long Thread Id
exceptionMessage string Exception Message

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

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

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

Configuration enabled stackTrace
profiling false true
default false true

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
certificateId ulong: certificateId
2389201834
certificatePosition int
2
startTime long: millis
848565061
validationCounter long
1
certificateId ulong: certificateId
1917811103
certificatePosition int
3
startTime long: millis
1028737918
validationCounter long
1
certificateId ulong: certificateId
683561703
certificatePosition int
1
startTime long: millis
1005970646
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/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/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/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();

Configuration enabled stackTrace
profiling false true
default false true

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
arrayLength int
-1
bytesRead long
13758
depth long
12
exceptionMessage string
null
exceptionType Class
null
filterConfigured boolean
false
filterStatus string
null
objectReferences long
192
startTime long: millis
623185521086
type Class
null
arrayLength int
-1
bytesRead long
111897
depth long
6
exceptionMessage string
null
exceptionType Class
null
filterConfigured boolean
false
filterStatus string
null
objectReferences long
2617
startTime long: millis
329679246019
type Class
null
arrayLength int
-1
bytesRead long
45
depth long
1
exceptionMessage string
null
exceptionType Class
null
filterConfigured boolean
false
filterStatus string
null
objectReferences long
1
startTime long: millis
912862784
type 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

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

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

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

Configuration enabled stackTrace
profiling false true
default false true

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
algorithm string
SHA256withRSA
certificateId ulong: certificateId
3268325709
issuer string
CN=Starfield Root Certificate Authority - G2, O="Starfield Technologies, Inc.", L=Scottsdale, ST=Arizona, C=US
keyLength int
2048
keyType string
RSA
serialNumber string
00
startTime long: millis
620424543
subject string
CN=Starfield Root Certificate Authority - G2, O="Starfield Technologies, Inc.", L=Scottsdale, ST=Arizona, C=US
validFrom long: epochmillis
1251763200000
validUntil long: epochmillis
2145916799000
algorithm string
SHA256withRSA
certificateId ulong: certificateId
3055636602
issuer string
CN=LuxTrust Global Root 2, O=LuxTrust S.A., C=LU
keyLength int
4096
keyType string
RSA
serialNumber string
0a:7e:a6:df:4b:44:9e:da:6a:24:85:9e:e6:b8:15:d3:16:7f:bb:b1
startTime long: millis
736706690
subject string
CN=LuxTrust Global Root 2, O=LuxTrust S.A., C=LU
validFrom long: epochmillis
1425561717000
validUntil long: epochmillis
2056713717000
algorithm string
SHA1withRSA
certificateId ulong: certificateId
2884286942
issuer string
CN=DigiCert High Assurance EV Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
keyLength int
2048
keyType string
RSA
serialNumber string
02:ac:5c:26:6a:0b:40:9b:8f:0b:79:f2:ae:46:25:77
startTime long: millis
700080053
subject string
CN=DigiCert High Assurance EV Root CA, OU=www.digicert.com, O=DigiCert Inc, C=US
validFrom long: epochmillis
1163116800000
validUntil long: epochmillis
1952035200000

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

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

Configuration enabled stackTrace
profiling false true
default false true

Field Type Description
type string Type of Service
algorithm string Algorithm Name
provider string Security Provider

Examples 3
algorithm string
MD5
provider string
SUN
startTime long: millis
363673066785
type string
MessageDigest
algorithm string
EC
provider string
SunEC
startTime long: millis
548084215
type string
AlgorithmParameters
algorithm string
MD5
provider string
SUN
startTime long: millis
683184311351
type string
MessageDigest

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

Configuration enabled
profiling true
default false

Field Type Description
misdeclaredClass Class Misdeclared Class
message string Message

Examples 3
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
1062308036
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
1269434735
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
1317691997

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

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

Configuration enabled stackTrace
profiling false true
default false true

Field Type Description
key string Key
value string Value

Examples 3
key string
jdk.disabled.namedCurves
startTime long: millis
1131275878
value string
secp112r1
key string
jdk.disabled.namedCurves
startTime long: millis
941932978
value string
secp112r1
key string
jdk.disabled.namedCurves
startTime long: millis
1105249103
value string
secp112r1

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

    private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {

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;

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

Configuration enabled stackTrace
profiling false true
default false true

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
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
1044918963
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
876234473
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
1070838992

InitialSecurityProperty

profiling default 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.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,
        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;
}

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
key string Key
value string Value

Examples 3
key string
security.provider.12
startTime long: millis
331872834661
value string
SunPKCS11
key string
jdk.tls.keyLimits
startTime long: millis
633589936575
value string
AES/GCM/NoPadding KeyUpdate 2^37, ChaCha20-Poly1305 KeyUpdate 2^37
key string
security.provider.11
startTime long: millis
284392560
value string
JdkSASL

Operating System

OSInformation

profiling default startTime duration end of every chunk graal vm only

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:

  event.set_jvmVersion(VM_Version::internal_vm_info_string());
  event.set_javaArguments(Arguments::java_command());
  event.set_jvmArguments(Arguments::jvm_args());
  event.set_jvmFlags(Arguments::jvm_flags());
  event.set_jvmStartTime(Management::vm_init_done_time());
  event.set_pid(os::current_process_id());
  event.commit();
 }

TRACE_REQUEST_FUNC(OSInformation) {
  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) {

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
osVersion string OS Version

Examples 3
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
662199890052
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
341036634703
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
11196458831

VirtualizationInformation

profiling default 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:

  event.commit();
 }

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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
name string Name

Examples 3
name string
Hyper-V virtualization
startTime long: millis
11196459774
name string
Hyper-V virtualization
startTime long: millis
342492785230
name string
Hyper-V virtualization
startTime long: millis
682240366383

InitialEnvironmentVariable

profiling default startTime end of every chunk graal vm only

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

  } else if (vrt == PowerFullPartitionMode) {
    return "Power full partition";
  }

  return "No virtualization detected";
}

int JfrOSInterface::generate_initial_environment_variable_events() {
  if (os::get_environ() == nullptr) {
    return OS_ERR;
  }

  if (EventInitialEnvironmentVariable::is_enabled()) {
    // One time stamp for all events, so they can be grouped together
    JfrTicks time_stamp = JfrTicks::now();
    for (char** p = os::get_environ(); *p != nullptr; p++) {
      char* variable = *p;
      char* equal_sign = strchr(variable, '=');
      if (equal_sign != nullptr) {
        // Extract key/value
        ResourceMark rm;
        ptrdiff_t key_length = equal_sign - variable;
        char* key = NEW_RESOURCE_ARRAY(char, key_length + 1);
        char* value = equal_sign + 1;
        strncpy(key, variable, key_length);
        key[key_length] = '\0';
        EventInitialEnvironmentVariable event(UNTIMED);
        event.set_starttime(time_stamp);
        event.set_endtime(time_stamp);
        event.set_key(key);
        event.set_value(value);
        event.commit();
      }
    }
  }
  return OS_OK;
}

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
key string Key
value string Value

Examples 3
key string
ANDROID_NDK_ROOT
startTime long: millis
270699792
value string
/usr/local/lib/android/sdk/ndk/27.3.13750724
key string
INVOCATION_ID
startTime long: millis
623778356674
value string
b5db30e1cf7c45c1bbf60c3e7a600816
key string
GITHUB_EVENT_NAME
startTime long: millis
330135371774
value string
schedule

SystemProcess

profiling default 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:

    while (processes != nullptr) {
      SystemProcess* tmp = processes;
      const char* info = processes->command_line();
      if (info == nullptr) {
         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;
    }
  }
}

Configuration enabled period
profiling true endChunk
default true endChunk

Field Type Description
pid string Process Identifier
commandLine string Command Line

Examples 3
commandLine string
jbd2/nvme0n1p16-8
pid string
386
startTime long: millis
5552580465
commandLine string
kworker/R-kthrotld
pid string
74
startTime long: millis
23681006477
commandLine string
(sd-pam)
pid string
1154
startTime long: millis
19131207485

CPUInformation

profiling default 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

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
cpu string Type
description string Description
sockets uint Sockets
cores uint Cores
hwThreads uint Hardware Threads

Examples 3
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: 0x00100800, ecx: 0xfeda3203, edx: 0x178bfbff Ext. features: eax: 0x00a10f
hwThreads uint
4
sockets uint
1
startTime long: millis
672732038875
cores uint
2
cpu string
Intel (null) (HT) SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 Core Intel64
description string
Brand: Intel(R) Xeon(R) 6973P-C, Vendor: GenuineIntel Family: <unknown> (0x6), Model: <unknown> (0xad), Stepping: 0x1 Ext. family: 0x0, Ext. model: 0xa, Type: 0x0, Signature: 0x000a06d1 Features: ebx: 0x03040800, ecx: 0xfffa3223, edx: 0x1f8bfbff Ext. features: eax: 0x00000000, ebx: 0x00000000, ecx:
hwThreads uint
4
sockets uint
1
startTime long: millis
16507522601
cores uint
2
cpu string
Intel (null) (HT) SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 Core Intel64
description string
Brand: Intel(R) Xeon(R) 6973P-C, Vendor: GenuineIntel Family: <unknown> (0x6), Model: <unknown> (0xad), Stepping: 0x1 Ext. family: 0x0, Ext. model: 0xa, Type: 0x0, Signature: 0x000a06d1 Features: ebx: 0x03040800, ecx: 0xfffa3223, edx: 0x1f8bfbff Ext. features: eax: 0x00000000, ebx: 0x00000000, ecx:
hwThreads uint
4
sockets uint
1
startTime long: millis
351345278874

CPUTimeStampCounter

profiling default 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;

Configuration enabled period
profiling true beginChunk
default true beginChunk

Field Type Description
fastTimeEnabled boolean Fast Time
fastTimeAutoEnabled boolean Trusted Platform
osFrequency long: hertz OS Frequency
fastTimeFrequency long: hertz Fast Time Frequency

Examples 3
fastTimeAutoEnabled boolean
true
fastTimeEnabled boolean
false
fastTimeFrequency long: hertz
1000000000
osFrequency long: hertz
1000000000
startTime long: millis
11196500478
fastTimeAutoEnabled boolean
true
fastTimeEnabled boolean
false
fastTimeFrequency long: hertz
1000000000
osFrequency long: hertz
1000000000
startTime long: millis
652167513753
fastTimeAutoEnabled boolean
true
fastTimeEnabled boolean
false
fastTimeFrequency long: hertz
1000000000
osFrequency long: hertz
1000000000
startTime long: millis
331693890012

CPULoad

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

Configuration enabled period
profiling true 1000 ms
default true 1000 ms

Field Type Description
jvmUser float: percentage JVM User
jvmSystem float: percentage JVM System
machineTotal float: percentage Machine Total

Examples 3
jvmSystem float: percentage
0.032911394
jvmUser float: percentage
0.35949367
machineTotal float: percentage
0.39240506
startTime long: millis
15548707309
jvmSystem float: percentage
0.010182043
jvmUser float: percentage
0.57050294
machineTotal float: percentage
0.58068496
startTime long: millis
652414380501
jvmSystem float: percentage
0.023004059
jvmUser float: percentage
0.67658997
machineTotal float: percentage
0.699594
startTime long: millis
348468336230

ThreadCPULoad

profiling default startTime duration eventThread every chunk graal vm only

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

Configuration enabled period
profiling true 10 s
default true 10 s

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
startTime long: millis
20660061346
system float: percentage
7.1067225E-5
user float: percentage
0.0014716256
startTime long: millis
644279674827
system float: percentage
1.0927284E-5
user float: percentage
0.0
startTime long: millis
332986939716
system float: percentage
0.23778833
user float: percentage
0.0

ThreadContextSwitchRate

profiling default 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()) {                                \

Configuration enabled period
profiling true 10 s
default true 10 s

Field Type Description
switchRate float: hertz Switch Rate Number of context switches per second

Examples 3
startTime long: millis
685936359820
switchRate float: hertz
3532.9287
startTime long: millis
20660150845
switchRate float: hertz
16732.732
startTime long: millis
338264127320
switchRate float: hertz
12163.573

NetworkUtilization

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

Configuration enabled period
profiling true 5 s
default true 5 s

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
networkInterface NetworkInterfaceName
eth0
readRate long: bits-per-second
14312
startTime long: millis
15548887769
writeRate long: bits-per-second
13872
networkInterface NetworkInterfaceName
eth0
readRate long: bits-per-second
3752
startTime long: millis
675063386435
writeRate long: bits-per-second
5384
networkInterface NetworkInterfaceName
eth0
readRate long: bits-per-second
5472
startTime long: millis
357788900563
writeRate long: bits-per-second
8032

PhysicalMemory

profiling default startTime duration every chunk graal vm only

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;

Configuration enabled period
profiling true everyChunk
default true everyChunk

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
startTime long: millis
640709863459
totalSize ulong: bytes
16766414848
usedSize ulong: bytes
6607986688
startTime long: millis
21626945547
totalSize ulong: bytes
16765374464
usedSize ulong: bytes
1192239104
startTime long: millis
366304056529
totalSize ulong: bytes
16765374464
usedSize ulong: bytes
3769409536

SwapSpace

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

Configuration enabled period
profiling true everyChunk
default true everyChunk

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
freeSize long: bytes
3221221376
startTime long: millis
357144248030
totalSize long: bytes
3221221376
freeSize long: bytes
3221221376
startTime long: millis
21676631231
totalSize long: bytes
3221221376
freeSize long: bytes
3221221376
startTime long: millis
623778462742
totalSize long: bytes
3221221376

ProcessStart

profiling default 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/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");
            }

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

Configuration enabled stackTrace
profiling true true
default true true

Field Type Description
pid long Process Id
directory string Directory
command string Command

Examples 3
command string
getconf PAGESIZE
directory string
.
pid long
4830
startTime long: millis
633589189142
command string
rm -rf /home/runner/work/jfrevents/jfrevents/harness-002715-12732368013055336491/apache-spark/gauss-mix/spark-d3d587b8-2dfb-4b4c-bf5d-22da4654fbc9/userFiles-f4487a35-3121-42cd-bcef-f28166c287b8
directory string
null
pid long
4447
startTime long: millis
351795809050
command string
java -version
directory string
null
pid long
4616
startTime long: millis
920195451

ContainerMemoryUsage

profiling default startTime duration stackTrace 17 21 25 27 28 graal vm

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

    private static void emitContainerIOUsage() {
        if (containerMetrics != null) {
            ContainerIOUsageEvent event = new ContainerIOUsageEvent();

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

Configuration enabled period
profiling true 30 s
default true 30 s

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

ContainerCPUThrottling

profiling default startTime duration stackTrace 17 21 25 27 28 graal vm

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

Configuration enabled period
profiling true 30 s
default true 30 s

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

ContainerIOUsage

profiling default startTime duration stackTrace 17 21 25 27 28 graal vm

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:

    private static void emitContainerMemoryUsage() {
        if (containerMetrics != null) {
            ContainerMemoryUsageEvent event = new ContainerMemoryUsageEvent();

            event.memoryFailCount = containerMetrics.getMemoryFailCount();
            event.memoryUsage = containerMetrics.getMemoryUsage();
            event.swapMemoryUsage = containerMetrics.getMemoryAndSwapUsage();
            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;
}

Configuration enabled period
profiling true 30 s
default true 30 s

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

ContainerCPUUsage

profiling default startTime duration stackTrace 17 21 25 27 28 graal vm

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

Configuration enabled period
profiling true 30 s
default true 30 s

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

ContainerConfiguration

profiling default startTime duration stackTrace 17 21 25 27 28 graal vm

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

Configuration enabled period
profiling true beginChunk
default true beginChunk

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

Truffle Compiler

graal.compiler.truffle.CompilerStatistics

startTime duration every 1s graal vm only

Category: Truffle Compiler

Truffe Compiler Statistics

Field Type Description
compiledMethods ulong Compiled Methods Compiled Methods
bailouts ulong Bailouts Bailouts
invalidations ulong Invalidated Compilations Invalidated Compilations
compiledCodeSize ulong: bytes Compilation Resulting Size Compilation Resulting Size
totalTime long: millis Total Time Total Time
peakTime long: millis Peak Time Peak Time

graal.compiler.truffle.CompilationFailure

startTime duration graal vm only

Category: Truffle Compiler

Truffe Compilation Failures

Field Type Description
engineId long 25 until JDK 26 EngineId Truffle Engine Unique Id
id long 25 until JDK 26 Id Truffle Compilable Unique Id
source string Source Compiled Source
language string Language Guest Language
rootFunction string Root Function Root Function
permanentFailure boolean Permanent Failure Permanent Failure
failureReason string Failure Reason Failure Reason
truffleTier int 25 until JDK 26 Tier The Tier of the Truffle Compiler
stackTrace string 25 until JDK 26 Exception Stack Trace Exception Stack Trace

graal.compiler.truffle.AssumptionInvalidation

startTime duration stackTrace graal vm only

Category: Truffle Compiler

Truffle Assumption Invalidation

Field Type Description
engineId long 25 until JDK 26 EngineId Truffle Engine Unique Id
id long 25 until JDK 26 Id Truffle Compilable Unique Id
source string Source Compiled Source
language string Language Guest Language
rootFunction string Root Function Root Function
reason string Reason Invalidation Reason

graal.compiler.truffle.Deoptimization

startTime duration graal vm only

Category: Truffle Compiler

Truffle Call Target Deoptimization

Field Type Description
engineId long 25 until JDK 26 EngineId Truffle Engine Unique Id
id long 25 until JDK 26 Id Truffle Compilable Unique Id
source string Source Compiled Source
language string Language Guest Language
rootFunction string Root Function Root Function

graal.compiler.truffle.Compilation

startTime duration graal vm only

Category: Truffle Compiler

Truffe Compilation

Field Type Description
engineId long 25 until JDK 26 EngineId Truffle Engine Unique Id
id long 25 until JDK 26 Id Truffle Compilable Unique Id
source string Source Compiled Source
language string Language Guest Language
rootFunction string Root Function Root Function
success boolean Succeeded Compilation Status
compiledCodeSize uint: bytes Compiled Code Size Compiled Code Size
compiledCodeAddress long Compiled Code Address Compiled Code Address
inlinedCalls uint Inlined Calls Inlined Calls
dispatchedCalls uint Dispatched Calls Dispatched Calls
graalNodeCount uint Graal Nodes Graal Node Count
peNodeCount uint Truffle Nodes Truffle Node Count
peTime ulong Partial Evaluation Time Partial Evaluation Time in Milliseconds
truffleTier int 25 until JDK 26 Tier The Tier of the Truffle Compiler
compilationId string 25 until JDK 26 Compilation Id The VM Id of the Compilation

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

Field Type Description
bytecode string Instruction

Examples 3
invokeinterface
if_icmpne
if_icmpge

CalleeMethod

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

Missing in: graalvm_linux_native

Field Type Description
type string Class
name string Method Name
descriptor string Method Descriptor

Examples 3
descriptor string
()V
name string
releaseFence
type string
scala/runtime/Statics
descriptor string
(J)V
name string
putUncheckedLong
type string
jdk/jfr/internal/event/EventWriter
descriptor string
(Ljdk/internal/ref/Cleaner;)Z
name string
remove
type string
jdk/internal/ref/Cleaner

ChunkHeader

14+

Chunk Header

Field Type Description
payload array byte Payload

Class

Java Class

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

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

Field Type Description
type string Type

Examples 3
CodeHeap 'profiled nmethods'
CodeHeap 'profiled nmethods'
CodeHeap 'non-profiled 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

Field Type Description
phase string Phase

Examples 3
After Iter GVN
Before Macro Expansion
After iterative spilling

CompilerType

14+

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

Missing in: graalvm_linux_native

Compiler Type

Field Type Description
compiler string Compiler

Examples 3

CopyFailed

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

Field Type Description
action string Action

Examples 3
maybe_recompile
maybe_recompile
reinterpret

DeoptimizationReason

14+

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

Missing in: graalvm_linux_native

Deoptimization Reason

Field Type Description
reason string Reason

Examples 3
bimorphic_or_optimized_type_check
profile_predicate
unstable_if

FlagValueOrigin

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

Missing in: graalvm_linux_native

Flag Value Origin

Field Type Description
origin string Origin

Examples 3

FrameType

Frame type

Field Type Description
description string Description

Examples 3

G1EvacuationStatistics

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

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
allocated ulong: bytes
0
directAllocated ulong: bytes
0
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
1147
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
allocated ulong: bytes
6144
directAllocated ulong: bytes
2088896
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
136
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
2112
regionsRefilled uint
1
undoWaste ulong: bytes
0
used ulong: bytes
4176
wasted ulong: bytes
0
allocated ulong: bytes
1665296
directAllocated ulong: bytes
1209504
failureUsed ulong: bytes
0
failureWaste ulong: bytes
0
gcId uint
1154
numDirectAllocated ulong
0
numPlabsFilled ulong
0
regionEndWaste ulong: bytes
0
regionsRefilled uint
2
undoWaste ulong: bytes
0
used ulong: bytes
1510360
wasted ulong: bytes
16560

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

Field Type Description
type string Type

Examples 3
Free
Continues Humongous
Old

G1YCType

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

G1 YC Type

Field Type Description
type string Type

Examples 3

GCCause

GC Cause

Field Type Description
cause string Cause

Examples 3
G1 Evacuation Pause
Heap Inspection Initiated GC
G1 Humongous Allocation

GCName

GC Name

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

Field Type Description
updater string Updater

Examples 3
compute_new_size
compute_new_size
compute_new_size

GCWhen

GC When

Field Type Description
when string When

Examples 3

InflateCause

Inflation Cause

Field Type Description
cause string Cause

Examples 3
Monitor Wait
Monitor Wait
VM Internal

MetadataType

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

Missing in: graalvm_linux_native

Metadata Type

Field Type Description
type string Type

Examples 3

MetaspaceObjectType

Metaspace Object Type

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

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
committed ulong: bytes
958201856
reserved ulong: bytes
1879048192
used ulong: bytes
954733952
committed ulong: bytes
179306496
reserved ulong: bytes
1073741824
used ulong: bytes
177641168
committed ulong: bytes
778895360
reserved ulong: bytes
805306368
used ulong: bytes
777092784

Method

Java Method

Field Type Description
type Class Type
name Symbol Name
descriptor Symbol Descriptor
modifiers int Access Modifiers
hidden boolean Hidden

Module

Module

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

Field Type Description
name string Name

Examples 3

NarrowOopMode

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

Missing in: graalvm_linux_native

Narrow Oop Mode

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

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

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
end ulong: address
31826378752
size ulong: bytes
1658847232
start ulong: address
30167531520
used ulong: bytes
260496184
end ulong: address
34112274432
size ulong: bytes
2097152
start ulong: address
34110177280
used ulong: bytes
0
end ulong: address
34009513984
size ulong: bytes
1046478848
start ulong: address
32963035136
used ulong: bytes
1046478848

OldObject

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

Missing in: linux_ShenandoahGC, linux_ZGC

Old Object

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
address ulong: address
30208448536
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
address ulong: address
30275505928
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
address ulong: address
30413501176
description string
null
referrer Reference
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1041
name string
[J
package Package
null

OldObjectArray

Old Object Array

Field Type Description
size int Array Size Size of array
index int Index Index in the array

OldObjectField

Old Object Field

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

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

Field Type Description
system string System

OldObjectRootType

GC Root Type

Field Type Description
type string Type

Package

Package

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

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

Field Type Description
type string Type

Examples 3
Soft reference
Phantom reference
Final 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

Field Type Description
state string State

Examples 3

StackFrame

Field Type Description
method Method Java Method
lineNumber int Line Number
bytecodeIndex int Bytecode Index
type FrameType Frame Type

Examples 3
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
JIT compiled
bytecodeIndex int
149
lineNumber int
3722
method Method
descriptor string
(II[C)Ljava/lang/String;
hidden boolean
false
modifiers int
2
name string
readUtf
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
JIT compiled
bytecodeIndex int
127
lineNumber int
958
method Method
descriptor string
(Ljava/lang/Object;)Ljava/lang/Object;
hidden boolean
false
modifiers int
1
name string
get
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/concurrent/ConcurrentHashMap
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/util/concurrent
type FrameType
Inlined

StackTrace

Stacktrace

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

Field Type Description
string string String

Examples 3
resource:///shared/netty-buffer-4.1.114.Final.jar
resource:///shared/netty-buffer-4.1.114.Final.jar
resource:///unique/apache-spark/spark-core_2.13-3.5.3.jar

Thread

Thread

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

Field Type Description
parent ThreadGroup Parent
name string Name

Examples 3
null
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
name string
system
parent ThreadGroup
null

ThreadState

Java Thread State

Field Type Description
name string Name

Examples 3
STATE_RUNNABLE
STATE_RUNNABLE
STATE_RUNNABLE

VMOperationType

VM Operation Type

Field Type Description
type string Type

Examples 3
G1CollectFull
GC_HeapInspection
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

Field Type Description
state string State

Examples 3
_thread_in_Java
_thread_in_Java
_thread_in_Java

VirtualSpace

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
committedEnd ulong: address
31035752448
committedSize ulong: bytes
868220928
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
4192206848
start ulong: address
30167531520
committedEnd ulong: address
32956743680
committedSize ulong: bytes
2789212160
reservedEnd ulong: address
34359738368
reservedSize ulong: bytes
4192206848
start ulong: address
30167531520
committedEnd ulong: address
30203183104
committedSize ulong: bytes
35651584
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

Field Type Description
type string Type

Examples 2

ZStatisticsCounterType

Appearing in: linux_ZGC

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

Z Statistics Counter

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

Field Type Description
sampler string Sampler

Examples 2
Concurrent Weak Roots OopStorageSet
Mark SeqNum Reset Contention

XML Content Types

address

Annotation: jdk.jfr.MemoryAddress

Examples 3
140680888336384
140680888602624
30412898304

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

Appearing in: graalvm_linux_G1GC, linux_G1GC

Missing in: graalvm_linux_native, linux_ParallelGC, linux_SerialGC, linux_ShenandoahGC, linux_ZGC

Annotation: jdk.jfr.DataAmount(BYTES), jdk.jfr.Frequency

Examples 3
1.4726437982929375E7
3.6387230235473734E8
0.0

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
3268325709
2389201834
998794918

epochmillis

Annotation: jdk.jfr.Timestamp(MILLISECONDS_SINCE_EPOCH)

Examples 3
1788049635062
-9223372036854775808
1788049634777

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
330130349947
330448442381
329679246019

nanos

Annotation: jdk.jfr.Timespan(NANOSECONDS)

Examples 3

percentage

Annotation: jdk.jfr.Percentage

Examples 3

tickspan

Annotation: jdk.jfr.Timespan(TICKS)

Examples 3

tickstamp

Annotation: jdk.jfr.Timestamp(TICKS)

XML Types

Class

Parameter Type const Klass*
Field Type const Klass*
Java Type java.lang.Class
Examples 3

ClassLoader

Parameter Type const ClassLoaderData*
Field Type const ClassLoaderData*
Examples 3
name string
bootstrap
type Class
null
name string
bootstrap
type Class
null
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

Method

Parameter Type const Method*
Field Type const Method*
Examples 3
descriptor string
()Ljava/lang/Object;
hidden boolean
true
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
true
modifiers int
4112
name string
org.apache.spark.SparkConf$$Lambda/0x0000000072314400
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
descriptor string
([DIII)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
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
descriptor string
(II[C)Ljava/lang/String;
hidden boolean
false
modifiers int
2
name string
readUtf
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

Module

Parameter Type const ModuleEntry*
Field Type const ModuleEntry*
Examples 3
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
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1

Package

Parameter Type const PackageEntry*
Field Type const PackageEntry*
Examples 3
exported boolean
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
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
exported boolean
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/ref

StackTrace

15+

Parameter Type u8
Field Type u8
Java Type jdk.types.StackTrace
Examples 3
frames StackFrame
bytecodeIndex int
127
lineNumber int
958
method Method
descriptor string
(Ljava/lang/Object;)Ljava/lang/Object;
hidden boolean
false
modifiers int
1
name string
get
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1
name string
java/util/concurrent/ConcurrentHashMap
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
25.0.4.1
name string
java/util/concurrent
type FrameType
Inlined
truncated boolean
false
frames StackFrame
bytecodeIndex int
149
lineNumber int
3722
method Method
descriptor string
(II[C)Ljava/lang/String;
hidden boolean
false
modifiers int
2
name string
readUtf
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
JIT compiled
truncated boolean
false
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
JIT compiled
truncated boolean
false

Thread

Parameter Type u8
Field Type u8
Java Type java.lang.Thread
Examples 3
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
Executor task launch worker for task 0.0 in stage 49.0 (TID 190)
javaThreadId long
1707
osName string
Executor task launch worker for task 0.0 in stage 49.0 (TID 190)
osThreadId long
4212
virtual boolean
false
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 49.0 (TID 193)
javaThreadId long
1705
osName string
Executor task launch worker for task 3.0 in stage 49.0 (TID 193)
osThreadId long
4209
virtual boolean
false
group ThreadGroup
name string
main
parent ThreadGroup
name string
system
parent ThreadGroup
null
javaName string
spark-listener-group-appStatus
javaThreadId long
1661
osName string
spark-listener-group-appStatus
osThreadId long
4202
virtual boolean
false

Ticks

unsigned

Parameter Type const Ticks&
Field Type Ticks
Java Type long
Content Type tickstamp
Examples 3
320360525300
78301272586
439239955

Tickspan

unsigned

Parameter Type const Tickspan&
Field Type Tickspan
Java Type long
Content Type tickspan

boolean

Parameter Type bool
Field Type bool
Java Type boolean
Examples 3

byte

Parameter Type s1
Field Type s1
Java Type byte

char

Parameter Type char
Field Type char
Java Type char

double

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

Missing in: graalvm_linux_native

Parameter Type double
Field Type double
Java Type double
Examples 3

float

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

Missing in: graalvm_linux_native

Parameter Type float
Field Type float
Java Type float
Examples 3

int

Parameter Type s4
Field Type s4
Java Type int
Examples 3

long

Parameter Type s8
Field Type s8
Java Type long
Examples 3

short

Parameter Type s2
Field Type s2
Java Type short

string

Parameter Type const char*
Field Type const char*
Java Type java.lang.String
Examples 3

ubyte

unsigned

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

Missing in: graalvm_linux_native

Parameter Type u1
Field Type u1
Java Type byte
Examples 3

uint

unsigned

Parameter Type unsigned
Field Type unsigned
Java Type int
Examples 3

ulong

unsigned

Parameter Type u8
Field Type u8
Java Type long
Examples 3

ushort

unsigned

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

Missing in: graalvm_linux_native

Parameter Type u2
Field Type u2
Java Type short
Examples 3