Introduction

The following are the events for OpenJDK 18 (jdk-18.0.3+0, permalink, 15-November-2024). The events are collected from the event configuration and the source code. Visit the jfreventcollector repository for more information. This is also the place you can contribute additional event descriptions, if you don't want to contribute them directly to the OpenJDK. The site generator lives on GitHub , too.

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

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

Flight Recorder

DumpReason

default profiling startTime 11 17 21 23 24

Category: Flight Recorder

Who requested the recording and why

Code Context

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

src/hotspot/share/jfr/recorder/repository/jfrEmergencyDump.cpp:

static void post_events(bool exception_handler, Thread* thread) {
  if (exception_handler) {
    EventShutdown e;
    e.set_reason("VM Error");
    e.commit();
  } else {
    // OOM
    LeakProfiler::emit_events(max_jlong, false, false);
  }
  EventDumpReason event;
  event.set_reason(exception_handler ? "Crash" : "Out of Memory");
  event.set_recordingId(-1);
  event.commit();
}

void JfrEmergencyDump::on_vm_shutdown(bool exception_handler) {
  if (!guard_reentrancy()) {
    return;
  }
  Thread* thread = Thread::current_or_null_safe();
  if (thread == NULL) {

Configuration enabled
default true
profiling true

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

DataLoss

default profiling startTime 11 17 21 23 24

Category: Flight Recorder

Data could not be copied out from a buffer, typically because of contention

Code Context

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

src/hotspot/share/jfr/recorder/storage/jfrStorage.cpp:

      assert(!buffer->transient(), "invariant");
      assert(buffer->lease(), "invariant");
      storage_instance.control().increment_leased();
      return buffer;
    }
  }
  return acquire_transient(size, thread);
}

static void write_data_loss_event(JfrBuffer* buffer, u8 unflushed_size, Thread* thread) {
  assert(buffer != NULL, "invariant");
  assert(buffer->empty(), "invariant");
  const u8 total_data_loss = thread->jfr_thread_local()->add_data_lost(unflushed_size);
  if (EventDataLoss::is_enabled()) {
    JfrNativeEventWriter writer(buffer, thread);
    writer.begin_event_write(false);
    writer.write<u8>(EventDataLoss::eventId);
    writer.write(JfrTicks::now());
    writer.write(unflushed_size);
    writer.write(total_data_loss);
    writer.end_event_write(false);
  }
}

