Introduction
The following are the events for OpenJDK 19 (jdk-19.0.2+7, 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
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.ThreadSleepEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.VirtualThreadStartEvent.class,
jdk.internal.event.VirtualThreadEndEvent.class,
jdk.internal.event.VirtualThreadPinnedEvent.class,
jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class,
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_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 | 889507623583
|
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 | 30518224250
|
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 | 30585354042
|
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 ActiveSettingEvent EVENT = new ActiveSettingEvent();
// The order of these fields must be the same as the parameters in
// commit(... , long, String, String)
@Label("Event Id")
public long id;
@Label("Setting Name")
public String name;
@Label("Setting Value")
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.ThreadSleepEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.VirtualThreadStartEvent.class,
jdk.internal.event.VirtualThreadEndEvent.class,
jdk.internal.event.VirtualThreadPinnedEvent.class,
jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
jdk.internal.event.X509CertificateEvent.class,
src/jdk.jfr/share/classes/jdk/jfr/internal/EventControl.java:
void writeActiveSettingEvent(long timestamp) {
if (!type.isRegistered()) {
return;
}
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();
}
if (ActiveSettingEvent.EVENT.isEnabled()) {
ActiveSettingEvent.commit(timestamp, 0L, type.getId(), nc.name(), value);
}
}
}
}
public ArrayList<NamedControl> getNamedControls() {
return namedControls;
}
public PlatformEventType getEventType() {
return type;
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
id | long | Event Id |
name | string | Setting Name |
value | string | Setting Value |
Examples 3
JVM
JVMInformation
default profiling startTime duration end of every chunk 11 17 21 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_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 | 60343469750
|
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 | 798650473500
|
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 | 84413939583
|
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
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 | app
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | jdk/internal/loader
|
loadedClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1057
|
name | string | java/io/OutputStream
|
package | Package | |
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/io
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Z)[Ljava/lang/reflect/Method;
|
hidden | boolean | false
|
modifiers | int | 258
|
name | string | getDeclaredMethods0
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 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 | 390426875
|
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 | false
|
modifiers | int | 17
|
name | string | scala/reflect/runtime/package$
|
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
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 579
|
lineNumber | int | 744
|
method | Method | |
descriptor | string | (Lorg/apache/spark/ml/recommendation/ALS;Lorg/apache/spark/sql/Dataset;Lorg/apache/spark/ml/util/Instrumentation;)Lorg/apache/spark/ml/recommendation/ALSModel;
|
hidden | boolean | false
|
modifiers | int | 4121
|
name | string | $anonfun$fit$1
|
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 | 1
|
name | string | org/apache/spark/ml/recommendation/ALS
|
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/ml/recommendation
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 843437865375
|
definingClassLoader | ClassLoader | null
|
---|---|---|
initiatingClassLoader | ClassLoader | null
|
loadedClass | Class | |
classLoader | ClassLoader | null
|
hidden | boolean | true
|
modifiers | int | 48
|
name | string | java.lang.invoke.LambdaForm$DMH+0x00000008000c5c00/1402433372
|
package | Package | |
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/invoke
|
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 | 1057
|
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 | 21.0.1
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 443676417
|
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/internal/CapturedVariables
|
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/internal
|
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 | 843484816917
|
definedClass | Class | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/util/Formatter$Flags
|
package | Package | |
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
|
definingClassLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 4
|
lineNumber | int | 2924
|
method | Method | |
descriptor | string | (Ljava/lang/String;II)V
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | flags
|
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 | 459579542
|
definedClass | Class | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | sun/util/resources/LocaleData$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 | sun/util/resources
|
definingClassLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | 182
|
method | Method | |
descriptor | string | (Ljava/lang/String;Ljava/util/Locale;)Ljava/util/ResourceBundle;
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | getBundle
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | sun/util/resources/LocaleData
|
package | Package | |
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/resources
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 405564625
|
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 | 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 | 852482516542
|
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 | 1025
|
name | string | scala/collection/AbstractMap
|
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
|
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 | 3889413292
|
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 | 1537
|
name | string | scala/collection/immutable/SortedSet
|
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 | scala/collection/immutable
|
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 | 4558724917
|
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.ConfigBuilder$$Lambda+0x0000000800375a18/2017530134
|
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
|
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 (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
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 | 4733009920
|
startAddress | ulong: address | 4481351680
|
startTime | long: millis | 52082148542
|
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
|
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 | 78960108292
|
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:
// As part of event commit, a Method* is tagged as a function of an epoch.
// Epochs evolve during safepoints. To ensure the event is tagged in the correct epoch,
// that is, to avoid a race, the thread will participate in the safepoint protocol
// by transitioning from _thread_in_native to _thread_in_vm.
template <typename EventType>
static inline void commit(EventType& event) {
ThreadInVMfromNative transition(JavaThread::current());
event.commit();
}
void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_id, CompilerType compiler_type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) {
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);
commit(event);
}
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 | 38392
|
---|---|---|
compileId | uint | 108556
|
compileLevel | ushort | 4
|
compiler | CompilerType | c2
|
inlinedBytes | ulong: bytes | 5051
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Ldotty/tools/dotc/core/Types$Type;Ldotty/tools/dotc/core/TypeOps$SimplifyMap;Ldotty/tools/dotc/core/Contexts$Context;)Ldotty/tools/dotc/core/Types$Type;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | simplify
|
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/TypeOps$
|
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 | 909165596458
|
succeded | boolean | true
|
codeSize | ulong: bytes | 71376
|
---|---|---|
compileId | uint | 8839
|
compileLevel | ushort | 4
|
compiler | CompilerType | c2
|
inlinedBytes | ulong: bytes | 9359
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Ljava/lang/String;)Ljava/lang/Class;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | loadClass
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1057
|
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 | 21.0.1
|
name | string | java/lang
|
startTime | long: millis | 25487033583
|
succeded | boolean | true
|
codeSize | ulong: bytes | 10048
|
---|---|---|
compileId | uint | 6551
|
compileLevel | ushort | 4
|
compiler | CompilerType | c2
|
inlinedBytes | ulong: bytes | 3683
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Lakka/actor/ActorSystem;Lakka/actor/ActorRef;Lakka/actor/ActorRef;IIIZ)Lakka/actor/ActorRef;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | createNodeActor
|
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 | 33
|
name | string | edu/rice/habanero/benchmarks/uct/UctAkkaActorBenchmark$NodeActor$
|
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 | edu/rice/habanero/benchmarks/uct
|
startTime | long: millis | 11620629708
|
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/opto/compile.cpp:
Node* n = macro_node(i);
if (n->is_Allocate()) {
if (i != allocates) {
Node* tmp = macro_node(allocates);
_macro_nodes.at_put(allocates, n);
_macro_nodes.at_put(i, tmp);
}
allocates++;
}
}
}
void Compile::print_method(CompilerPhaseType cpt, int level, Node* n) {
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, cpt, C->_compile_id, level);
}
#ifndef PRODUCT
ResourceMark rm;
stringStream ss;
ss.print_raw(CompilerPhaseTypeHelper::to_description(cpt));
if (n != nullptr) {
ss.print(": %d %s ", n->_idx, NodeClassNames[n->Opcode()]);
}
src/hotspot/share/opto/compile.cpp:
// Only used from CompileWrapper
void Compile::begin_method() {
#ifndef PRODUCT
if (_method != NULL && should_print_igv(1)) {
_igv_printer->begin_method();
}
#endif
C->_latest_stage_start_counter.stamp();
}
// Only used from CompileWrapper
void Compile::end_method() {
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, PHASE_END, C->_compile_id, 1);
}
#ifndef PRODUCT
if (_method != NULL && should_print_igv(1)) {
_igv_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);
commit(event);
}
void CompilerEvent::CompilationFailureEvent::post(EventCompilationFailure& event, int compile_id, const char* reason) {
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) {
event.set_compileId(compile_id);
event.set_caller(caller);
event.set_callee(callee);
src/hotspot/share/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/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/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) {
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);
commit(event);
}
void CompilerEvent::CompilationFailureEvent::post(EventCompilationFailure& event, int compile_id, const char* reason) {
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
Configuration | enabled |
---|---|
default | false |
profiling | true |
Field | Type | Description |
---|---|---|
failureMessage | string | Failure Message |
compileId | uint | Compilation Identifier |
Examples 3
CompilerInlining
startTime eventThread 11 17 21 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/c1/c1_GraphBuilder.cpp:
void GraphBuilder::print_inlining(ciMethod* callee, const char* msg, bool success) {
CompileLog* log = compilation()->log();
if (log != NULL) {
assert(msg != NULL, "inlining msg should not be null!");
if (success) {
log->inline_success(msg);
} else {
log->inline_fail(msg);
}
}
EventCompilerInlining event;
if (event.should_commit()) {
CompilerEvent::InlineEvent::post(event, compilation()->env()->task()->compile_id(), method()->get_Method(), callee, success, msg, bci());
}
CompileTask::print_inlining_ul(callee, scope()->level(), bci(), msg);
if (!compilation()->directive()->PrintInliningOption) {
return;
}
CompileTask::print_inlining_tty(callee, scope()->level(), bci(), msg);
if (success && CIPrintMethodCodes) {
src/hotspot/share/opto/bytecodeInfo.cpp:
CompileTask::print_inlining_ul(callee_method, inline_level(),
caller_bci, inline_msg);
if (C->print_inlining()) {
C->print_inlining(callee_method, inline_level(), caller_bci, inline_msg);
guarantee(callee_method != NULL, "would crash in CompilerEvent::InlineEvent::post");
if (Verbose) {
const InlineTree *top = this;
while (top->caller_tree() != NULL) { top = top->caller_tree(); }
//tty->print(" bcs: %d+%d invoked: %d", top->count_inline_bcs(), callee_method->code_size(), callee_method->interpreter_invocation_count());
}
}
EventCompilerInlining event;
if (event.should_commit()) {
CompilerEvent::InlineEvent::post(event, C->compile_id(), caller_method->get_Method(), callee_method, success, inline_msg, caller_bci);
}
}
//------------------------------ok_to_inline-----------------------------------
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);
commit(event);
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) {
JfrStructCalleeMethod callee_struct;
callee_struct.set_type(callee->klass_name()->as_utf8());
callee_struct.set_name(callee->name()->as_utf8());
callee_struct.set_descriptor(callee->signature()->as_utf8());
post(event, compile_id, caller, callee_struct, success, msg, bci);
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) {
JfrStructCalleeMethod callee_struct;
callee_struct.set_type(callee->holder()->name()->as_utf8());
callee_struct.set_name(callee->name()->as_utf8());
callee_struct.set_descriptor(callee->signature()->as_symbol()->as_utf8());
post(event, compile_id, caller, callee_struct, success, msg, bci);
}
src/hotspot/share/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/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/JFR.java:
* @param phaseName compiler phase name
* @param compileId current compilation unit id
* @param phaseLevel compiler phase nesting level
*/
public static void write(long startTime, String phaseName, int compileId, int phaseLevel) {
compilerToVM().notifyCompilerPhaseEvent(startTime, getPhaseToId(phaseName), compileId, phaseLevel);
}
}
/**
* Helper methods for managing JFR CompilerInlining events. The events are defined in {see @code
* src/share/jfr/metadata/metadata.xml}.
*/
public static final class CompilerInliningEvent {
/**
* Commits a CompilerInlining event.
*
* @param compileId current compilation unit id
* @param caller caller method
* @param callee callee method
* @param succeeded inlining succeeded or not
* @param message extra information on inlining
* @param bci invocation byte code index
*/
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
compileId | uint | Compilation Identifier |
caller | Method | Caller Method |
callee | CalleeMethod struct | Callee Method |
succeeded | boolean | Succeeded |
message | string | Message |
bci | int | Bytecode Index |
Examples 3
bci | int | 1
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | (D)J
|
name | string | doubleToRawLongBits
|
type | string | java/lang/Double
|
caller | Method | |
descriptor | string | (D)I
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | getExponent
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | java/lang/Math
|
package | Package | |
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 | 1458
|
message | string | intrinsic
|
startTime | long: millis | 421397917
|
succeeded | boolean | true
|
bci | int | 5
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | (Ljava/lang/StringBuilder;)V
|
name | string | <init>
|
type | string | java/lang/String
|
caller | Method | |
descriptor | string | ()Ljava/lang/String;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | toString
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | java/lang/StringBuilder
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
compileId | uint | 1413
|
message | string | inline
|
startTime | long: millis | 359624042
|
succeeded | boolean | true
|
bci | int | 1
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | ()V
|
name | string | flushBuffer
|
type | string | java/io/BufferedOutputStream
|
caller | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | implFlush
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/io/BufferedOutputStream
|
package | Package | |
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/io
|
compileId | uint | 85788
|
message | string | inline (hot)
|
startTime | long: millis | 792085371333
|
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 | reinterpret
|
---|---|---|
bci | int | 13
|
compileId | uint | 2922
|
compiler | CompilerType | c2
|
instruction | Bytecode | ifnonnull
|
lineNumber | int | 592
|
method | Method | |
descriptor | string | (Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | computeIfAbsent
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/util/TreeMap
|
package | Package | |
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 | unstable_if
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 13
|
lineNumber | int | 592
|
method | Method | |
descriptor | string | (Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | computeIfAbsent
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/util/TreeMap
|
package | Package | |
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 | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 1705377958
|
action | DeoptimizationAction | maybe_recompile
|
---|---|---|
bci | int | 51
|
compileId | uint | 2216
|
compiler | CompilerType | c2
|
instruction | Bytecode | invokevirtual
|
lineNumber | int | 1380
|
method | Method | |
descriptor | string | (Ljava/lang/Class;I)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | allocateUninitializedArray
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | jdk/internal/misc/Unsafe
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | jdk/internal/misc
|
reason | DeoptimizationReason | class_check
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 51
|
lineNumber | int | 1380
|
method | Method | |
descriptor | string | (Ljava/lang/Class;I)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | allocateUninitializedArray
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | jdk/internal/misc/Unsafe
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | jdk/internal/misc
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 770250667
|
action | DeoptimizationAction | maybe_recompile
|
---|---|---|
bci | int | 1
|
compileId | uint | 88208
|
compiler | CompilerType | c2
|
instruction | Bytecode | invokevirtual
|
lineNumber | int | 300
|
method | Method | |
descriptor | string | (Lscala/Function1;)V
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | foreach
|
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 | 1025
|
name | string | scala/collection/immutable/Vector
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/collection/immutable
|
reason | DeoptimizationReason | class_check
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 1
|
lineNumber | int | 300
|
method | Method | |
descriptor | string | (Lscala/Function1;)V
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | foreach
|
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 | 1025
|
name | string | scala/collection/immutable/Vector
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/collection/immutable
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 852219303667
|
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 | 3
|
---|---|---|
compileCount | int | 7852
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 9203696
|
nmethodsSize | ulong: bytes | 14626848
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 87
|
peakTimeSpent | long: millis | 953
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 7765
|
startTime | long: millis | 24296439042
|
totalTimeSpent | long: millis | 17710
|
bailoutCount | int | 10
|
---|---|---|
compileCount | int | 86907
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 114019392
|
nmethodsSize | ulong: bytes | 172137240
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 1019
|
peakTimeSpent | long: millis | 10885
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 85888
|
startTime | long: millis | 870919058583
|
totalTimeSpent | long: millis | 393006
|
bailoutCount | int | 2
|
---|---|---|
compileCount | int | 14321
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 17029632
|
nmethodsSize | ulong: bytes | 26163704
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 99
|
peakTimeSpent | long: millis | 1099
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 14222
|
startTime | long: millis | 45296949500
|
totalTimeSpent | long: millis | 38808
|
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 |
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 | DeoptimizeObjectsALotThreadCountSingle
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 15845305792
|
value | int | 1
|
name | string | VMThreadPriority
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 60345409958
|
value | int | -1
|
name | string | DeoptimizeObjectsALotThreadCountAll
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 805718648583
|
value | int | 1
|
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 | G1RemSetArrayOfCardsEntriesBase
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 364799833
|
value | uint | 8
|
name | string | G1ReservePercent
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 798681839500
|
value | uint | 10
|
name | string | MarkSweepAlwaysCompactCount
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 423307458
|
value | uint | 4
|
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 | MaxLoopPad
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773040292
|
value | long | 15
|
name | string | OptoPrologueNops
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 423468625
|
value | long | 0
|
name | string | Tier23InlineeNotifyFreqLog
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 364810583
|
value | long | 20
|
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 | CodeCacheExpansionSize
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 364821500
|
value | ulong | 65536
|
name | string | MinHeapFreeRatio
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 423577083
|
value | ulong | 0
|
name | string | LargePageHeapSizeThreshold
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773064458
|
value | ulong | 134217728
|
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 | G1ConcMarkStepDurationMillis
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 84416262542
|
value | double | 10.0
|
name | string | ZCollectionIntervalMinor
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 817390519792
|
value | double | -1.0
|
name | string | ZCollectionInterval
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 30586858000
|
value | double | 0.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 | TraceTraps
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 423595000
|
value | boolean | false
|
name | string | UseC1Optimizations
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773073750
|
value | boolean | true
|
name | string | C1ProfileCheckcasts
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 364843083
|
value | boolean | true
|
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 | DumpLoadedClassList
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 30519985250
|
value | string | null
|
name | string | InlineDataFile
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 423641292
|
value | string | null
|
name | string | SharedArchiveConfigFile
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 805718884833
|
value | string | null
|
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
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 | 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 | 890268499208
|
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 | 74131859458
|
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 | 78028108125
|
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 |
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 |
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 |
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. |
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 | SerialOld
|
parallelGCThreads | uint | 0
|
pauseTarget | long: millis | -9223372036854775808
|
startTime | long: millis | 15621221667
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | DefNew
|
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 | 18250631375
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | ParallelScavenge
|
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 | 910331828792
|
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
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
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
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
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 |
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 | 2
|
---|---|---|
allocationRegionsUsedAfter | ulong: bytes | 2107744
|
allocationRegionsUsedBefore | ulong: bytes | 0
|
bytesCopied | ulong: bytes | 2107744
|
cSetRegions | uint | 16
|
cSetUsedAfter | ulong: bytes | 0
|
cSetUsedBefore | ulong: bytes | 33554432
|
gcId | uint | 881
|
regionsFreed | uint | 16
|
startTime | long: millis | 820988971083
|
ObjectCountAfterGC
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 | 97058
|
---|---|---|
gcId | uint | 866
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | java/lang/Class
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/lang
|
startTime | long: millis | 792378118375
|
totalSize | ulong: bytes | 11317680
|
count | long | 900
|
---|---|---|
gcId | uint | 0
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/util/LinkedHashMap
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
startTime | long: millis | 372286000
|
totalSize | ulong: bytes | 57600
|