static void write_data_loss(BufferPtr buffer, Thread* thread) {
  assert(buffer != NULL, "invariant");
  const size_t unflushed_size = buffer->unflushed_size();
  buffer->reinitialize();

Configuration enabled
default true
profiling true

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

Flush

experimental startTime duration 14 17 21 23 24

Category: Flight Recorder

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

template <typename Functor>
static u4 invoke(Functor& f) {
  f.process();
  return f.elements();
}

template <typename Functor>
static u4 invoke_with_flush_event(Functor& f) {
  const u4 elements = invoke(f);
  EventFlush e(UNTIMED);
  e.set_starttime(f.start_time());
  e.set_endtime(f.end_time());
  e.set_flushId(flushpoint_id);
  e.set_elements(f.elements());
  e.set_size(f.size());
  e.commit();
  return elements;
}

class StackTraceRepository : public StackObj {
 private:

Configuration enabled threshold
default false 0 ns
profiling false 0 ns

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

Examples 3
elements ulong
815
flushId ulong
78
size ulong: bytes
621688
startTime long: millis
82096064417
elements ulong
3048
flushId ulong
677
size ulong: bytes
743869
startTime long: millis
891888425625
elements ulong
3751
flushId ulong
60
size ulong: bytes
617373
startTime long: millis
67216527833

ActiveRecording

default profiling startTime duration stackTrace 11 17 21 23 24

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

Category: Flight Recorder

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

@Name(Type.EVENT_NAME_PREFIX + "ActiveRecording")
@Label("Flight Recording")
@Category("Flight Recorder")
@StackTrace(false)
public final class ActiveRecordingEvent extends AbstractJDKEvent {

    // To be accessed when holding recorder lock
    public static final ActiveRecordingEvent EVENT = new ActiveRecordingEvent();

    @Label("Id")
    public long id;

    @Label("Name")
    public String name;

    @Label("Destination")
    public String destination;

    @Label("Max Age")

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

    private RepositoryChunk currentChunk;
    private boolean inShutdown;

    public PlatformRecorder() throws Exception {
        repository = Repository.getRepository();
        Logger.log(JFR_SYSTEM, INFO, "Initialized disk repository");
        repository.ensureRepository();
        jvm.createNativeJFR();
        Logger.log(JFR_SYSTEM, INFO, "Created native");
        JDKEvents.initialize();
        Logger.log(JFR_SYSTEM, INFO, "Registered JDK events");
        JDKEvents.addInstrumentation();
        startDiskMonitor();
        activeRecordingEvent = EventType.getEventType(ActiveRecordingEvent.class);
        activeSettingEvent = EventType.getEventType(ActiveSettingEvent.class);
        shutdownHook = SecuritySupport.createThreadWitNoPermissions("JFR Shutdown Hook", new ShutdownHook(this));
        SecuritySupport.setUncaughtExceptionHandler(shutdownHook, new ShutdownHook.ExceptionHandler());
        SecuritySupport.registerShutdownHook(shutdownHook);

    }


    private static Timer createTimer() {
        try {
            List<Timer> result = new CopyOnWriteArrayList<>();

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

    private void finishChunk(RepositoryChunk chunk, Instant time, PlatformRecording ignoreMe) {
        chunk.finish(time);
        for (PlatformRecording r : getRecordings()) {
            if (r != ignoreMe && r.getState() == RecordingState.RUNNING) {
                r.appendChunk(chunk);
            }
        }
        FilePurger.purge();
    }

    private void writeMetaEvents() {
        if (activeRecordingEvent.isEnabled()) {
            ActiveRecordingEvent event = ActiveRecordingEvent.EVENT;
            for (PlatformRecording r : getRecordings()) {
                if (r.getState() == RecordingState.RUNNING && r.shouldWriteMetadataEvent()) {
                    event.id = r.getId();
                    event.name = r.getName();
                    WriteableUserPath p = r.getDestination();
                    event.destination = p == null ? null : p.getRealPathText();
                    Duration d = r.getDuration();
                    event.recordingDuration = d == null ? Long.MAX_VALUE : d.toMillis();
                    Duration age = r.getMaxAge();
                    event.maxAge = age == null ? Long.MAX_VALUE : age.toMillis();
                    Long size = r.getMaxSize();

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

        X509ValidationEvent.class
    };

    private static final Class<?>[] eventClasses = {
        FileForceEvent.class,
        FileReadEvent.class,
        FileWriteEvent.class,
        SocketReadEvent.class,
        SocketWriteEvent.class,
        ExceptionThrownEvent.class,
        ExceptionStatisticsEvent.class,
        ErrorThrownEvent.class,
        ActiveSettingEvent.class,
        ActiveRecordingEvent.class,
        jdk.internal.event.DeserializationEvent.class,
        jdk.internal.event.ProcessStartEvent.class,
        jdk.internal.event.SecurityPropertyModificationEvent.class,
        jdk.internal.event.TLSHandshakeEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.class,

        DirectBufferStatisticsEvent.class
    };

    // This is a list of the classes with instrumentation code that should be applied.

Configuration enabled
default true
profiling true

Field Type Description
id long Id
name string Name Consider contributing a description to jfreventcollector.
destination string Destination Consider contributing a description to jfreventcollector.
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
[...]/code/experiments/jfreventcollector/jfr/sample_UseSerialGC.jfr
flushInterval long: millis
1000
id long
1
maxAge long: millis
9223372036854775807
maxSize long: bytes
262144000
name string
1
recordingDuration long: millis
9223372036854775807
recordingStart long: epochmillis
1702899981921
stackTrace StackTrace
null
startTime long: millis
15735901042
destination string
[...]/code/experiments/jfreventcollector/jfr/sample_UseParallelGC.jfr
flushInterval long: millis
1000
id long
1
maxAge long: millis
9223372036854775807
maxSize long: bytes
262144000
name string
1
recordingDuration long: millis
9223372036854775807
recordingStart long: epochmillis
1702899886817
stackTrace StackTrace
null
startTime long: millis
78938621167
destination string
[...]/code/experiments/jfreventcollector/jfr/sample_UseG1GC.jfr
flushInterval long: millis
1000
id long
1
maxAge long: millis
9223372036854775807
maxSize long: bytes
262144000
name string
1
recordingDuration long: millis
9223372036854775807
recordingStart long: epochmillis
1727266203142
startTime long: millis
926056296292

ActiveSetting

default profiling startTime duration stackTrace 11 17 21 23 24

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

Category: Flight Recorder

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

package jdk.jfr.events;

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

@Name(Type.EVENT_NAME_PREFIX + "ActiveSetting")
@Label("Recording Setting")
@Category("Flight Recorder")
@StackTrace(false)
public final class ActiveSettingEvent extends AbstractJDKEvent {

    public static final ThreadLocal<ActiveSettingEvent> EVENT = new ThreadLocal<ActiveSettingEvent>() {
        @Override
        protected ActiveSettingEvent initialValue() {
            return new ActiveSettingEvent();
        }
    };

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

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

    @Label("Setting Value")
    public String value;

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

    private boolean inShutdown;

    public PlatformRecorder() throws Exception {
        repository = Repository.getRepository();
        Logger.log(JFR_SYSTEM, INFO, "Initialized disk repository");
        repository.ensureRepository();
        jvm.createNativeJFR();
        Logger.log(JFR_SYSTEM, INFO, "Created native");
        JDKEvents.initialize();
        Logger.log(JFR_SYSTEM, INFO, "Registered JDK events");
        JDKEvents.addInstrumentation();
        startDiskMonitor();
        activeRecordingEvent = EventType.getEventType(ActiveRecordingEvent.class);
        activeSettingEvent = EventType.getEventType(ActiveSettingEvent.class);
        shutdownHook = SecuritySupport.createThreadWitNoPermissions("JFR Shutdown Hook", new ShutdownHook(this));
        SecuritySupport.setUncaughtExceptionHandler(shutdownHook, new ShutdownHook.ExceptionHandler());
        SecuritySupport.registerShutdownHook(shutdownHook);

    }


    private static Timer createTimer() {
        try {
            List<Timer> result = new CopyOnWriteArrayList<>();
            Thread t = SecuritySupport.createThreadWitNoPermissions("Permissionless thread", ()-> {

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

        X509CertificateEvent.class,
        X509ValidationEvent.class
    };

    private static final Class<?>[] eventClasses = {
        FileForceEvent.class,
        FileReadEvent.class,
        FileWriteEvent.class,
        SocketReadEvent.class,
        SocketWriteEvent.class,
        ExceptionThrownEvent.class,
        ExceptionStatisticsEvent.class,
        ErrorThrownEvent.class,
        ActiveSettingEvent.class,
        ActiveRecordingEvent.class,
        jdk.internal.event.DeserializationEvent.class,
        jdk.internal.event.ProcessStartEvent.class,
        jdk.internal.event.SecurityPropertyModificationEvent.class,
        jdk.internal.event.TLSHandshakeEvent.class,
        jdk.internal.event.X509CertificateEvent.class,
        jdk.internal.event.X509ValidationEvent.class,

        DirectBufferStatisticsEvent.class
    };

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

    void disable() {
        for (NamedControl nc : namedControls) {
            if (nc.control.isType(EnabledSetting.class)) {
                nc.control.setValue("false");
                return;
            }
        }
    }

    void writeActiveSettingEvent() {
        if (!type.isRegistered()) {
            return;
        }
        ActiveSettingEvent event = ActiveSettingEvent.EVENT.get();
        for (NamedControl nc : namedControls) {
            if (Utils.isSettingVisible(nc.control, type.hasEventHook()) && type.isVisible()) {
                String value = nc.control.getLastValue();
                if (value == null) {
                    value = nc.control.getDefaultValue();
                }
                event.id = type.getId();
                event.name = nc.name;
                event.value = value;
                event.commit();
            }

Configuration enabled
default true
profiling true

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

Examples 3
id long
68
name string
threshold
stackTrace StackTrace
null
startTime long: millis
416785542
value string
0 ms
id long
22
name string
enabled
stackTrace StackTrace
null
startTime long: millis
360834042
value string
true
id long
51
name string
enabled
startTime long: millis
791746993083
value string
true

JVM

JVMInformation

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine

Description of JVM and the Java application

Code Context

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

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

#if INCLUDE_SHENANDOAHGC
#include "gc/shenandoah/shenandoahJfrSupport.hpp"
#endif
/**
 *  JfrPeriodic class
 *  Implementation of declarations in
 *  xsl generated traceRequestables.hpp
 */
#define TRACE_REQUEST_FUNC(id)    void JfrPeriodicEventSet::request##id(void)

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

TRACE_REQUEST_FUNC(OSInformation) {

Configuration enabled period
default true beginChunk
profiling true beginChunk

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

Examples 3
javaArguments string
[...]/code/experiments/jfreventcollector/.cache/renaissance.jar -t 5 -r 1 all
jvmArguments string
-XX:StartFlightRecording=filename=[...]/code/experiments/jfreventcollector/jfr/sample_UseG1GC.jfr,settings=[...]/code/experiments/jfreventcollector/.cache/jfc.jfc -XX:+UseG1GC
jvmFlags string
null
jvmName string
OpenJDK 64-Bit Server VM
jvmStartTime long: epochmillis
1727266202802
jvmVersion string
OpenJDK 64-Bit Server VM (22+36) for bsd-aarch64 JRE (22+36), built on 2024-03-13T13:18:01Z by "sapmachine" with clang Apple LLVM 13.0.0 (clang-1300.0.29.3)
pid long
26284
startTime long: millis
805691566792
javaArguments string
[...]/code/experiments/jfreventcollector/.cache/renaissance.jar -t 5 -r 1 all
jvmArguments string
-XX:StartFlightRecording=filename=[...]/code/experiments/jfreventcollector/jfr/sample_UseSerialGC.jfr,settings=[...]/code/experiments/jfreventcollector/.cache/jfc.jfc -XX:+UseSerialGC
jvmFlags string
null
jvmName string
OpenJDK 64-Bit Server VM
jvmStartTime long: epochmillis
1702899981604
jvmVersion string
OpenJDK 64-Bit Server VM (21.0.1+12-LTS) for bsd-aarch64 JRE (21.0.1+12-LTS), built on 2023-10-17T00:00:00Z by "admin" with clang Apple LLVM 12.0.0 (clang-1200.0.32.29)
pid long
14273
startTime long: millis
75961227292
javaArguments string
[...]/code/experiments/jfreventcollector/.cache/renaissance.jar -t 5 -r 1 all
jvmArguments string
-XX:StartFlightRecording=filename=[...]/code/experiments/jfreventcollector/jfr/sample_UseParallelGC.jfr,settings=[...]/code/experiments/jfreventcollector/.cache/jfc.jfc -XX:+UseParallelGC
jvmFlags string
null
jvmName string
OpenJDK 64-Bit Server VM
jvmStartTime long: epochmillis
1702899886436
jvmVersion string
OpenJDK 64-Bit Server VM (21.0.1+12-LTS) for bsd-aarch64 JRE (21.0.1+12-LTS), built on 2023-10-17T00:00:00Z by "admin" with clang Apple LLVM 12.0.0 (clang-1200.0.32.29)
pid long
13981
startTime long: millis
75084757333

InitialSystemProperty

default profiling startTime end of every chunk 11 17 21 23 24

Category: Java Virtual Machine

System Property at JVM start

Code Context

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

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

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

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

TRACE_REQUEST_FUNC(ThreadAllocationStatistics) {
  ResourceMark rm;

Configuration enabled period
default true beginChunk
profiling true beginChunk

Field Type Description
key string Key
value string Value

Examples 3
key string
java.library.path
startTime long: millis
78940166042
value string
[...]/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
key string
java.vm.name
startTime long: millis
817356593708
value string
OpenJDK 64-Bit Server VM
key string
sun.boot.library.path
startTime long: millis
364247417
value string
[...]/.sdkman/candidates/java/21.0.1-tem/lib

JVM: Class Loading

ClassLoad

startTime duration eventThread stackTrace 11 17 21 23 24

Category: Java Virtual Machine / Class Loading

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

//

class BootstrapInfo;
class ClassFileStream;
class ClassLoadInfo;
class Dictionary;
template <MEMFLAGS F> class HashtableBucket;
class ResolutionErrorTable;
class SymbolPropertyTable;
class PackageEntry;
class ProtectionDomainCacheTable;
class ProtectionDomainCacheEntry;
class GCTimer;
class EventClassLoad;
class Symbol;
class TableStatistics;

class SystemDictionary : AllStatic {
  friend class BootstrapInfo;
  friend class vmClasses;
  friend class VMStructs;

 public:

  // Returns a class with a given class name and class loader.  Loads the

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

                                           Handle class_loader);
  static bool check_shared_class_super_type(InstanceKlass* klass, InstanceKlass* super,
                                            Handle class_loader,  Handle protection_domain,
                                            bool is_superclass, TRAPS);
  static bool check_shared_class_super_types(InstanceKlass* ik, Handle class_loader,
                                               Handle protection_domain, TRAPS);
  // Second part of load_shared_class
  static void load_shared_class_misc(InstanceKlass* ik, ClassLoaderData* loader_data) NOT_CDS_RETURN;
protected:
  // Used by SystemDictionaryShared

  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_lambda_proxy_class(InstanceKlass* ik,
                                                       Handle class_loader,
                                                       Handle protection_domain,
                                                       PackageEntry* pkg_entry,
                                                       TRAPS);
  static InstanceKlass* load_shared_class(InstanceKlass* ik,
                                          Handle class_loader,
                                          Handle protection_domain,
                                          const ClassFileStream *cfs,
                                          PackageEntry* pkg_entry,
                                          TRAPS);

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

  InstanceKlass* loaded_lambda =
    SystemDictionary::load_shared_lambda_proxy_class(lambda_ik, class_loader, protection_domain, pkg_entry, CHECK_NULL);

  if (loaded_lambda == NULL) {
    return NULL;
  }

  // Ensures the nest host is the same as the lambda proxy's
  // nest host recorded at dump time.
  InstanceKlass* nest_host = caller_ik->nest_host(THREAD);
  assert(nest_host == shared_nest_host, "mismatched nest host");

  EventClassLoad class_load_start_event;
  {
    MutexLocker mu_r(THREAD, Compile_lock);

    // Add to class hierarchy, and do possible deoptimizations.
    SystemDictionary::add_to_hierarchy(loaded_lambda);
    // But, do not add to dictionary.
  }
  loaded_lambda->link_class(CHECK_NULL);
  // notify jvmti
  if (JvmtiExport::should_post_class_load()) {
    JvmtiExport::post_class_load(THREAD, loaded_lambda);

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

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

void SystemDictionary::post_class_load_event(EventClassLoad* event, const InstanceKlass* k, const ClassLoaderData* init_cld) {
  assert(event != NULL, "invariant");
  assert(k != NULL, "invariant");
  assert(event->should_commit(), "invariant");
  event->set_loadedClass(k);
  event->set_definingClassLoader(k->class_loader_data());
  event->set_initiatingClassLoader(init_cld);
  event->commit();
}

// 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,
                                                                Handle protection_domain,
                                                                TRAPS) {
  // name must be in the form of "java/lang/Object" -- cannot be "Ljava/lang/Object;"
  assert(name != NULL && !Signature::is_array(name) &&
         !Signature::has_envelope(name), "invalid class name");

  EventClassLoad class_load_start_event;

  HandleMark hm(THREAD);

  // Fix for 4474172; see evaluation for more details
  class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader()));
  ClassLoaderData* loader_data = register_loader(class_loader);
  Dictionary* dictionary = loader_data->dictionary();
  unsigned int name_hash = dictionary->compute_hash(name);

  // Do lookup to see if class already exists and the protection domain
  // has the right access.

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 != NULL, "invariant");
  assert(st->need_verify(), "invariant");

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

Field Type Description
loadedClass Class Loaded Class Consider contributing a description to jfreventcollector.
definingClassLoader ClassLoader Defining Class Loader Consider contributing a description to jfreventcollector.
initiatingClassLoader ClassLoader Initiating Class Loader Consider contributing a description to jfreventcollector.

Examples 3
definingClassLoader ClassLoader
name string
bootstrap
type Class
null
initiatingClassLoader ClassLoader
name string
bootstrap
type Class
null
loadedClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1537
name string
sun/util/locale/provider/ResourceBundleBasedAdapter
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
21.0.1
name string
sun/util/locale/provider
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(Ljava/lang/String;ZLjava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Class;
hidden boolean
false
modifiers int
266
name string
forName0
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
49
name string
java/lang/Class
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
21.0.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
399339708
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
22
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
22
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
22
name string
java/net
hidden boolean
true
modifiers int
4112
name string
org.apache.spark.storage.BlockManagerMasterEndpoint$$Lambda+0x000007f80637e9b8/150836891
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
22
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/spark/storage
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
22
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
840677682500
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
32
name string
java/util/Formatter$DateTime
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
21.0.1
name string
java/util
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
24
lineNumber int
3242
method Method
descriptor string
()V
hidden boolean
false
modifiers int
2
name string
checkDateTime
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
32
name string
java/util/Formatter$FormatSpecifier
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
21.0.1
name string
java/util
type FrameType
Interpreted
truncated boolean
false
startTime long: millis
459595125

ClassDefine

startTime eventThread stackTrace 11 17 21 23 24

Category: Java Virtual Machine / Class Loading

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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:

      // during compilations.
      MutexLocker mu(THREAD, Compile_lock);
      update_dictionary(name_hash, loaded_class, class_loader);
    }

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

Field Type Description
definedClass Class Defined Class Consider contributing a description to jfreventcollector.
definingClassLoader ClassLoader Defining Class Loader Consider contributing a description to jfreventcollector.

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
22
name string
java/net
hidden boolean
false
modifiers int
1537
name string
scala/reflect/runtime/SymbolLoaders
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
22
name string
java/net
location string
null
name string
null
version string
null
name string
scala/reflect/runtime
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
22
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
22
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
843444583500
definedClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
33
name string
sun/util/cldr/CLDRLocaleProviderAdapter
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
21.0.1
name string
sun/util/cldr
definingClassLoader ClassLoader
name string
bootstrap
type Class
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
(Ljava/lang/String;ZLjava/lang/ClassLoader;Ljava/lang/Class;)Ljava/lang/Class;
hidden boolean
false
modifiers int
266
name string
forName0
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
49
name string
java/lang/Class
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
21.0.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
399586417
definedClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
33
name string
sun/util/logging/PlatformLogger
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
21.0.1
name string
sun/util/logging
definingClassLoader ClassLoader
name string
bootstrap
type Class
null
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
9
lineNumber int
56
method Method
descriptor string
()V
hidden boolean
false
modifiers int
8
name string
<clinit>
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
33
name string
jdk/internal/logger/SimpleConsoleLogger
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
21.0.1
name string
jdk/internal/logger
type FrameType
Interpreted
truncated boolean
false
startTime long: millis
454365750

ClassRedefinition

default profiling startTime 15 17 21 23 24

Category: Java Virtual Machine / Class Loading

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

  _timer_rsc_phase1.stop();
  if (log_is_enabled(Info, redefine, class, timer)) {
    _timer_rsc_phase2.start();
  }

  if (the_class->oop_map_cache() != NULL) {
    // Flush references to any obsolete methods from the oop map cache
    // so that obsolete methods are not pinned.
    the_class->oop_map_cache()->flush_obsolete_entries();
  }

  increment_class_counter(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
    log_info(redefine, class, load)

Configuration enabled
default true
profiling true

Field Type Description
redefinedClass Class Redefined Class Consider contributing a description to jfreventcollector.
classModificationCount int Class Modification Count The number of times the class has changed
redefinitionId ulong Class Redefinition Id

RedefineClasses

default profiling startTime duration eventThread stackTrace 15 17 21 23 24

Category: Java Virtual Machine / Class Loading

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

    event.set_classCount(class_count);
    event.set_redefinitionId(op.id());
    event.commit();
  }
  return error;
} /* end RetransformClasses */


// class_count - pre-checked to be greater than or equal to 0
// class_definitions - pre-checked for NULL
jvmtiError
JvmtiEnv::RedefineClasses(jint class_count, const jvmtiClassDefinition* class_definitions) {
//TODO: add locking
  EventRedefineClasses event;
  VM_RedefineClasses op(class_count, class_definitions, jvmti_class_load_kind_redefine);
  VMThread::execute(&op);
  jvmtiError error = op.check_error();
  if (error == JVMTI_ERROR_NONE) {
    event.set_classCount(class_count);
    event.set_redefinitionId(op.id());
    event.commit();
  }
  return error;
} /* end RedefineClasses */

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

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

RetransformClasses

default profiling startTime duration eventThread stackTrace 15 17 21 23 24

Category: Java Virtual Machine / Class Loading

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

      class_definitions[index].class_byte_count = (jint)reconstituter.class_file_size();
      class_definitions[index].class_bytes      = (unsigned char*)
                                                       reconstituter.class_file_bytes();
    } else {
      // it is cached, get it from the cache
      class_definitions[index].class_byte_count = ik->get_cached_class_file_len();
      class_definitions[index].class_bytes      = ik->get_cached_class_file_bytes();
    }
    class_definitions[index].klass              = jcls;
  }
  EventRetransformClasses event;
  VM_RedefineClasses op(class_count, class_definitions, jvmti_class_load_kind_retransform);
  VMThread::execute(&op);
  jvmtiError error = op.check_error();
  if (error == JVMTI_ERROR_NONE) {
    event.set_classCount(class_count);
    event.set_redefinitionId(op.id());
    event.commit();
  }
  return error;
} /* end RetransformClasses */

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

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

ClassUnload

startTime eventThread 11 17 21 23 24

Category: Java Virtual Machine / Class Loading

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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 " INTPTR_FORMAT, ik->external_name(), p2i(ik));
  }

  Events::log_class_unloading(Thread::current(), ik);

#if INCLUDE_JFR
  assert(ik != NULL, "invariant");
  EventClassUnload event;
  event.set_unloadedClass(ik);
  event.set_definingClassLoader(ik->class_loader_data());
  event.commit();
#endif
}

static void method_release_C_heap_structures(Method* m) {
  m->release_C_heap_structures();
}

// Called also by InstanceKlass::deallocate_contents, with false for release_constant_pool.

Configuration enabled
default false
profiling false

Field Type Description
unloadedClass Class Unloaded Class Consider contributing a description to jfreventcollector.
definingClassLoader ClassLoader Defining Class Loader Consider contributing a description to jfreventcollector.

Examples 3
definingClassLoader ClassLoader
name string
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
33
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
21.0.1
name string
java/net
startTime long: millis
3889543292
unloadedClass Class
classLoader ClassLoader
name string
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
33
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
21.0.1
name string
java/net
hidden boolean
false
modifiers int
48
name string
org/sparkproject/guava/collect/RegularImmutableMap
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
33
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
21.0.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/sparkproject/guava/collect
definingClassLoader ClassLoader
name string
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
33
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
21.0.1
name string
java/net
startTime long: millis
4558923167
unloadedClass Class
classLoader ClassLoader
name string
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
33
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
21.0.1
name string
java/net
hidden boolean
true
modifiers int
4144
name string
org.apache.spark.internal.config.package$$$Lambda+0x0000000800361158/1765690649
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
33
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
21.0.1
name string
java/net
location string
null
name string
null
version string
null
name string
org/apache/spark/internal/config
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
22
name string
java/net
startTime long: millis
852482485958
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
22
name string
java/net
hidden boolean
false
modifiers int
1026
name string
scala/collection/mutable/HashMap$HashMapIterator
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
22
name string
java/net
location string
null
name string
null
version string
null
name string
scala/collection/mutable

JVM: Code Cache

CodeCacheFull

default profiling startTime eventThread 11 17 21 23 24

Category: Java Virtual Machine / Code Cache

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

src/hotspot/share/code/codeCache.cpp:

    {
      ttyLocker ttyl;
      tty->print("%s", s.as_string());
    }

    if (heap->full_count() == 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.commit();

Configuration enabled
default true
profiling true

Field Type Description
codeBlobType CodeBlobType Code Heap Consider contributing a description to jfreventcollector.
startAddress ulong: address Start Address
commitedTopAddress ulong: address Commited Top
reservedTopAddress ulong: address Reserved Top
entryCount int Entries
methodCount int Methods
adaptorCount int Adaptors
unallocatedCapacity ulong: bytes Unallocated
fullCount int Full Count

CodeCacheStatistics

default profiling startTime every chunk 11 17 21 23 24

Category: Java Virtual Machine / Code Cache

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

TRACE_REQUEST_FUNC(CompilerConfiguration) {
  EventCompilerConfiguration event;
  event.set_threadCount(CICompilerCount);
  event.set_tieredCompilation(TieredCompilation);
  event.commit();
}

TRACE_REQUEST_FUNC(CodeCacheStatistics) {
  // Emit stats for all available code heaps
  for (int bt = 0; bt < CodeBlobType::NumTypes; ++bt) {
    if (CodeCache::heap_available(bt)) {
      EventCodeCacheStatistics event;
      event.set_codeBlobType((u1)bt);
      event.set_startAddress((u8)CodeCache::low_bound(bt));
      event.set_reservedTopAddress((u8)CodeCache::high_bound(bt));
      event.set_entryCount(CodeCache::blob_count(bt));
      event.set_methodCount(CodeCache::nmethod_count(bt));
      event.set_adaptorCount(CodeCache::adapter_count(bt));
      event.set_unallocatedCapacity(CodeCache::unallocated_capacity(bt));
      event.set_fullCount(CodeCache::get_codemem_full_count(bt));
      event.commit();
    }
  }

Configuration enabled period
default true everyChunk
profiling true everyChunk

Field Type Description
codeBlobType CodeBlobType Code Heap Consider contributing a description to jfreventcollector.
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
4058
fullCount int
0
methodCount int
4058
reservedTopAddress ulong: address
4604248064
startAddress ulong: address
4481351680
startTime long: millis
88125696458
unallocatedCapacity ulong: bytes
112454912
adaptorCount int
0
codeBlobType CodeBlobType
CodeHeap 'profiled nmethods'
entryCount int
2268
fullCount int
0
methodCount int
2268
reservedTopAddress ulong: address
5088952320
startAddress ulong: address
4966055936
startTime long: millis
17899843708
unallocatedCapacity ulong: bytes
116689408
adaptorCount int
2312
codeBlobType CodeBlobType
CodeHeap 'non-nmethods'
entryCount int
2408
fullCount int
0
methodCount int
0
reservedTopAddress ulong: address
4674502656
startAddress ulong: address
4668653568
startTime long: millis
798681831125
unallocatedCapacity ulong: bytes
2582016

CodeCacheConfiguration

default profiling startTime end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / Code Cache

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

      event.set_startAddress((u8)CodeCache::low_bound(bt));
      event.set_reservedTopAddress((u8)CodeCache::high_bound(bt));
      event.set_entryCount(CodeCache::blob_count(bt));
      event.set_methodCount(CodeCache::nmethod_count(bt));
      event.set_adaptorCount(CodeCache::adapter_count(bt));
      event.set_unallocatedCapacity(CodeCache::unallocated_capacity(bt));
      event.set_fullCount(CodeCache::get_codemem_full_count(bt));
      event.commit();
    }
  }
}

TRACE_REQUEST_FUNC(CodeCacheConfiguration) {
  EventCodeCacheConfiguration event;
  event.set_initialSize(InitialCodeCacheSize);
  event.set_reservedSize(ReservedCodeCacheSize);
  event.set_nonNMethodSize(NonNMethodCodeHeapSize);
  event.set_profiledSize(ProfiledCodeHeapSize);
  event.set_nonProfiledSize(NonProfiledCodeHeapSize);
  event.set_expansionSize(CodeCacheExpansionSize);
  event.set_minBlockLength(CodeCacheMinBlockLength);
  event.set_startAddress((u8)CodeCache::low_bound());
  event.set_reservedTopAddress((u8)CodeCache::high_bound());
  event.commit();
}

Configuration enabled period
default true beginChunk
profiling true beginChunk

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

Examples 3
expansionSize ulong: bytes
65536
initialSize ulong: bytes
2555904
minBlockLength ulong: bytes
6
nonNMethodSize ulong: bytes
5839564
nonProfiledSize ulong: bytes
122909338
profiledSize ulong: bytes
122909338
reservedSize ulong: bytes
251658240
reservedTopAddress ulong: address
5217714176
startAddress ulong: address
4966055936
startTime long: millis
17899844542
expansionSize ulong: bytes
65536
initialSize ulong: bytes
2555904
minBlockLength ulong: bytes
6
nonNMethodSize ulong: bytes
5839564
nonProfiledSize ulong: bytes
122909338
profiledSize ulong: bytes
122909338
reservedSize ulong: bytes
251658240
reservedTopAddress ulong: address
4733009920
startAddress ulong: address
4481351680
startTime long: millis
88125696958
expansionSize ulong: bytes
65536
initialSize ulong: bytes
2555904
minBlockLength ulong: bytes
6
nonNMethodSize ulong: bytes
5839564
nonProfiledSize ulong: bytes
122909338
profiledSize ulong: bytes
122909338
reservedSize ulong: bytes
251658240
reservedTopAddress ulong: address
4797415424
startAddress ulong: address
4545757184
startTime long: millis
910419948708

JVM: Code Sweeper

SweepCodeCache

default profiling startTime duration eventThread 11 17 until JDK 20

Category: Java Virtual Machine / Code Sweeper

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

  sweep_code_cache();

  // We are done with sweeping the code cache once.
  _total_nof_code_cache_sweeps++;

  if (_force_sweep) {
    // Notify requester that forced sweep finished
    MutexLocker mu(CodeSweeper_lock, Mutex::_no_safepoint_check_flag);
    _force_sweep = false;
    CodeSweeper_lock->notify();
  }
}

static void post_sweep_event(EventSweepCodeCache* event,
                             const Ticks& start,
                             const Ticks& end,
                             s4 traversals,
                             int swept,
                             int flushed,
                             int zombified) {
  assert(event != NULL, "invariant");
  assert(event->should_commit(), "invariant");
  event->set_starttime(start);
  event->set_endtime(end);
  event->set_sweepId(traversals);

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

  const Ticks sweep_end_counter = Ticks::now();
  const Tickspan sweep_time = sweep_end_counter - sweep_start_counter;
  {
    MutexLocker mu(NMethodSweeperStats_lock, Mutex::_no_safepoint_check_flag);
    _total_time_sweeping  += sweep_time;
    _total_time_this_sweep += sweep_time;
    _peak_sweep_fraction_time = MAX2(sweep_time, _peak_sweep_fraction_time);
    _total_flushed_size += freed_memory;
    _total_nof_methods_reclaimed += flushed_count;
    _total_nof_c2_methods_reclaimed += flushed_c2_count;
    _peak_sweep_time = MAX2(_peak_sweep_time, _total_time_this_sweep);
  }

  EventSweepCodeCache event(UNTIMED);
  if (event.should_commit()) {
    post_sweep_event(&event, sweep_start_counter, sweep_end_counter, (s4)_traversals, swept_count, flushed_count, zombified_count);
  }

#ifdef ASSERT
  if(PrintMethodFlushing) {
    tty->print_cr("### sweeper:      sweep time(" JLONG_FORMAT "): ", sweep_time.value());
  }
#endif

  Log(codecache, sweep) log;

Configuration enabled threshold
default true 100 ms
profiling true 100 ms

Field Type Description
sweepId int Sweep Identifier
sweptCount uint Methods Swept
flushedCount uint Methods Flushed
zombifiedCount uint Methods Zombified

CodeSweeperStatistics

default profiling startTime every chunk 11 17 until JDK 20

Category: Java Virtual Machine / Code Sweeper

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

  event.set_initialSize(InitialCodeCacheSize);
  event.set_reservedSize(ReservedCodeCacheSize);
  event.set_nonNMethodSize(NonNMethodCodeHeapSize);
  event.set_profiledSize(ProfiledCodeHeapSize);
  event.set_nonProfiledSize(NonProfiledCodeHeapSize);
  event.set_expansionSize(CodeCacheExpansionSize);
  event.set_minBlockLength(CodeCacheMinBlockLength);
  event.set_startAddress((u8)CodeCache::low_bound());
  event.set_reservedTopAddress((u8)CodeCache::high_bound());
  event.commit();
}

TRACE_REQUEST_FUNC(CodeSweeperStatistics) {
  EventCodeSweeperStatistics event;
  event.set_sweepCount(NMethodSweeper::traversal_count());
  event.set_methodReclaimedCount(NMethodSweeper::total_nof_methods_reclaimed());
  event.set_totalSweepTime(NMethodSweeper::total_time_sweeping());
  event.set_peakFractionTime(NMethodSweeper::peak_sweep_fraction_time());
  event.set_peakSweepTime(NMethodSweeper::peak_sweep_time());
  event.commit();
}

TRACE_REQUEST_FUNC(CodeSweeperConfiguration) {
  EventCodeSweeperConfiguration event;
  event.set_sweeperEnabled(MethodFlushing);

Configuration enabled period
default true everyChunk
profiling true everyChunk

Field Type Description
sweepCount int Sweeps
methodReclaimedCount int Methods Reclaimed
totalSweepTime Tickspan Time Spent Sweeping
peakFractionTime Tickspan Peak Time Fraction Sweep
peakSweepTime Tickspan Peak Time Full Sweep

CodeSweeperConfiguration

default profiling startTime end of every chunk 11 17 until JDK 20

Category: Java Virtual Machine / Code Sweeper

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

TRACE_REQUEST_FUNC(CodeSweeperStatistics) {
  EventCodeSweeperStatistics event;
  event.set_sweepCount(NMethodSweeper::traversal_count());
  event.set_methodReclaimedCount(NMethodSweeper::total_nof_methods_reclaimed());
  event.set_totalSweepTime(NMethodSweeper::total_time_sweeping());
  event.set_peakFractionTime(NMethodSweeper::peak_sweep_fraction_time());
  event.set_peakSweepTime(NMethodSweeper::peak_sweep_time());
  event.commit();
}

TRACE_REQUEST_FUNC(CodeSweeperConfiguration) {
  EventCodeSweeperConfiguration event;
  event.set_sweeperEnabled(MethodFlushing);
  event.set_flushingEnabled(UseCodeCacheFlushing);
  event.set_sweepThreshold(NMethodSweeper::sweep_threshold_bytes());
  event.commit();
}

TRACE_REQUEST_FUNC(ShenandoahHeapRegionInformation) {
#if INCLUDE_SHENANDOAHGC
  if (UseShenandoahGC) {
    VM_ShenandoahSendHeapRegionInfoEvents op;
    VMThread::execute(&op);

Configuration enabled period
default true beginChunk
profiling true beginChunk

Field Type Description
sweeperEnabled boolean Code Sweeper Enabled
flushingEnabled boolean Code Cache Flushing Enabled
sweepThreshold ulong: bytes 17 until JDK 20 Sweep Threshold

JVM: Compiler

Compilation

default profiling startTime duration eventThread 11 17 21 23 24

Category: Java Virtual Machine / Compiler

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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) NOT_JFR_RETURN();
  };

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

  class PhaseEvent : AllStatic {
    friend class CompilerPhaseTypeConstant;
   public:

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

        _compilation_log->log_nmethod(thread, code);
      }
    }
  } else if (AbortVMOnCompilationFailure) {
    if (compilable == ciEnv::MethodCompilable_not_at_tier) {
      fatal("Not compilable at tier %d: %s", task->comp_level(), failure_reason);
    }
    if (compilable == ciEnv::MethodCompilable_never) {
      fatal("Never compilable: %s", failure_reason);
    }
  }
}

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

int DirectivesStack::_depth = 0;

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

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

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

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

    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 == NULL) {
      ci_env.record_method_not_compilable("no compiler");
    } else if (!ci_env.failing()) {
      if (WhiteBoxAPI && WhiteBox::compilation_locked) {
        MonitorLocker locker(Compilation_lock, Mutex::_no_safepoint_check_flag);
        while (WhiteBox::compilation_locked) {
          locker.wait();
        }
      }
      comp->compile_method(&ci_env, target, osr_bci, true, directive);

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

  if (register_jfr_serializer) {
    JfrSerializer::register_serializer(TYPE_COMPILERPHASETYPE, false, new CompilerPhaseTypeConstant());
  } else if (Jfr::is_recording()) {
    // serialize new phase.
    JfrCheckpointWriter writer;
    writer.write_type(TYPE_COMPILERPHASETYPE);
    writer.write_count(1);
    writer.write_key(index);
    writer.write(phase_name);
  }
  return index;
}

void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_id, CompilerType compiler_type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) {
  event.set_compileId(compile_id);
  event.set_compiler(compiler_type);
  event.set_method(method);
  event.set_compileLevel((short)compile_level);
  event.set_succeded(success);
  event.set_isOsr(is_osr);
  event.set_codeSize(code_size);
  event.set_inlinedBytes(inlined_bytecodes);
  event.commit();
}

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

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

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

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

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

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

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

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

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

        void setCompileId(int compileId);

        void setCompileLevel(int compileLevel);

        void setSucceeded(boolean succeeded);

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

package jdk.vm.ci.hotspot;

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

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

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

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

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

Configuration enabled threshold
default true 1000 ms
profiling true 100 ms

Field Type Description
compileId uint Compilation Identifier
compiler CompilerType 14+ Compiler Consider contributing a description to jfreventcollector.
method Method Method Consider contributing a description to jfreventcollector.
compileLevel ushort Compilation Level
succeded boolean Succeeded
isOsr boolean On Stack Replacement
codeSize ulong: bytes Compiled Code Size
inlinedBytes ulong: bytes Inlined Code Size

Examples 3
codeSize ulong: bytes
247024
compileId uint
106052
compileLevel ushort
3
compiler CompilerType
c1
inlinedBytes ulong: bytes
5032
isOsr boolean
false
method Method
descriptor string
(Ldotty/tools/dotc/core/Types$AppliedType;Ldotty/tools/dotc/core/Contexts$Context;)Ldotty/tools/dotc/core/Types$Type;
hidden boolean
false
modifiers int
1
name string
tryCompiletimeConstantFold
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
22
name string
java/net
hidden boolean
false
modifiers int
17
name string
dotty/tools/dotc/core/TypeEval$
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
22
name string
java/net
location string
null
name string
null
version string
null
name string
dotty/tools/dotc/core
startTime long: millis
906375783792
succeded boolean
true
codeSize ulong: bytes
16160
compileId uint
14668
compileLevel ushort
3
compiler CompilerType
c1
inlinedBytes ulong: bytes
336
isOsr boolean
false
method Method
descriptor string
(Lcom/twitter/finagle/http/Message;Lscala/Function0;)Ljava/lang/Object;
hidden boolean
false
modifiers int
1
name string
read
type Class
classLoader ClassLoader
name string
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
33
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
21.0.1
name string
java/net
hidden boolean
false
modifiers int
49
name string
com/twitter/finagle/http/codec/context/HttpContext$
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
33
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
21.0.1
name string
java/net
location string
null
name string
null
version string
null
name string
com/twitter/finagle/http/codec/context
startTime long: millis
33429059833
succeded boolean
true
codeSize ulong: bytes
1208
compileId uint
12605
compileLevel ushort
3
compiler CompilerType
c1
inlinedBytes ulong: bytes
5
isOsr boolean
false
method Method
descriptor string
(Lio/netty/handler/codec/DefaultHeaders$HeaderEntry;)V
hidden boolean
false
modifiers int
2
name string
calculateNext
type Class
classLoader ClassLoader
name string
null
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
33
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
21.0.1
name string
java/net
hidden boolean
false
modifiers int
48
name string
io/netty/handler/codec/DefaultHeaders$ValueIterator
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
33
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
21.0.1
name string
java/net
location string
null
name string
null
version string
null
name string
io/netty/handler/codec
startTime long: millis
39822450792
succeded boolean
true

CompilerPhase

default profiling startTime duration eventThread 11 17 21 23 24

Category: Java Virtual Machine / Compiler

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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_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_VMENTRY(void, notifyCompilerPhaseEvent, (JNIEnv* env, jobject, jlong startTime, jint phase, jint compileId, jint level))
  EventCompilerPhase event;
  if (event.should_commit()) {
    CompilerEvent::PhaseEvent::post(event, startTime, phase, compileId, level);
  }
}

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

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

    Node* n = macro_node(i);
    if (n->is_Allocate()) {
      if (i != allocates) {
        Node* tmp = macro_node(allocates);
        _macro_nodes.at_put(allocates, n);
        _macro_nodes.at_put(i, tmp);
      }
      allocates++;
    }
  }
}

void Compile::print_method(CompilerPhaseType cpt, const char *name, int level) {
  EventCompilerPhase event;
  if (event.should_commit()) {
    CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, cpt, C->_compile_id, level);
  }
#ifndef PRODUCT
  if (should_print(level)) {
    _printer->print_method(name, level);
  }
#endif
  C->_latest_stage_start_counter.stamp();
}

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

void Compile::print_method(CompilerPhaseType cpt, Node* n, int level) {
  ResourceMark rm;
  stringStream ss;
  ss.print_raw(CompilerPhaseTypeHelper::to_string(cpt));
  if (n != NULL) {
    ss.print(": %d %s ", n->_idx, NodeClassNames[n->Opcode()]);
  } else {
    ss.print_raw(": NULL");
  }
  C->print_method(cpt, ss.as_string(), level);
}

void Compile::end_method(int level) {
  EventCompilerPhase event;
  if (event.should_commit()) {
    CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, PHASE_END, C->_compile_id, level);
  }

#ifndef PRODUCT
  if (_method != NULL && should_print(level)) {
    _printer->end_method();
  }
#endif
}

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

  event.set_succeded(success);
  event.set_isOsr(is_osr);
  event.set_codeSize(code_size);
  event.set_inlinedBytes(inlined_bytecodes);
  event.commit();
}

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

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

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

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

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

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

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

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

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

Configuration enabled threshold
default true 60 s
profiling true 10 s

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

CompilationFailure

profiling startTime eventThread 11 17 21 23 24

Category: Java Virtual Machine / Compiler

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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) 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:

void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_id, CompilerType compiler_type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) {
  event.set_compileId(compile_id);
  event.set_compiler(compiler_type);
  event.set_method(method);
  event.set_compileLevel((short)compile_level);
  event.set_succeded(success);
  event.set_isOsr(is_osr);
  event.set_codeSize(code_size);
  event.set_inlinedBytes(inlined_bytecodes);
  event.commit();
}

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

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

src/hotspot/share/ci/ciEnv.cpp:

// ------------------------------------------------------------------
// ciEnv::record_failure()
void ciEnv::record_failure(const char* reason) {
  if (_failure_reason == NULL) {
    // Record the first failure reason.
    _failure_reason = reason;
  }
}

void ciEnv::report_failure(const char* reason) {
  EventCompilationFailure event;
  if (event.should_commit()) {
    CompilerEvent::CompilationFailureEvent::post(event, compile_id(), reason);
  }
}

// ------------------------------------------------------------------
// ciEnv::record_method_not_compilable()
void ciEnv::record_method_not_compilable(const char* reason, bool all_tiers) {
  int new_compilable =
    all_tiers ? MethodCompilable_never : MethodCompilable_not_at_tier ;

  // Only note transitions to a worse state
  if (new_compilable > _compilable) {

Configuration enabled
default false
profiling true

Field Type Description
failureMessage string Failure Message
compileId uint Compilation Identifier

Examples 3
compileId uint
99696
failureMessage string
concurrent class loading
startTime long: millis
890105317542
compileId uint
22930
failureMessage string
concurrent class loading
startTime long: millis
74091028458
compileId uint
3706
failureMessage string
concurrent class loading
startTime long: millis
3613493750

CompilerInlining

startTime eventThread 11 17 21 23 24

Category: Java Virtual Machine / Compiler / Optimization

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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:

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

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

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

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

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

  CompileTask::print_inlining_ul(callee_method, inline_level(),
                                               caller_bci, inline_msg);
  if (C->print_inlining()) {
    C->print_inlining(callee_method, inline_level(), caller_bci, inline_msg);
    guarantee(callee_method != NULL, "would crash in CompilerEvent::InlineEvent::post");
    if (Verbose) {
      const InlineTree *top = this;
      while (top->caller_tree() != NULL) { top = top->caller_tree(); }
      //tty->print("  bcs: %d+%d  invoked: %d", top->count_inline_bcs(), callee_method->code_size(), callee_method->interpreter_invocation_count());
    }
  }
  EventCompilerInlining event;
  if (event.should_commit()) {
    CompilerEvent::InlineEvent::post(event, C->compile_id(), caller_method->get_Method(), callee_method, success, inline_msg, caller_bci);
  }
}

//------------------------------ok_to_inline-----------------------------------
bool InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms, ciCallProfile& profile,
                              bool& should_delay) {
#ifdef ASSERT
  assert(callee_method != NULL, "caller checks for optimized virtual!");
  // Make sure the incoming jvms has the same information content as me.

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

void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) {
  JfrStructCalleeMethod callee_struct;
  callee_struct.set_type(callee->klass_name()->as_utf8());
  callee_struct.set_name(callee->name()->as_utf8());
  callee_struct.set_descriptor(callee->signature()->as_utf8());
  post(event, compile_id, caller, callee_struct, success, msg, bci);
}

void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) {
  JfrStructCalleeMethod callee_struct;
  callee_struct.set_type(callee->holder()->name()->as_utf8());
  callee_struct.set_name(callee->name()->as_utf8());
  callee_struct.set_descriptor(callee->signature()->as_symbol()->as_utf8());
  post(event, compile_id, caller, callee_struct, success, msg, bci);
}

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

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

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

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

src/hotspot/share/c1/c1_GraphBuilder.cpp:

void GraphBuilder::print_inlining(ciMethod* callee, const char* msg, bool success) {
  CompileLog* log = compilation()->log();
  if (log != NULL) {
    assert(msg != NULL, "inlining msg should not be null!");
    if (success) {
      log->inline_success(msg);
    } else {
      log->inline_fail(msg);
    }
  }
  EventCompilerInlining event;
  if (event.should_commit()) {
    CompilerEvent::InlineEvent::post(event, compilation()->env()->task()->compile_id(), method()->get_Method(), callee, success, msg, bci());
  }

  CompileTask::print_inlining_ul(callee, scope()->level(), bci(), msg);

  if (!compilation()->directive()->PrintInliningOption) {
    return;
  }
  CompileTask::print_inlining_tty(callee, scope()->level(), bci(), msg);
  if (success && CIPrintMethodCodes) {

Configuration enabled
default false
profiling false

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

Examples 3
bci int
2
callee CalleeMethod
descriptor string
(FLjava/lang/Appendable;)Ljava/lang/Appendable;
name string
appendTo
type string
jdk/internal/math/FloatToDecimal
caller Method
descriptor string
(F)Ljava/lang/AbstractStringBuilder;
hidden boolean
false
modifiers int
1
name string
append
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
1056
name string
java/lang/AbstractStringBuilder
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
21.0.1
name string
java/lang
compileId uint
1421
message string
not inlineable
startTime long: millis
360781792
succeeded boolean
false
bci int
264
callee CalleeMethod
descriptor string
(B)V
name string
putUncheckedByte
type string
jdk/jfr/internal/event/EventWriter
caller Method
descriptor string
(J)V
hidden boolean
false
modifiers int
2
name string
putUncheckedLong
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
49
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
21.0.1
name string
jdk/jfr/internal/event
compileId uint
1482
message string
callee uses too much stack
startTime long: millis
421858542
succeeded boolean
false
bci int
70
callee CalleeMethod
descriptor string
()J
name string
longValue
type string
java/lang/Integer
caller 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
22
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
22
name string
java/net
location string
null
name string
null
version string
null
name string
scala/runtime
compileId uint
85847
message string
inline (hot)
startTime long: millis
794959069250
succeeded boolean
true

Deoptimization

default profiling startTime eventThread stackTrace 14 17 21 23 24

Category: Java Virtual Machine / Compiler

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

  JfrSerializer::register_serializer(TYPE_DEOPTIMIZATIONREASON, true, new DeoptReasonSerializer());
  JfrSerializer::register_serializer(TYPE_DEOPTIMIZATIONACTION, true, new DeoptActionSerializer());
}

static void post_deoptimization_event(CompiledMethod* nm,
                                      const Method* method,
                                      int trap_bci,
                                      int instruction,
                                      Deoptimization::DeoptReason reason,
                                      Deoptimization::DeoptAction action) {
  assert(nm != NULL, "invariant");
  assert(method != NULL, "invariant");
  if (EventDeoptimization::is_enabled()) {
    static bool serializers_registered = false;
    if (!serializers_registered) {
      register_serializers();
      serializers_registered = true;
    }
    EventDeoptimization event;
    event.set_compileId(nm->compile_id());
    event.set_compiler(nm->compiler_type());
    event.set_method(method);
    event.set_lineNumber(method->line_number_from_bci(trap_bci));
    event.set_bci(trap_bci);
    event.set_instruction(instruction);
    event.set_reason(reason);
    event.set_action(action);
    event.commit();
  }
}

Configuration enabled stackTrace
default true false
profiling true true

Field Type Description
compileId uint Compilation Identifier
compiler CompilerType Compiler Consider contributing a description to jfreventcollector.
method Method Method Consider contributing a description to jfreventcollector.
lineNumber int Line Number
bci int Bytecode Index
instruction Bytecode Instruction Consider contributing a description to jfreventcollector.
reason DeoptimizationReason Reason Consider contributing a description to jfreventcollector.
action DeoptimizationAction Action Consider contributing a description to jfreventcollector.

Examples 3
action DeoptimizationAction
maybe_recompile
bci int
4
compileId uint
86922
compiler CompilerType
c2
instruction Bytecode
invokeinterface
lineNumber int
203
method Method
descriptor string
()Lscala/reflect/runtime/SynchronizedSymbols;
hidden boolean
false
modifiers int
4097
name string
scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$$outer
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
22
name string
java/net
hidden boolean
false
modifiers int
17
name string
scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$7
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
22
name string
java/net
location string
null
name string
null
version string
null
name string
scala/reflect/runtime
reason DeoptimizationReason
bimorphic_or_optimized_type_check
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
4
lineNumber int
203
method Method
descriptor string
()Lscala/reflect/runtime/SynchronizedSymbols;
hidden boolean
false
modifiers int
4097
name string
scala$reflect$runtime$SynchronizedSymbols$SynchronizedSymbol$$$outer
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
22
name string
java/net
hidden boolean
false
modifiers int
17
name string
scala/reflect/runtime/SynchronizedSymbols$SynchronizedSymbol$$anon$7
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
22
name string
java/net
location string
null
name string
null
version string
null
name string
scala/reflect/runtime
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
844264354708
action DeoptimizationAction
maybe_recompile
bci int
12
compileId uint
2617
compiler CompilerType
c2
instruction Bytecode
invokevirtual
lineNumber int
3743
method Method
descriptor string
(Ljava/util/regex/Pattern$TreeInfo;)Z
hidden boolean
false
modifiers int
0
name string
study
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
32
name string
java/util/regex/Pattern$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
21.0.1
name string
java/util/regex
reason DeoptimizationReason
class_check
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
12
lineNumber int
3743
method Method
descriptor string
(Ljava/util/regex/Pattern$TreeInfo;)Z
hidden boolean
false
modifiers int
0
name string
study
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
32
name string
java/util/regex/Pattern$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
21.0.1
name string
java/util/regex
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
3661351583
action DeoptimizationAction
maybe_recompile
bci int
4
compileId uint
1368
compiler CompilerType
c2
instruction Bytecode
invokeinterface
lineNumber int
1078
method Method
descriptor string
()Ljava/lang/Object;
hidden boolean
false
modifiers int
1
name string
next
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
32
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
21.0.1
name string
java/util
reason DeoptimizationReason
class_check
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
4
lineNumber int
1078
method Method
descriptor string
()Ljava/lang/Object;
hidden boolean
false
modifiers int
1
name string
next
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
32
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
21.0.1
name string
java/util
type FrameType
JIT compiled
truncated boolean
false
startTime long: millis
541388667

CompilerStatistics

default profiling startTime every chunk 11 17 21 23 24

Category: Java Virtual Machine / Compiler

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

TRACE_REQUEST_FUNC(LoaderConstraintsTableStatistics) {
  TableStatistics statistics = SystemDictionary::loader_constraints_statistics();
  emit_table_statistics<EventLoaderConstraintsTableStatistics>(statistics);
}

TRACE_REQUEST_FUNC(ProtectionDomainCacheTableStatistics) {
  TableStatistics statistics = SystemDictionary::protection_domain_cache_statistics();
  emit_table_statistics<EventProtectionDomainCacheTableStatistics>(statistics);
}

TRACE_REQUEST_FUNC(CompilerStatistics) {
  EventCompilerStatistics event;
  event.set_compileCount(CompileBroker::get_total_compile_count());
  event.set_bailoutCount(CompileBroker::get_total_bailout_count());
  event.set_invalidatedCount(CompileBroker::get_total_invalidated_count());
  event.set_osrCompileCount(CompileBroker::get_total_osr_compile_count());
  event.set_standardCompileCount(CompileBroker::get_total_standard_compile_count());
  event.set_osrBytesCompiled(CompileBroker::get_sum_osr_bytes_compiled());
  event.set_standardBytesCompiled(CompileBroker::get_sum_standard_bytes_compiled());
  event.set_nmethodsSize(CompileBroker::get_sum_nmethod_size());
  event.set_nmethodCodeSize(CompileBroker::get_sum_nmethod_code_size());
  event.set_peakTimeSpent(CompileBroker::get_peak_compilation_time());
  event.set_totalTimeSpent(CompileBroker::get_total_compilation_time());

Configuration enabled period
default true 1000 ms
profiling true 1000 ms

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

Examples 3
bailoutCount int
11
compileCount int
109886
invalidatedCount int
0
nmethodCodeSize ulong: bytes
154938232
nmethodsSize ulong: bytes
236108696
osrBytesCompiled ulong: bytes
0
osrCompileCount int
1171
peakTimeSpent long: millis
10885
standardBytesCompiled ulong: bytes
0
standardCompileCount int
108715
startTime long: millis
920179768250
totalTimeSpent long: millis
447492
bailoutCount int
3
compileCount int
15796
invalidatedCount int
0
nmethodCodeSize ulong: bytes
19141192
nmethodsSize ulong: bytes
29722512
osrBytesCompiled ulong: bytes
0
osrCompileCount int
122
peakTimeSpent long: millis
953
standardBytesCompiled ulong: bytes
0
standardCompileCount int
15674
startTime long: millis
47488243000
totalTimeSpent long: millis
38330
bailoutCount int
2
compileCount int
19631
invalidatedCount int
0
nmethodCodeSize ulong: bytes
23379576
nmethodsSize ulong: bytes
36711528
osrBytesCompiled ulong: bytes
0
osrCompileCount int
181
peakTimeSpent long: millis
1360
standardBytesCompiled ulong: bytes
0
standardCompileCount int
19450
startTime long: millis
80386735208
totalTimeSpent long: millis
64291

CompilerConfiguration

default profiling startTime end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / Compiler

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

  event.set_invalidatedCount(CompileBroker::get_total_invalidated_count());
  event.set_osrCompileCount(CompileBroker::get_total_osr_compile_count());
  event.set_standardCompileCount(CompileBroker::get_total_standard_compile_count());
  event.set_osrBytesCompiled(CompileBroker::get_sum_osr_bytes_compiled());
  event.set_standardBytesCompiled(CompileBroker::get_sum_standard_bytes_compiled());
  event.set_nmethodsSize(CompileBroker::get_sum_nmethod_size());
  event.set_nmethodCodeSize(CompileBroker::get_sum_nmethod_code_size());
  event.set_peakTimeSpent(CompileBroker::get_peak_compilation_time());
  event.set_totalTimeSpent(CompileBroker::get_total_compilation_time());
  event.commit();
}

TRACE_REQUEST_FUNC(CompilerConfiguration) {
  EventCompilerConfiguration event;
  event.set_threadCount(CICompilerCount);
  event.set_tieredCompilation(TieredCompilation);
  event.commit();
}

TRACE_REQUEST_FUNC(CodeCacheStatistics) {
  // Emit stats for all available code heaps
  for (int bt = 0; bt < CodeBlobType::NumTypes; ++bt) {
    if (CodeCache::heap_available(bt)) {
      EventCodeCacheStatistics event;
      event.set_codeBlobType((u1)bt);

Configuration enabled period
default true beginChunk
profiling true beginChunk

Field Type Description
threadCount int Thread Count
tieredCompilation boolean Tiered Compilation

Examples 3
startTime long: millis
805717624542
threadCount int
4
tieredCompilation boolean
true
startTime long: millis
60345397167
threadCount int
4
tieredCompilation boolean
true
startTime long: millis
96717751875
threadCount int
4
tieredCompilation boolean
true

JVM: Diagnostics

SyncOnValueBasedClass

experimental default profiling startTime eventThread stackTrace 16 17 21 23 24

Category: Java Virtual Machine / Diagnostics

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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(current);
    Log(valuebasedclasses) vblog;

    vblog.info("Synchronizing on object " INTPTR_FORMAT " of klass %s", p2i(obj()), obj->klass()->external_name());
    if (current->has_last_Java_frame()) {
      LogStream info_stream(vblog.info());
      current->print_stack_on(&info_stream);
    } else {
      vblog.info("Cannot find the last Java frame");
    }

    EventSyncOnValueBasedClass event;
    if (event.should_commit()) {
      event.set_valueBasedClass(obj->klass());
      event.commit();
    }
  }

  if (bcp_was_adjusted) {
    last_frame.interpreter_frame_set_bcp(last_frame.interpreter_frame_bcp() + 1);
  }
}

Configuration enabled stackTrace
default true true
profiling true true

Field Type Description
valueBasedClass Class Value Based Class Consider contributing a description to jfreventcollector.

HeapDump

default profiling startTime duration eventThread stackTrace 15 17 21 23 24

Category: Java Virtual Machine / Diagnostics

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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:

  _large_object_list->drain(cl);
}

// dump the heap to given path.
int HeapDumper::dump(const char* path, outputStream* out, int compression, bool overwrite, uint num_dump_threads) {
  assert(path != NULL && strlen(path) > 0, "path missing");

  // print message in interactive case
  if (out != NULL) {
    out->print_cr("Dumping heap to %s ...", path);
    timer()->start();
  }
  // create JFR event
  EventHeapDump event;

  AbstractCompressor* compressor = NULL;

  if (compression > 0) {
    compressor = new (std::nothrow) GZipCompressor(compression);

    if (compressor == NULL) {
      set_error("Could not allocate gzip compressor");
      return -1;
    }
  }

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

Field Type Description
destination string Destination
size long Size
gcBeforeDump boolean GC Before Dump
onOutOfMemoryError boolean On Out of Memory Error

JVM: Flag

IntFlagChanged

default profiling startTime 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

src/hotspot/share/runtime/flags/jvmFlagAccess.cpp:

  virtual void print_range(outputStream* st, const JVMFlagLimit* range) const {
    const JVMTypedFlagLimit<T>* r = (const JVMTypedFlagLimit<T>*)range;
    print_range_impl(st, r->min(), r->max());
  }

  virtual void range_error(const char* name, T value, T min, T max, bool verbose) const = 0;
  virtual void print_range_impl(outputStream* st, T min, T max) const = 0;
};

class FlagAccessImpl_int : public RangedFlagAccessImpl<int, EventIntFlagChanged> {
public:
  void range_error(const char* name, int value, int min, int max, bool verbose) const {
    JVMFlag::printError(verbose,
                        "int %s=%d is outside the allowed range "
                        "[ %d ... %d ]\n",
                        name, value, min, max);
  }
  JVMFlag::Error typed_check_constraint(void* func, int value, bool verbose) const {
    return ((JVMFlagConstraintFunc_int)func)(value, verbose);
  }
  void print_range_impl(outputStream* st, int min, int max) const {

Configuration enabled
default true
profiling true

Field Type Description
name string Name
oldValue int Old Value
newValue int New Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

UnsignedIntFlagChanged

default profiling startTime 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

src/hotspot/share/runtime/flags/jvmFlagAccess.cpp:

                        name, value, min, max);
  }
  JVMFlag::Error typed_check_constraint(void* func, int value, bool verbose) const {
    return ((JVMFlagConstraintFunc_int)func)(value, verbose);
  }
  void print_range_impl(outputStream* st, int min, int max) const {
    st->print("[ %-25d ... %25d ]", min, max);
  }
  void print_default_range(outputStream* st) const {
    st->print("[ " INT32_FORMAT_W(-25) " ... " INT32_FORMAT_W(25) " ]", INT_MIN, INT_MAX);
  }
};

class FlagAccessImpl_uint : public RangedFlagAccessImpl<uint, EventUnsignedIntFlagChanged> {
public:
  void range_error(const char* name, uint value, uint min, uint max, bool verbose) const {
    JVMFlag::printError(verbose,
                        "uint %s=%u is outside the allowed range "
                        "[ %u ... %u ]\n",
                        name, value, min, max);
  }
  JVMFlag::Error typed_check_constraint(void* func, uint value, bool verbose) const {
    return ((JVMFlagConstraintFunc_uint)func)(value, verbose);
  }
  void print_range_impl(outputStream* st, uint min, uint max) const {

Configuration enabled
default true
profiling true

Field Type Description
name string Name
oldValue uint Old Value
newValue uint New Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

LongFlagChanged

default profiling startTime 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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=" INTX_FORMAT " is outside the allowed range "
                        "[ " INTX_FORMAT " ... " INTX_FORMAT " ]\n",
                        name, value, min, max);
  }
  JVMFlag::Error typed_check_constraint(void* func, intx value, bool verbose) const {
    return ((JVMFlagConstraintFunc_intx)func)(value, verbose);
  }
  void print_range_impl(outputStream* st, intx min, intx max) const {

Configuration enabled
default true
profiling true

Field Type Description
name string Name
oldValue long Old Value
newValue long New Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

UnsignedLongFlagChanged

default profiling startTime 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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("[ " INTX_FORMAT_W(-25) " ... " INTX_FORMAT_W(25) " ]", min, max);
  }
  void print_default_range(outputStream* st) const {
    st->print("[ " INTX_FORMAT_W(-25) " ... " INTX_FORMAT_W(25) " ]", 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=" UINTX_FORMAT " is outside the allowed range "
                        "[ " UINTX_FORMAT " ... " UINTX_FORMAT " ]\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("[ " UINTX_FORMAT_W(-25) " ... " UINTX_FORMAT_W(25) " ]", min, max);
  }
  void print_default_range(outputStream* st) const {
    st->print("[ " UINTX_FORMAT_W(-25) " ... " UINTX_FORMAT_W(25) " ]", 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=" SIZE_FORMAT " is outside the allowed range "
                        "[ " SIZE_FORMAT " ... " SIZE_FORMAT " ]\n",
                        name, value, min, max);
  }
  JVMFlag::Error typed_check_constraint(void* func, size_t value, bool verbose) const {
    return ((JVMFlagConstraintFunc_size_t)func)(value, verbose);
  }
  void print_range_impl(outputStream* st, size_t min, size_t max) const {

Configuration enabled
default true
profiling true

Field Type Description
name string Name
oldValue ulong Old Value
newValue ulong New Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

DoubleFlagChanged

default profiling startTime 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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("[ " SIZE_FORMAT_W(-25) " ... " SIZE_FORMAT_W(25) " ]", min, max);
  }
  void print_default_range(outputStream* st) const {
    st->print("[ " SIZE_FORMAT_W(-25) " ... " SIZE_FORMAT_W(25) " ]", size_t(0), size_t(SIZE_MAX));
  }
};

class FlagAccessImpl_double : public RangedFlagAccessImpl<double, EventDoubleFlagChanged> {
public:
  void range_error(const char* name, double value, double min, double max, bool verbose) const {
    JVMFlag::printError(verbose,
                          "double %s=%f is outside the allowed range "
                          "[ %f ... %f ]\n",
                        name, value, min, max);
  }
  JVMFlag::Error typed_check_constraint(void* func, double value, bool verbose) const {
    return ((JVMFlagConstraintFunc_double)func)(value, verbose);
  }
  void print_range_impl(outputStream* st, double min, double max) const {

Configuration enabled
default true
profiling true

Field Type Description
name string Name
oldValue double Old Value
newValue double New Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

BooleanFlagChanged

default profiling startTime 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

src/hotspot/share/runtime/flags/jvmFlagAccess.cpp:

    *((T*)value_addr) = old_value;
    flag->set_origin(origin);

    return JVMFlag::SUCCESS;
  }

  JVMFlag::Error check_constraint(const JVMFlag* flag, void * func, bool verbose) const  {
    return typed_check_constraint(func, flag->read<T>(), verbose);
  }

  virtual JVMFlag::Error typed_check_constraint(void * func, T value, bool verbose) const = 0;
};

class FlagAccessImpl_bool : public TypedFlagAccessImpl<bool, EventBooleanFlagChanged> {
public:
  JVMFlag::Error set_impl(JVMFlag* flag, void* value_addr, JVMFlagOrigin origin) const {
    bool verbose = JVMFlagLimit::verbose_checks_needed();
    return TypedFlagAccessImpl<bool, EventBooleanFlagChanged>
               ::check_constraint_and_set(flag, value_addr, origin, verbose);
  }

  JVMFlag::Error typed_check_constraint(void* func, bool value, bool verbose) const {
    return ((JVMFlagConstraintFunc_bool)func)(value, verbose);
  }
};

template <typename T, typename EVENT>
class RangedFlagAccessImpl : public TypedFlagAccessImpl<T, EVENT> {
public:

Configuration enabled
default true
profiling true

Field Type Description
name string Name
oldValue boolean Old Value
newValue boolean New Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

StringFlagChanged

default profiling startTime 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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:

JVMFlag::Error JVMFlagAccess::set_impl(JVMFlag* flag, void* value, JVMFlagOrigin origin) {
  if (flag->is_ccstr()) {
    return set_ccstr(flag, (ccstr*)value, origin);
  } else {
    return access_impl(flag)->set(flag, value, origin);
  }
}

JVMFlag::Error JVMFlagAccess::set_ccstr(JVMFlag* flag, ccstr* value, JVMFlagOrigin origin) {
  if (flag == NULL) return JVMFlag::INVALID_FLAG;
  if (!flag->is_ccstr()) return JVMFlag::WRONG_FORMAT;
  ccstr old_value = flag->get_ccstr();
  trace_flag_changed<ccstr, EventStringFlagChanged>(flag, old_value, *value, origin);
  char* new_value = NULL;
  if (*value != NULL) {
    new_value = os::strdup_check_oom(*value);
  }
  flag->set_ccstr(new_value);
  if (!flag->is_default() && old_value != NULL) {
    // Old value is heap allocated so free it.
    FREE_C_HEAP_ARRAY(char, old_value);
  }
  // Unlike the other APIs, the old vale is NOT returned, so the caller won't need to free it.
  // The callers typically don't care what the old value is.

Configuration enabled
default true
profiling true

Field Type Description
name string Name
oldValue string Old Value
newValue string New Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

IntFlag

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Configuration enabled period
default true beginChunk
profiling true beginChunk

Field Type Description
name string Name
value int Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

Examples 3
name string
VMThreadPriority
origin FlagValueOrigin
Default
startTime long: millis
60345409958
value int
-1
name string
PerfDataMemorySize
origin FlagValueOrigin
Default
startTime long: millis
40031148292
value int
32768
name string
SoftwarePrefetchHintDistance
origin FlagValueOrigin
Default
startTime long: millis
791773026042
value int
384

UnsignedIntFlag

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Configuration enabled period
default true beginChunk
profiling true beginChunk

Field Type Description
name string Name
value uint Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

Examples 3
name string
SharedSymbolTableBucketSize
origin FlagValueOrigin
Default
startTime long: millis
75962743333
value uint
4
name string
GCLockerEdenExpansionPercent
origin FlagValueOrigin
Default
startTime long: millis
798681840042
value uint
5
name string
VerifyIterativeGVN
origin FlagValueOrigin
Default
startTime long: millis
423306125
value uint
0

LongFlag

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Configuration enabled period
default true beginChunk
profiling true beginChunk

Field Type Description
name string Name
value long Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

Examples 3
name string
AutoBoxCacheMax
origin FlagValueOrigin
Default
startTime long: millis
423471333
value long
128
name string
LoopMaxUnroll
origin FlagValueOrigin
Default
startTime long: millis
791773041083
value long
16
name string
HugeMethodLimit
origin FlagValueOrigin
Default
startTime long: millis
364813000
value long
8000

UnsignedLongFlag

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Configuration enabled period
default true beginChunk
profiling true beginChunk

Field Type Description
name string Name
value ulong Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

Examples 3
name string
NUMAChunkResizeWeight
origin FlagValueOrigin
Default
startTime long: millis
364819958
value ulong
20
name string
CompressedClassSpaceBaseAddress
origin FlagValueOrigin
Default
startTime long: millis
423586125
value ulong
0
name string
ZForceDiscontiguousHeapReservations
origin FlagValueOrigin
Default
startTime long: millis
791773066625
value ulong
0

DoubleFlag

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Configuration enabled period
default true beginChunk
profiling true beginChunk

Field Type Description
name string Name
value double Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

Examples 3
name string
G1PeriodicGCSystemLoadThreshold
origin FlagValueOrigin
Default
startTime long: millis
364834792
value double
0.0
name string
ZAllocationSpikeTolerance
origin FlagValueOrigin
Default
startTime long: millis
75087099167
value double
2.0
name string
SafepointTimeoutDelay
origin FlagValueOrigin
Default
startTime long: millis
805718788458
value double
10000.0

BooleanFlag

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Configuration enabled period
default true beginChunk
profiling true beginChunk

Field Type Description
name string Name
value boolean Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

Examples 3
name string
PrintIRDuringConstruction
origin FlagValueOrigin
Default
startTime long: millis
423596542
value boolean
false
name string
PrintBlockElimination
origin FlagValueOrigin
Default
startTime long: millis
364840083
value boolean
false
name string
AssertRangeCheckElimination
origin FlagValueOrigin
Default
startTime long: millis
791773074542
value boolean
false

StringFlag

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / Flag

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Configuration enabled period
default true beginChunk
profiling true beginChunk

Field Type Description
name string Name
value string Value
origin FlagValueOrigin Origin Consider contributing a description to jfreventcollector.

Examples 3
name string
CompileCommandFile
origin FlagValueOrigin
Default
startTime long: millis
17899929917
value string
null
name string
UseBranchProtection
origin FlagValueOrigin
Default
startTime long: millis
817390662458
value string
none
name string
ShenandoahGCHeuristics
origin FlagValueOrigin
Default
startTime long: millis
15845491333
value string
adaptive

JVM: GC: Collector

GarbageCollection

default profiling startTime duration 11 17 21 23 24

Category: Java Virtual Machine / GC / Collector

Garbage collection performed by the JVM

Code Context

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

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

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

typedef uintptr_t TraceAddress;

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

Configuration enabled threshold
default true 0 ms
profiling true 0 ms

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

Examples 3
cause GCCause
Allocation Failure
gcId uint
69
longestPause Tickspan
105084250
name GCName
ParallelScavenge
startTime long: millis
53082514958
sumOfPauses Tickspan
105084250
cause GCCause
Allocation Failure
gcId uint
11
longestPause Tickspan
3534667
name GCName
DefNew
startTime long: millis
1641763000
sumOfPauses Tickspan
3534667
cause GCCause
G1 Humongous Allocation
gcId uint
930
longestPause Tickspan
10332709
name GCName
G1New
startTime long: millis
872900832333
sumOfPauses Tickspan
10332709

SystemGC

default profiling startTime duration eventThread stackTrace 17 21 23 24

Category: Java Virtual Machine / GC / Collector

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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);
  vm_exit(code);
JVM_END


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


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

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

Field Type Description
invokedConcurrent boolean Invoked Concurrent

Examples 3
invokedConcurrent boolean
false
stackTrace StackTrace
frames StackFrame
bytecodeIndex int
0
lineNumber int
-1
method Method
descriptor string
()V
hidden boolean
false
modifiers int
257
name string
gc
type Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
33
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
21.0.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
81866422792
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
33
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
21.0.1
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
67826232167
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
1
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
22
name string
java/lang
type FrameType
Native
truncated boolean
false
startTime long: millis
851795653833

ParallelOldGarbageCollection

default profiling startTime duration 11 17 21 23 24

Category: Java Virtual Machine / GC / Collector

Appearing in: ParallelGC

Missing in: G1GC, SerialGC, ShenandoahGC, ZGC

Extra information specific to Parallel Old Garbage Collections

Code Context

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

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

    e.set_smallChunksTotalSize(summary.small_chunks_size_in_bytes());

    e.set_mediumChunks(summary.num_medium_chunks());
    e.set_mediumChunksTotalSize(summary.medium_chunks_size_in_bytes());

    e.set_humongousChunks(summary.num_humongous_chunks());
    e.set_humongousChunksTotalSize(summary.humongous_chunks_size_in_bytes());

    e.commit();
  }
}

void ParallelOldTracer::send_parallel_old_event() const {
  EventParallelOldGarbageCollection e(UNTIMED);
  if (e.should_commit()) {
    e.set_gcId(GCId::current());
    e.set_densePrefix((TraceAddress)_parallel_old_gc_info.dense_prefix());
    e.set_starttime(_shared_gc_info.start_timestamp());
    e.set_endtime(_shared_gc_info.end_timestamp());
    e.commit();
  }
}

void YoungGCTracer::send_young_gc_event() const {
  EventYoungGarbageCollection e(UNTIMED);

Configuration enabled threshold
default true 0 ms
profiling true 0 ms

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

Examples 1
densePrefix ulong: address
30146035712
gcId uint
28
startTime long: millis
17131129458

YoungGarbageCollection

default profiling startTime duration 11 17 21 23 24

Category: Java Virtual Machine / GC / Collector

Appearing in: G1GC, ParallelGC, SerialGC

Missing in: ShenandoahGC, ZGC

Extra information specific to Young Garbage Collections

Code Context

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

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

void ParallelOldTracer::send_parallel_old_event() const {
  EventParallelOldGarbageCollection e(UNTIMED);
  if (e.should_commit()) {
    e.set_gcId(GCId::current());
    e.set_densePrefix((TraceAddress)_parallel_old_gc_info.dense_prefix());
    e.set_starttime(_shared_gc_info.start_timestamp());
    e.set_endtime(_shared_gc_info.end_timestamp());
    e.commit();
  }
}

void YoungGCTracer::send_young_gc_event() const {
  EventYoungGarbageCollection e(UNTIMED);
  if (e.should_commit()) {
    e.set_gcId(GCId::current());
    e.set_tenuringThreshold(_tenuring_threshold);
    e.set_starttime(_shared_gc_info.start_timestamp());
    e.set_endtime(_shared_gc_info.end_timestamp());
    e.commit();
  }
}

bool YoungGCTracer::should_send_promotion_in_new_plab_event() const {
  return EventPromoteObjectInNewPLAB::is_enabled();

Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Field Type Description
gcId uint GC Identifier
tenuringThreshold uint Tenuring Threshold

Examples 3
gcId uint
23
startTime long: millis
10970331333
tenuringThreshold uint
1
gcId uint
27
startTime long: millis
1922787333
tenuringThreshold uint
4
gcId uint
949
startTime long: millis
881582453625
tenuringThreshold uint
15

OldGarbageCollection

default profiling startTime duration 11 17 21 23 24

Category: Java Virtual Machine / GC / Collector

Appearing in: G1GC, ParallelGC, SerialGC

Missing in: ShenandoahGC, ZGC

Extra information specific to Old Garbage Collections

Code Context

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

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

  EventPromoteObjectOutsidePLAB event;
  if (event.should_commit()) {
    event.set_gcId(GCId::current());
    event.set_objectClass(klass);
    event.set_objectSize(obj_size);
    event.set_tenured(tenured);
    event.set_tenuringAge(age);
    event.commit();
  }
}

void OldGCTracer::send_old_gc_event() const {
  EventOldGarbageCollection e(UNTIMED);
  if (e.should_commit()) {
    e.set_gcId(GCId::current());
    e.set_starttime(_shared_gc_info.start_timestamp());
    e.set_endtime(_shared_gc_info.end_timestamp());
    e.commit();
  }
}

static JfrStructCopyFailed to_struct(const CopyFailedInfo& cf_info) {
  JfrStructCopyFailed failed_info;
  failed_info.set_objectCount(cf_info.failed_count());

Configuration enabled threshold
default true 0 ms
profiling true 0 ms

Field Type Description
gcId uint GC Identifier

Examples 3
gcId uint
76
startTime long: millis
60136930875
gcId uint
874
startTime long: millis
805719019792
gcId uint
218
startTime long: millis
40035170875

G1GarbageCollection

default profiling startTime duration 11 17 21 23 24

Category: Java Virtual Machine / GC / Collector

Appearing in: G1GC

Missing in: ParallelGC, SerialGC, ShenandoahGC, 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
default true 0 ms
profiling true 0 ms

Field Type Description
gcId uint GC Identifier
type G1YCType Type Consider contributing a description to jfreventcollector.

Examples 1
gcId uint
939
startTime long: millis
879044997167
type G1YCType
Prepare Mixed

JVM: GC: Configuration

GCConfiguration

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / GC / Configuration

The configuration of the garbage collector

Code Context

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

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

TRACE_REQUEST_FUNC(G1HeapRegionInformation) {
  G1GC_ONLY(G1HeapRegionEventSender::send_events());
}

// Java Mission Control (JMC) uses (Java) Long.MIN_VALUE to describe that a
// long value is undefined.
static jlong jmc_undefined_long = min_jlong;

TRACE_REQUEST_FUNC(GCConfiguration) {
  GCConfiguration conf;
  jlong pause_target = conf.has_pause_target_default_value() ? jmc_undefined_long : conf.pause_target();
  EventGCConfiguration event;
  event.set_youngCollector(conf.young_collector());
  event.set_oldCollector(conf.old_collector());
  event.set_parallelGCThreads(conf.num_parallel_gc_threads());
  event.set_concurrentGCThreads(conf.num_concurrent_gc_threads());
  event.set_usesDynamicGCThreads(conf.uses_dynamic_gc_threads());
  event.set_isExplicitGCConcurrent(conf.is_explicit_gc_concurrent());
  event.set_isExplicitGCDisabled(conf.is_explicit_gc_disabled());
  event.set_gcTimeRatio(conf.gc_time_ratio());
  event.set_pauseTarget((s8)pause_target);
  event.commit();
}

Configuration enabled period
default true everyChunk
profiling true everyChunk

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

Examples 3
concurrentGCThreads uint
0
gcTimeRatio uint
99
isExplicitGCConcurrent boolean
false
isExplicitGCDisabled boolean
false
oldCollector GCName
ParallelOld
parallelGCThreads uint
8
pauseTarget long: millis
-9223372036854775808
startTime long: millis
94256843625
usesDynamicGCThreads boolean
true
youngCollector GCName
ParallelScavenge
concurrentGCThreads uint
0
gcTimeRatio uint
99
isExplicitGCConcurrent boolean
false
isExplicitGCDisabled boolean
false
oldCollector GCName
SerialOld
parallelGCThreads uint
0
pauseTarget long: millis
-9223372036854775808
startTime long: millis
39811834667
usesDynamicGCThreads boolean
true
youngCollector GCName
DefNew
concurrentGCThreads uint
2
gcTimeRatio uint
12
isExplicitGCConcurrent boolean
false
isExplicitGCDisabled boolean
false
oldCollector GCName
G1Old
parallelGCThreads uint
8
pauseTarget long: millis
-9223372036854775808
startTime long: millis
795902645125
usesDynamicGCThreads boolean
true
youngCollector GCName
G1New

GCSurvivorConfiguration

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / GC / Configuration

The configuration of the survivors of garbage collection

Code Context

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

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

TRACE_REQUEST_FUNC(GCTLABConfiguration) {
  GCTLABConfiguration conf;
  EventGCTLABConfiguration event;
  event.set_usesTLABs(conf.uses_tlabs());
  event.set_minTLABSize(conf.min_tlab_size());
  event.set_tlabRefillWasteLimit(conf.tlab_refill_waste_limit());
  event.commit();
}

TRACE_REQUEST_FUNC(GCSurvivorConfiguration) {
  GCSurvivorConfiguration conf;
  EventGCSurvivorConfiguration event;
  event.set_maxTenuringThreshold(conf.max_tenuring_threshold());
  event.set_initialTenuringThreshold(conf.initial_tenuring_threshold());
  event.commit();
}

TRACE_REQUEST_FUNC(GCHeapConfiguration) {
  GCHeapConfiguration conf;
  EventGCHeapConfiguration event;
  event.set_minSize(conf.min_size());
  event.set_maxSize(conf.max_size());
  event.set_initialSize(conf.initial_size());

Configuration enabled period
default true beginChunk
profiling true beginChunk

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

Examples 3
initialTenuringThreshold ubyte
7
maxTenuringThreshold ubyte
15
startTime long: millis
60476332542
initialTenuringThreshold ubyte
7
maxTenuringThreshold ubyte
15
startTime long: millis
30690532708
initialTenuringThreshold ubyte
7
maxTenuringThreshold ubyte
15
startTime long: millis
839747649333

GCTLABConfiguration

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / GC / Configuration

The configuration of the Thread Local Allocation Buffers (TLABs)

Code Context

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

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

  event.set_oldCollector(conf.old_collector());
  event.set_parallelGCThreads(conf.num_parallel_gc_threads());
  event.set_concurrentGCThreads(conf.num_concurrent_gc_threads());
  event.set_usesDynamicGCThreads(conf.uses_dynamic_gc_threads());
  event.set_isExplicitGCConcurrent(conf.is_explicit_gc_concurrent());
  event.set_isExplicitGCDisabled(conf.is_explicit_gc_disabled());
  event.set_gcTimeRatio(conf.gc_time_ratio());
  event.set_pauseTarget((s8)pause_target);
  event.commit();
}

TRACE_REQUEST_FUNC(GCTLABConfiguration) {
  GCTLABConfiguration conf;
  EventGCTLABConfiguration event;
  event.set_usesTLABs(conf.uses_tlabs());
  event.set_minTLABSize(conf.min_tlab_size());
  event.set_tlabRefillWasteLimit(conf.tlab_refill_waste_limit());
  event.commit();
}

TRACE_REQUEST_FUNC(GCSurvivorConfiguration) {
  GCSurvivorConfiguration conf;
  EventGCSurvivorConfiguration event;
  event.set_maxTenuringThreshold(conf.max_tenuring_threshold());
  event.set_initialTenuringThreshold(conf.initial_tenuring_threshold());

Configuration enabled period
default true beginChunk
profiling true beginChunk

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

Examples 3
minTLABSize ulong: bytes
2048
startTime long: millis
88354587167
tlabRefillWasteLimit ulong: bytes
64
usesTLABs boolean
true
minTLABSize ulong: bytes
2048
startTime long: millis
904194561542
tlabRefillWasteLimit ulong: bytes
64
usesTLABs boolean
true
minTLABSize ulong: bytes
2048
startTime long: millis
75222450083
tlabRefillWasteLimit ulong: bytes
64
usesTLABs boolean
true

GCHeapConfiguration

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / GC / Configuration

The configuration of the garbage collected heap

Code Context

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

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

  event.commit();
}

TRACE_REQUEST_FUNC(GCSurvivorConfiguration) {
  GCSurvivorConfiguration conf;
  EventGCSurvivorConfiguration event;
  event.set_maxTenuringThreshold(conf.max_tenuring_threshold());
  event.set_initialTenuringThreshold(conf.initial_tenuring_threshold());
  event.commit();
}

TRACE_REQUEST_FUNC(GCHeapConfiguration) {
  GCHeapConfiguration conf;
  EventGCHeapConfiguration event;
  event.set_minSize(conf.min_size());
  event.set_maxSize(conf.max_size());
  event.set_initialSize(conf.initial_size());
  event.set_usesCompressedOops(conf.uses_compressed_oops());
  event.set_compressedOopsMode(conf.narrow_oop_mode());
  event.set_objectAlignment(conf.object_alignment_in_bytes());
  event.set_heapAddressBits(conf.heap_address_size_in_bits());
  event.commit();
}

TRACE_REQUEST_FUNC(YoungGenerationConfiguration) {

Configuration enabled period
default true beginChunk
profiling true beginChunk

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

Examples 3
compressedOopsMode NarrowOopMode
Zero based
heapAddressBits ubyte
32
initialSize ulong: bytes
268435456
maxSize ulong: bytes
4294967296
minSize ulong: bytes
8388608
objectAlignment ulong: bytes
8
startTime long: millis
914473075583
usesCompressedOops boolean
true
compressedOopsMode NarrowOopMode
Zero based
heapAddressBits ubyte
32
initialSize ulong: bytes
268435456
maxSize ulong: bytes
4294967296
minSize ulong: bytes
8388608
objectAlignment ulong: bytes
8
startTime long: millis
18250637583
usesCompressedOops boolean
true
compressedOopsMode NarrowOopMode
Zero based
heapAddressBits ubyte
32
initialSize ulong: bytes
268435456
maxSize ulong: bytes
4294967296
minSize ulong: bytes
8388608
objectAlignment ulong: bytes
8
startTime long: millis
88354589583
usesCompressedOops boolean
true

YoungGenerationConfiguration

default profiling startTime duration end of every chunk 11 17 21 23 24

Category: Java Virtual Machine / GC / Configuration

The configuration of the young generation of the garbage collected heap

Code Context

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

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

  event.set_minSize(conf.min_size());
  event.set_maxSize(conf.max_size());
  event.set_initialSize(conf.initial_size());
  event.set_usesCompressedOops(conf.uses_compressed_oops());
  event.set_compressedOopsMode(conf.narrow_oop_mode());
  event.set_objectAlignment(conf.object_alignment_in_bytes());
  event.set_heapAddressBits(conf.heap_address_size_in_bits());
  event.commit();
}

TRACE_REQUEST_FUNC(YoungGenerationConfiguration) {
  GCYoungGenerationConfiguration conf;
  jlong max_size = conf.has_max_size_default_value() ? jmc_undefined_long : conf.max_size();
  EventYoungGenerationConfiguration event;
  event.set_maxSize((u8)max_size);
  event.set_minSize(conf.min_size());
  event.set_newRatio(conf.new_ratio());
  event.commit();
}

TRACE_REQUEST_FUNC(InitialSystemProperty) {
  SystemProperty* p = Arguments::system_properties();
  JfrTicks time_stamp = JfrTicks::now();
  while (p !=  NULL) {
    if (!p->internal()) {

Configuration enabled period
default true beginChunk
profiling true beginChunk

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

Examples 3
maxSize ulong: bytes
1431633920
minSize ulong: bytes
89456640
newRatio uint
2
startTime long: millis
378406583
maxSize ulong: bytes
2575302656
minSize ulong: bytes
1363144
newRatio uint
2
startTime long: millis
889669358667
maxSize ulong: bytes
1431306240
minSize ulong: bytes
89128960
newRatio uint
2
startTime long: millis
39413199875

JVM: GC: Detailed

ZThreadDebug

internal startTime duration eventThread 18 21 23 24

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::tracer()->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

default profiling startTime 11 17 21 23 24

Category: Java Virtual Machine / GC / Detailed

Appearing in: G1GC

Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

void G1OldTracer::report_gc_start_impl(GCCause::Cause cause, const Ticks& timestamp) {
  _shared_gc_info.set_start_timestamp(timestamp);
}

void G1OldTracer::set_gc_cause(GCCause::Cause cause) {
  _shared_gc_info.set_cause(cause);
}

void G1MMUTracer::report_mmu(double time_slice_sec, double gc_time_sec, double max_time_sec) {
  send_g1_mmu_event(time_slice_sec * MILLIUNITS,
                    gc_time_sec * MILLIUNITS,
                    max_time_sec * MILLIUNITS);
}

void G1MMUTracer::send_g1_mmu_event(double time_slice_ms, double gc_time_ms, double max_time_ms) {
  EventG1MMU e;
  if (e.should_commit()) {
    e.set_gcId(GCId::current());
    e.set_timeSlice(time_slice_ms);
    e.set_gcTime(gc_time_ms);
    e.set_pauseTarget(max_time_ms);
    e.commit();
  }
}

Configuration enabled
default true
profiling true

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

Examples 1
gcId uint
909
gcTime long: millis
7
pauseTarget long: millis
200
startTime long: millis
848971131125
timeSlice long: millis
201

EvacuationInformation

default profiling startTime 11 17 21 23 24

Category: Java Virtual Machine / GC / Detailed

Appearing in: G1GC

Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

The event is likely defined and utilized 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->collectionset_regions());
    e.set_cSetUsedBefore(info->collectionset_used_before());
    e.set_cSetUsedAfter(info->collectionset_used_after());
    e.set_allocationRegions(info->allocation_regions());
    e.set_allocationRegionsUsedBefore(info->alloc_regions_used_before());
    e.set_allocationRegionsUsedAfter(info->alloc_regions_used_before() + info->bytes_used());
    e.set_bytesCopied(info->bytes_used());
    e.set_regionsFreed(info->regions_freed());
    e.commit();

Configuration enabled
default true
profiling true

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

Examples 1
allocationRegions uint
1
allocationRegionsUsedAfter ulong: bytes
95776
allocationRegionsUsedBefore ulong: bytes
0
bytesCopied ulong: bytes
95776
cSetRegions uint
2
cSetUsedAfter ulong: bytes
0
cSetUsedBefore ulong: bytes
4194304
gcId uint
893
regionsFreed uint
2
startTime long: millis
839845132125

ObjectCountAfterGC

startTime 11 17 21 23 24

Category: Java Virtual Machine / GC / Detailed

Appearing in: G1GC, ParallelGC, SerialGC

Missing in: ShenandoahGC, ZGC

No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.

Code Context

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

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

#if INCLUDE_SERVICES

bool ObjectCountEventSender::should_send_event() {
#if INCLUDE_JFR
  return _should_send_requestable_event || EventObjectCountAfterGC::is_enabled();
#else
  return false;
#endif // INCLUDE_JFR
}

bool ObjectCountEventSender::_should_send_requestable_event = false;

void ObjectCountEventSender::enable_requestable_event() {
  _should_send_requestable_event = true;
}

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

template <typename T>
void ObjectCountEventSender::send_event_if_enabled(Klass* klass, jlong count, julong size, const Ticks& timestamp) {
  T event(UNTIMED);
  if (event.should_commit()) {
    event.set_gcId(GCId::current());
    event.set_objectClass(klass);
    event.set_count(count);
    event.set_totalSize(size);
    event.set_endtime(timestamp);
    event.commit();
  }
}

void ObjectCountEventSender::send(const KlassInfoEntry* entry, const Ticks& timestamp) {
  Klass* klass = entry->klass();
  jlong count = entry->count();
  julong total_size = entry->words() * BytesPerWord;

  send_event_if_enabled<EventObjectCount>(klass, count, total_size, timestamp);
  send_event_if_enabled<EventObjectCountAfterGC>(klass, count, total_size, timestamp);
}

#endif // INCLUDE_SERVICES

Configuration enabled
default false
profiling false

Field Type Description
gcId uint GC Identifier
objectClass Class Object Class Consider contributing a description to jfreventcollector.
count long Count
totalSize ulong: bytes Total Size

Examples 3
count long
4186
gcId uint
867
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
795853724792
totalSize ulong: bytes
4156008
count long
6337
gcId uint
3
objectClass Class
classLoader ClassLoader
name string
bootstrap
type Class
null
hidden boolean
false
modifiers int
32
name string
java/util/concurrent/ConcurrentHashMap$Node
package Package
exported boolean
true
module Module
classLoader ClassLoader
name string
bootstrap
type Class
null
location string
jrt:/java.base
name string
java.base
version string
21.0.1
name string
java/util/concurrent
startTime long: millis
976302875
totalSize ulong: bytes
202784
count long
140390