Introduction
The following are the events for OpenJDK 11 (jdk-11.0.29+5, permalink, 12-September-2025), and Graal VM 21.3.12 (jdk-11.0.25) . 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 25 26
Category: Flight Recorder
Who requested the recording and why
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/recorder/repository/jfrEmergencyDump.cpp:
if (exception_handler) {
// we are crashing
if (thread->is_Watcher_thread()) {
// The Watcher thread runs the periodic thread sampling task.
// If it has crashed, it is likely that another thread is
// left in a suspended state. This would mean the system
// will not be able to ever move to a safepoint. We try
// to avoid issuing safepoint operations when attempting
// an emergency dump, but a safepoint might be already pending.
return;
}
prepare_for_emergency_dump(thread);
}
EventDumpReason event;
if (event.should_commit()) {
event.set_reason(exception_handler ? "Crash" : "Out of Memory");
event.set_recordingId(-1);
event.commit();
}
if (!exception_handler) {
// OOM
LeakProfiler::emit_events(max_jlong, false);
}
const int messages = MSGBIT(MSG_VM_ERROR);
ResourceMark rm(thread);
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
reason | string | Reason Reason for writing recording data to disk |
recordingId | int | Recording Id Id of the recording that triggered the dump, or -1 if it was not related to a recording |
DataLoss
default profiling startTime 11 17 21 25 26
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.write<u8>(EventDataLoss::eventId);
writer.write(JfrTicks::now());
writer.write(unflushed_size);
writer.write(total_data_loss);
}
}
static void write_data_loss(BufferPtr buffer, Thread* thread) {
assert(buffer != NULL, "invariant");
const size_t unflushed_size = buffer->unflushed_size();
buffer->concurrent_reinitialization();
if (unflushed_size == 0) {
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 |
ActiveRecording
default profiling startTime duration stackTrace 11 17 21 25 26
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 {
@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 long recordingCounter = 0;
private RepositoryChunk currentChunk;
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);
timer = createTimer();
}
private static Timer createTimer() {
try {
List<Timer> result = new CopyOnWriteArrayList<>();
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java:
chunk.finish(time);
for (PlatformRecording r : getRecordings()) {
if (r != ignoreMe && r.getState() == RecordingState.RUNNING) {
r.appendChunk(chunk);
}
}
}
private void writeMetaEvents() {
if (activeRecordingEvent.isEnabled()) {
for (PlatformRecording r : getRecordings()) {
if (r.getState() == RecordingState.RUNNING && r.shouldWriteMetadataEvent()) {
ActiveRecordingEvent event = new ActiveRecordingEvent();
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();
event.maxSize = size == null ? Long.MAX_VALUE : size;
Instant start = r.getStartTime();
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.SecurityPropertyModificationEvent.class,
jdk.internal.event.SecurityProviderServiceEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class
};
// This is a list of the classes with instrumentation code that should be applied.
private static final Class<?>[] instrumentationClasses = new Class<?>[] {
FileInputStreamInstrumentor.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 |
maxSize | long: bytes | Max Size |
recordingStart | long: epochmillis | Start Time |
recordingDuration | long: millis | Recording Duration |
Examples 3
destination | string | [...]_1/code/experiments/jfreventcollector/jfr/sample_UseParallelGC.jfr
|
---|---|---|
id | long | 1
|
maxAge | long: millis | 9223372036854775807
|
maxSize | long: bytes | 262144000
|
name | string | 1
|
recordingDuration | long: millis | 9223372036854775807
|
recordingStart | long: epochmillis | 1754910547922
|
stackTrace | StackTrace | null
|
startTime | long: millis | 265729902958
|
destination | string | [...]_1/code/experiments/jfreventcollector/jfr/sample_UseG1GC.jfr
|
---|---|---|
id | long | 1
|
maxAge | long: millis | 9223372036854775807
|
maxSize | long: bytes | 262144000
|
name | string | 1
|
recordingDuration | long: millis | 9223372036854775807
|
recordingStart | long: epochmillis | 1754910293748
|
stackTrace | StackTrace | null
|
startTime | long: millis | 246020453958
|
destination | string | [...]_1/code/experiments/jfreventcollector/jfr/sample_UseSerialGC.jfr
|
---|---|---|
id | long | 1
|
maxAge | long: millis | 9223372036854775807
|
maxSize | long: bytes | 262144000
|
name | string | 1
|
recordingDuration | long: millis | 9223372036854775807
|
recordingStart | long: epochmillis | 1754910820635
|
stackTrace | StackTrace | null
|
startTime | long: millis | 273454361292
|
ActiveSetting
default profiling startTime duration stackTrace 11 17 21 25 26
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 {
@Label("Event Id")
public long id;
@Label("Setting Name")
public String name;
@Label("Setting Value")
public String value;
}
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java:
private RepositoryChunk currentChunk;
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);
timer = createTimer();
}
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.SecurityPropertyModificationEvent.class,
jdk.internal.event.SecurityProviderServiceEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class
};
// This is a list of the classes with instrumentation code that should be applied.
private static final Class<?>[] instrumentationClasses = new Class<?>[] {
src/jdk.jfr/share/classes/jdk/jfr/internal/EventControl.java:
void writeActiveSettingEvent() {
if (!type.isRegistered()) {
return;
}
for (Map.Entry<String, Control> entry : eventControls.entrySet()) {
Control c = entry.getValue();
if (Utils.isSettingVisible(c, type.hasEventHook())) {
String value = c.getLastValue();
if (value == null) {
value = c.getDefaultValue();
}
ActiveSettingEvent ase = new ActiveSettingEvent();
ase.id = type.getId();
ase.name = entry.getKey();
ase.value = value;
ase.commit();
}
}
}
public Set<Entry<String, Control>> getEntries() {
return eventControls.entrySet();
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
id | long | Event Id |
name | string | Setting Name |
value | string | Setting Value |
Examples 3
JVM
JVMInformation
default profiling startTime duration end of every chunk 11 17 21 25 26
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 | [...]_1/code/experiments/jfreventcollector/.cache/renaissance.jar -t 5 -r 1 all
|
---|---|---|
jvmArguments | string | -XX:StartFlightRecording=filename=[...]_1/code/experiments/jfreventcollector/jfr/sample_UseG1GC.jfr,settings=[...]_1/code/experiments/jfreventcollector/.cache/jfc.jfc -XX:+UseG1GC
|
jvmFlags | string | null
|
jvmName | string | OpenJDK 64-Bit Server VM
|
jvmStartTime | long: epochmillis | 1754910293523
|
jvmVersion | string | OpenJDK 64-Bit Server VM (21.0.7+6-LTS) for bsd-aarch64 JRE (21.0.7+6-LTS), built on 2025-04-15T00:00:00Z by "admin" with clang Apple LLVM 15.0.0 (clang-1500.1.0.2.5)
|
pid | long | 96009
|
startTime | long: millis | 246021868833
|
javaArguments | string | [...]_1/code/experiments/jfreventcollector/.cache/renaissance.jar -t 5 -r 1 all
|
---|---|---|
jvmArguments | string | -XX:StartFlightRecording=filename=[...]_1/code/experiments/jfreventcollector/jfr/sample_UseParallelGC.jfr,settings=[...]_1/code/experiments/jfreventcollector/.cache/jfc.jfc -XX:+UseParallelGC
|
jvmFlags | string | null
|
jvmName | string | OpenJDK 64-Bit Server VM
|
jvmStartTime | long: epochmillis | 1754910547780
|
jvmVersion | string | OpenJDK 64-Bit Server VM (21.0.7+6-LTS) for bsd-aarch64 JRE (21.0.7+6-LTS), built on 2025-04-15T00:00:00Z by "admin" with clang Apple LLVM 15.0.0 (clang-1500.1.0.2.5)
|
pid | long | 96543
|
startTime | long: millis | 251329633458
|
javaArguments | string | [...]_1/code/experiments/jfreventcollector/.cache/renaissance.jar -t 5 -r 1 all
|
---|---|---|
jvmArguments | string | -XX:StartFlightRecording=filename=[...]_1/code/experiments/jfreventcollector/jfr/sample_UseSerialGC.jfr,settings=[...]_1/code/experiments/jfreventcollector/.cache/jfc.jfc -XX:+UseSerialGC
|
jvmFlags | string | null
|
jvmName | string | OpenJDK 64-Bit Server VM
|
jvmStartTime | long: epochmillis | 1754910820470
|
jvmVersion | string | OpenJDK 64-Bit Server VM (21.0.7+6-LTS) for bsd-aarch64 JRE (21.0.7+6-LTS), built on 2025-04-15T00:00:00Z by "admin" with clang Apple LLVM 15.0.0 (clang-1500.1.0.2.5)
|
pid | long | 97133
|
startTime | long: millis | 284379235417
|
InitialSystemProperty
default profiling startTime end of every chunk 11 17 21 25 26
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 25 26
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:
SystemDictionary_lock->wait();
} else {
double_lock_wait(lockObject, THREAD);
}
} else {
// If not in SD and not in PH, other thread's load must have failed
super_load_in_progress = false;
}
}
}
return NULL;
}
static void 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();
}
// Be careful when modifying this code: once you have run
// placeholders()->find_and_add(PlaceholderTable::LOAD_INSTANCE),
// you need to find_and_remove it before returning.
// So be careful to not exit with a CHECK_ macro betweeen these calls.
Klass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
Handle class_loader,
Handle protection_domain,
TRAPS) {
assert(name != NULL && !FieldType::is_array(name) &&
!FieldType::is_obj(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 d_hash = dictionary->compute_hash(name);
// Do lookup to see if class already exist and the protection domain
// has the right access
src/hotspot/share/classfile/systemDictionary.cpp:
// Note: this method is much like resolve_from_stream, but
// does not publish the classes via the SystemDictionary.
// Handles unsafe_DefineAnonymousClass and redefineclasses
// RedefinedClasses do not add to the class hierarchy
InstanceKlass* SystemDictionary::parse_stream(Symbol* class_name,
Handle class_loader,
Handle protection_domain,
ClassFileStream* st,
const InstanceKlass* host_klass,
GrowableArray<Handle>* cp_patches,
TRAPS) {
EventClassLoad class_load_start_event;
ClassLoaderData* loader_data;
if (host_klass != NULL) {
// Create a new CLD for anonymous class, that uses the same class loader
// as the host_klass
guarantee(host_klass->class_loader() == class_loader(), "should be the same");
loader_data = ClassLoaderData::anonymous_class_loader_data(class_loader);
} else {
loader_data = ClassLoaderData::class_loader_data(class_loader());
}
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 | 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 | 21.0.7
|
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 | 21.0.7
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | true
|
modifiers | int | 4112
|
name | string | org.apache.spark.status.AppStatusListener$$Lambda+0x00000070066d7528/1036554641
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/status
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/String;[BIILjava/security/ProtectionDomain;ZILjava/lang/Object;)Ljava/lang/Class;
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | defineClass0
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1025
|
name | string | java/lang/ClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 254494097042
|
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 | 21.0.7
|
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 | 21.0.7
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1537
|
name | string | scala/reflect/internal/tpe/TypeConstraints
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/reflect/internal/tpe
|
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 | 21.0.7
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | true
|
startTime | long: millis | 244514812417
|
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 | 21.0.7
|
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 | 21.0.7
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | true
|
modifiers | int | 4112
|
name | string | org.apache.spark.ml.recommendation.ALS$$$Lambda+0x00000070066d2978/605537521
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/ml/recommendation
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/String;[BIILjava/security/ProtectionDomain;ZILjava/lang/Object;)Ljava/lang/Class;
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | defineClass0
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1025
|
name | string | java/lang/ClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | true
|
startTime | long: millis | 218956347583
|
ClassDefine
startTime eventThread stackTrace 11 17 21 25 26
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:
// For user defined Java class loaders, check that the name returned is
// the same as that requested. This check is done for the bootstrap
// loader when parsing the class file.
if (class_name == k->name()) {
return k;
}
}
// Class is not found or has the wrong name, return NULL
return NULL;
}
}
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, TRAPS) {
HandleMark hm(THREAD);
ClassLoaderData* loader_data = k->class_loader_data();
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1537
|
name | string | scala/reflect/runtime/SynchronizedOps
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/reflect/runtime
|
definingClassLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
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 | 21.0.7
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 223769508625
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1537
|
name | string | scala/reflect/internal/Kinds
|
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 | 21.0.7
|
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 | 21.0.7
|
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 | 21.0.7
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 244520149292
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1537
|
name | string | scala/reflect/internal/StdAttachments
|
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 | 21.0.7
|
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 | 21.0.7
|
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 | 21.0.7
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 260421581917
|
ClassUnload
startTime eventThread 11 17 21 25 26
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/classLoaderData.cpp:
for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
if (loader_data == data) {
return true;
}
}
}
return false;
}
#if INCLUDE_JFR
static Ticks class_unload_time;
static void post_class_unload_event(Klass* const k) {
assert(k != NULL, "invariant");
EventClassUnload event(UNTIMED);
event.set_endtime(class_unload_time);
event.set_unloadedClass(k);
event.set_definingClassLoader(k->class_loader_data());
event.commit();
}
static void post_class_unload_events() {
assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
if (Jfr::is_enabled()) {
if (EventClassUnload::is_enabled()) {
class_unload_time = Ticks::now();
ClassLoaderDataGraph::classes_unloading_do(&post_class_unload_event);
}
Jfr::on_unloading_classes();
}
}
#endif // INCLUDE_JFR
// Move class loader data from main list to the unloaded list for unloading
// and deallocation later.
bool ClassLoaderDataGraph::do_unloading(bool clean_previous_versions) {
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 | 21.0.7
|
name | string | java/net
|
startTime | long: millis | 246689223125
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | true
|
modifiers | int | 4112
|
name | string | org.renaissance.jdk.streams.MnemonicsCoderWithStream$$Lambda+0x00000070067dd678/350893837
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/renaissance/jdk/streams
|
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 | 21.0.7
|
name | string | java/net
|
startTime | long: millis | 266898607417
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | true
|
modifiers | int | 4112
|
name | string | org.renaissance.jdk.streams.MnemonicsCoderWithStream$$Lambda+0x0000007006878b08/1765986743
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/renaissance/jdk/streams
|
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 | 21.0.7
|
name | string | java/net
|
startTime | long: millis | 226327401625
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | true
|
modifiers | int | 4112
|
name | string | org.renaissance.scala.stdlib.KmeansUtilities$$Lambda+0x0000007006907898/1358471478
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/renaissance/scala/stdlib
|
JVM: Code Cache
CodeCacheFull
default profiling startTime eventThread 11 17 21 25 26
Category: Java Virtual Machine / Code Cache
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/code/codeCache.cpp:
{
ttyLocker ttyl;
tty->print("%s", s.as_string());
}
if (heap->full_count() == 1) {
LogTarget(Debug, codecache) lt;
if (lt.is_enabled()) {
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 25 26
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 25 26
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 | 5494538240
|
startAddress | ulong: address | 5242880000
|
startTime | long: millis | 212458678458
|
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 | 4806557696
|
startAddress | ulong: address | 4554899456
|
startTime | long: millis | 284395137875
|
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 | 4807557120
|
startAddress | ulong: address | 4555898880
|
startTime | long: millis | 255857308417
|
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:
if (_should_sweep) {
_bytes_changed = 0;
}
if (forced) {
// Notify requester that forced sweep finished
assert(_force_sweep, "Should be a forced sweep");
MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
_force_sweep = false;
CodeCache_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;
{
MutexLockerEx 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.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 |
JVM: Compiler
Compilation
default profiling startTime duration eventThread 11 17 21 25 26
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/compileBroker.cpp:
} 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);
}
}
// simulate crash during compilation
assert(task->compile_id() != CICrashAt, "just as planned");
}
static void post_compilation_event(EventCompilation* event, CompileTask* task) {
assert(event != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_method(task->method());
event->set_compileId(task->compile_id());
event->set_compileLevel(task->comp_level());
event->set_succeded(task->is_success());
event->set_isOsr(task->osr_bci() != CompileBroker::standard_entry_bci);
event->set_codeSize((task->code() == NULL) ? 0 : task->code()->total_size());
event->set_inlinedBytes(task->num_inlined_bytecodes());
event->commit();
}
src/hotspot/share/compiler/compileBroker.cpp:
// Allocate a new set of JNI handles.
push_jni_handle_block();
Method* target_handle = task->method();
int compilable = ciEnv::MethodCompilable;
const char* failure_reason = NULL;
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;
// Skip redefined methods
if (target_handle->is_old()) {
failure_reason = "redefined method";
retry_message = "not retryable";
compilable = ciEnv::MethodCompilable_never;
} else {
JVMCIEnv env(task);
methodHandle method(thread, target_handle);
jvmci->compile_method(method, osr_bci, &env);
src/hotspot/share/compiler/compileBroker.cpp:
assert(thread->env() == &ci_env, "set by ci_env");
// The thread-env() field is cleared in ~CompileTaskWrapper.
// Cache Jvmti state
ci_env.cache_jvmti_state();
// 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", !TieredCompilation);
} else {
if (WhiteBoxAPI && WhiteBox::compilation_locked) {
MonitorLockerEx locker(Compilation_lock, Mutex::_no_safepoint_check_flag);
while (WhiteBox::compilation_locked) {
locker.wait(Mutex::_no_safepoint_check_flag);
}
}
comp->compile_method(&ci_env, target, osr_bci, directive);
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;
}
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EventProvider.java:
* Service-provider class for logging compiler related events.
*/
public interface EventProvider {
/**
* 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.
*/
public interface InstantEvent {
/**
* Commits the event.
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EventProvider.java:
public interface TimedEvent extends InstantEvent {
/**
* Starts the timing for this event.
*/
void begin();
/**
* Ends the timing period for this event.
*/
void end();
}
/**
* Creates a new {@link CompilationEvent}.
*
* @return a compilation event
*/
public abstract 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);
void setIsOsr(boolean isOsr);
void setCodeSize(int codeSize);
Configuration | enabled | threshold |
---|---|---|
default | true | 1000 ms |
profiling | true | 100 ms |
Field | Type | Description |
---|---|---|
method | Method | Java Method |
compileId | uint | Compilation Identifier |
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 | 30760
|
---|---|---|
compileId | uint | 107611
|
compileLevel | ushort | 4
|
inlinedBytes | ulong: bytes | 6482
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Ldotty/tools/dotc/ast/Trees$Tree;Ldotty/tools/dotc/core/Types$Type;Ldotty/tools/dotc/util/SimpleIdentitySet;Ldotty/tools/dotc/core/Contexts$Context;)Ldotty/tools/dotc/ast/Trees$Tree;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | typedUnadapted
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | dotty/tools/dotc/typer/Typer
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | dotty/tools/dotc/typer
|
startTime | long: millis | 285775326208
|
succeded | boolean | true
|
codeSize | ulong: bytes | 33728
|
---|---|---|
compileId | uint | 98627
|
compileLevel | ushort | 4
|
inlinedBytes | ulong: bytes | 7934
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Ljava/lang/Object;)V
|
hidden | boolean | true
|
modifiers | int | 1
|
name | string | applyVoid
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | true
|
modifiers | int | 4112
|
name | string | dotty.tools.dotc.core.SymbolLoaders$PackageLoader$$Lambda+0x00000070081255c8/1973339595
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | dotty/tools/dotc/core
|
startTime | long: millis | 264557608583
|
succeded | boolean | true
|
codeSize | ulong: bytes | 3464
|
---|---|---|
compileId | uint | 82635
|
compileLevel | ushort | 4
|
inlinedBytes | ulong: bytes | 464
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Lscala/reflect/ClassTag;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | readObject
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | org/apache/spark/serializer/JavaDeserializationStream
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/serializer
|
startTime | long: millis | 201516355666
|
succeded | boolean | true
|
CompilerPhase
default profiling startTime duration eventThread 11 17 21 25 26
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.hpp:
bool need = directive()->IGVPrintLevelOption >= level;
if (need && !_printer) {
_printer = IdealGraphPrinter::printer();
assert(_printer != NULL, "_printer is NULL when we need it!");
_printer->set_compile(this);
}
return need;
#else
return false;
#endif
}
void print_method(CompilerPhaseType cpt, int level = 1) {
EventCompilerPhase event;
if (event.should_commit()) {
event.set_starttime(C->_latest_stage_start_counter);
event.set_phase((u1) cpt);
event.set_compileId(C->_compile_id);
event.set_phaseLevel(level);
event.commit();
}
#ifndef PRODUCT
if (_printer && should_print(level)) {
_printer->print_method(CompilerPhaseTypeHelper::to_string(cpt), level);
}
#endif
C->_latest_stage_start_counter.stamp();
}
void end_method(int level = 1) {
EventCompilerPhase event;
if (event.should_commit()) {
event.set_starttime(C->_latest_stage_start_counter);
event.set_phase((u1) PHASE_END);
event.set_compileId(C->_compile_id);
event.set_phaseLevel(level);
event.commit();
}
#ifndef PRODUCT
if (_printer && should_print(level)) {
_printer->end_method();
}
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 25 26
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()) {
event.set_compileId(compile_id());
event.set_failureMessage(reason);
event.commit();
}
}
// ------------------------------------------------------------------
// ciEnv::record_method_not_compilable()
void ciEnv::record_method_not_compilable(const char* reason, bool all_tiers) {
int new_compilable =
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 25 26
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/opto/bytecodeInfo.cpp:
const char* InlineTree::check_can_parse(ciMethod* callee) {
// Certain methods cannot be parsed at all:
if ( callee->is_native()) return "native method";
if ( callee->is_abstract()) return "abstract method";
if (!callee->has_balanced_monitors()) return "not compilable (unbalanced monitors)";
if ( callee->get_flow_analysis()->failing()) return "not compilable (flow analysis failed)";
if (!callee->can_be_parsed()) return "cannot be parsed";
return NULL;
}
static void post_inlining_event(int compile_id,const char* msg, bool success, int bci, ciMethod* caller, ciMethod* callee) {
assert(caller != NULL, "invariant");
assert(callee != NULL, "invariant");
EventCompilerInlining event;
if (event.should_commit()) {
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());
event.set_compileId(compile_id);
event.set_message(msg);
event.set_succeeded(success);
event.set_bci(bci);
event.set_caller(caller->get_Method());
event.set_callee(callee_struct);
src/hotspot/share/c1/c1_GraphBuilder.cpp:
Value index = args->at(1);
if (is_store) {
Value value = args->at(2);
Instruction* store = append(new StoreIndexed(array, index, NULL, T_CHAR, value, state_before, false, true));
store->set_flag(Instruction::NeedsRangeCheckFlag, false);
_memory->store_value(value);
} else {
Instruction* load = append(new LoadIndexed(array, index, NULL, T_CHAR, state_before, true));
load->set_flag(Instruction::NeedsRangeCheckFlag, false);
push(load->type(), load);
}
}
static void post_inlining_event(EventCompilerInlining* event,
int compile_id,
const char* msg,
bool success,
int bci,
ciMethod* caller,
ciMethod* callee) {
assert(caller != NULL, "invariant");
assert(callee != NULL, "invariant");
assert(event != NULL, "invariant");
assert(event->should_commit(), "invariant");
JfrStructCalleeMethod callee_struct;
src/hotspot/share/c1/c1_GraphBuilder.cpp:
event->commit();
}
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()) {
post_inlining_event(&event, compilation()->env()->task()->compile_id(), msg, success, bci(), method(), callee);
}
CompileTask::print_inlining_ul(callee, scope()->level(), bci(), msg);
if (!compilation()->directive()->PrintInliningOption) {
return;
}
CompileTask::print_inlining_tty(callee, scope()->level(), bci(), msg);
if (success && CIPrintMethodCodes) {
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
compileId | uint | Compilation Identifier |
caller | Method | Caller Method |
callee | CalleeMethod struct | Callee Method |
succeeded | boolean | Succeeded |
message | string | Message |
bci | int | Byte Code Index |
Examples 3
bci | int | 246
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | ()Z
|
name | string | hasNext
|
type | string | scala/collection/Iterator
|
caller | Method | |
descriptor | string | (Lscala/collection/Iterator;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | write
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 16
|
name | string | org/apache/spark/shuffle/sort/BypassMergeSortShuffleWriter
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/shuffle/sort
|
compileId | uint | 82514
|
message | string | no static binding
|
startTime | long: millis | 199115178958
|
succeeded | boolean | false
|
bci | int | 6
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | ()V
|
name | string | <init>
|
type | string | scala/Option
|
caller | Method | |
descriptor | string | (Ljava/lang/Object;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | scala/Some
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala
|
compileId | uint | 84079
|
message | string | inline
|
startTime | long: millis | 242179383167
|
succeeded | boolean | true
|
bci | int | 121
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | ()[Ljava/lang/Object;
|
name | string | prefix1
|
type | string | scala/collection/immutable/Vector
|
caller | Method | |
descriptor | string | (Lscala/Function1;Z)Lscala/collection/immutable/Vector;
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | filterImpl
|
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 | 21.0.7
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/collection/immutable
|
compileId | uint | 77480
|
message | string | inline
|
startTime | long: millis | 230280859458
|
succeeded | boolean | true
|
CompilerStatistics
default profiling startTime every chunk 11 17 21 25 26
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:
void doit() {
JfrClassLoaderStatsClosure clsc;
ClassLoaderDataGraph::cld_do(&clsc);
clsc.createEvents();
}
};
TRACE_REQUEST_FUNC(ClassLoaderStatistics) {
JfrClassLoaderStatsVMOperation op;
VMThread::execute(&op);
}
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 | 12
|
---|---|---|
compileCount | int | 89034
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 125529728
|
nmethodsSize | ulong: bytes | 186542176
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 1024
|
peakTimeSpent | long: millis | 6943
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 88010
|
startTime | long: millis | 238490247833
|
totalTimeSpent | long: millis | 229849
|
bailoutCount | int | 18
|
---|---|---|
compileCount | int | 96445
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 139523832
|
nmethodsSize | ulong: bytes | 211851144
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 941
|
peakTimeSpent | long: millis | 7513
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 95504
|
startTime | long: millis | 265835361292
|
totalTimeSpent | long: millis | 477251
|
bailoutCount | int | 14
|
---|---|---|
compileCount | int | 88955
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 119999160
|
nmethodsSize | ulong: bytes | 183745288
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 996
|
peakTimeSpent | long: millis | 5569
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 87959
|
startTime | long: millis | 276149977792
|
totalTimeSpent | long: millis | 381359
|
CompilerConfiguration
default profiling startTime end of every chunk 11 17 21 25 26
Category: Java Virtual Machine / Compiler
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_invalidatedCount(CompileBroker::get_total_invalidated_count());
event.set_osrCompileCount(CompileBroker::get_total_osr_compile_count());
event.set_standardCompileCount(CompileBroker::get_total_standard_compile_count());
event.set_osrBytesCompiled(CompileBroker::get_sum_osr_bytes_compiled());
event.set_standardBytesCompiled(CompileBroker::get_sum_standard_bytes_compiled());
event.set_nmethodsSize(CompileBroker::get_sum_nmethod_size());
event.set_nmethodCodeSize(CompileBroker::get_sum_nmethod_code_size());
event.set_peakTimeSpent(CompileBroker::get_peak_compilation_time());
event.set_totalTimeSpent(CompileBroker::get_total_compilation_time());
event.commit();
}
TRACE_REQUEST_FUNC(CompilerConfiguration) {
EventCompilerConfiguration event;
event.set_threadCount(CICompilerCount);
event.set_tieredCompilation(TieredCompilation);
event.commit();
}
TRACE_REQUEST_FUNC(CodeCacheStatistics) {
// Emit stats for all available code heaps
for (int bt = 0; bt < CodeBlobType::NumTypes; ++bt) {
if (CodeCache::heap_available(bt)) {
EventCodeCacheStatistics event;
event.set_codeBlobType((u1)bt);
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
threadCount | int | Thread Count |
tieredCompilation | boolean | Tiered Compilation |
Examples 3
JVM: Flag
IntFlagChanged
default profiling startTime 11 17 21 25 26
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/jvmFlag.cpp:
if (!result->is_int()) return JVMFlag::WRONG_FORMAT;
*value = result->get_int();
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlag::intAtPut(JVMFlag* flag, int* value, JVMFlag::Flags origin) {
const char* name;
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_int()) return JVMFlag::WRONG_FORMAT;
name = flag->_name;
JVMFlag::Error check = apply_constraint_and_check_range_int(name, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
int old_value = flag->get_int();
trace_flag_changed<EventIntFlagChanged, s4>(name, old_value, *value, origin);
check = flag->set_int(*value);
*value = old_value;
flag->set_origin(origin);
return check;
}
JVMFlag::Error JVMFlag::intAtPut(const char* name, size_t len, int* value, JVMFlag::Flags origin) {
JVMFlag* result = JVMFlag::find_flag(name, len);
return intAtPut(result, value, origin);
}
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 25 26
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/jvmFlag.cpp:
if (!result->is_uint()) return JVMFlag::WRONG_FORMAT;
*value = result->get_uint();
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlag::uintAtPut(JVMFlag* flag, uint* value, JVMFlag::Flags origin) {
const char* name;
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_uint()) return JVMFlag::WRONG_FORMAT;
name = flag->_name;
JVMFlag::Error check = apply_constraint_and_check_range_uint(name, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
uint old_value = flag->get_uint();
trace_flag_changed<EventUnsignedIntFlagChanged, u4>(name, old_value, *value, origin);
check = flag->set_uint(*value);
*value = old_value;
flag->set_origin(origin);
return check;
}
JVMFlag::Error JVMFlag::uintAtPut(const char* name, size_t len, uint* value, JVMFlag::Flags origin) {
JVMFlag* result = JVMFlag::find_flag(name, len);
return uintAtPut(result, value, origin);
}
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 25 26
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/jvmFlag.cpp:
JVMFlag::Error JVMFlag::intxAtPut(JVMFlag* flag, intx* value, JVMFlag::Flags origin) {
const char* name;
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_intx()) return JVMFlag::WRONG_FORMAT;
name = flag->_name;
JVMFlag::Error check = apply_constraint_and_check_range_intx(name, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
intx old_value = flag->get_intx();
trace_flag_changed<EventLongFlagChanged, intx>(name, old_value, *value, origin);
check = flag->set_intx(*value);
*value = old_value;
flag->set_origin(origin);
return check;
}
JVMFlag::Error JVMFlag::intxAtPut(const char* name, size_t len, intx* value, JVMFlag::Flags origin) {
JVMFlag* result = JVMFlag::find_flag(name, len);
return intxAtPut(result, value, origin);
}
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 25 26
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/jvmFlag.cpp:
JVMFlag::Error JVMFlag::uintxAtPut(JVMFlag* flag, uintx* value, JVMFlag::Flags origin) {
const char* name;
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_uintx()) return JVMFlag::WRONG_FORMAT;
name = flag->_name;
JVMFlag::Error check = apply_constraint_and_check_range_uintx(name, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
uintx old_value = flag->get_uintx();
trace_flag_changed<EventUnsignedLongFlagChanged, u8>(name, old_value, *value, origin);
check = flag->set_uintx(*value);
*value = old_value;
flag->set_origin(origin);
return check;
}
JVMFlag::Error JVMFlag::uintxAtPut(const char* name, size_t len, uintx* value, JVMFlag::Flags origin) {
JVMFlag* result = JVMFlag::find_flag(name, len);
return uintxAtPut(result, value, origin);
}
src/hotspot/share/runtime/flags/jvmFlag.cpp:
JVMFlag::Error JVMFlag::uint64_tAtPut(JVMFlag* flag, uint64_t* value, JVMFlag::Flags origin) {
const char* name;
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_uint64_t()) return JVMFlag::WRONG_FORMAT;
name = flag->_name;
JVMFlag::Error check = apply_constraint_and_check_range_uint64_t(name, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
uint64_t old_value = flag->get_uint64_t();
trace_flag_changed<EventUnsignedLongFlagChanged, u8>(name, old_value, *value, origin);
check = flag->set_uint64_t(*value);
*value = old_value;
flag->set_origin(origin);
return check;
}
JVMFlag::Error JVMFlag::uint64_tAtPut(const char* name, size_t len, uint64_t* value, JVMFlag::Flags origin) {
JVMFlag* result = JVMFlag::find_flag(name, len);
return uint64_tAtPut(result, value, origin);
}
src/hotspot/share/runtime/flags/jvmFlag.cpp:
JVMFlag::Error JVMFlag::size_tAtPut(JVMFlag* flag, size_t* value, JVMFlag::Flags origin) {
const char* name;
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_size_t()) return JVMFlag::WRONG_FORMAT;
name = flag->_name;
JVMFlag::Error check = apply_constraint_and_check_range_size_t(name, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
size_t old_value = flag->get_size_t();
trace_flag_changed<EventUnsignedLongFlagChanged, u8>(name, old_value, *value, origin);
check = flag->set_size_t(*value);
*value = old_value;
flag->set_origin(origin);
return check;
}
JVMFlag::Error JVMFlag::size_tAtPut(const char* name, size_t len, size_t* value, JVMFlag::Flags origin) {
JVMFlag* result = JVMFlag::find_flag(name, len);
return size_tAtPut(result, value, origin);
}
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 25 26
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/jvmFlag.cpp:
JVMFlag::Error JVMFlag::doubleAtPut(JVMFlag* flag, double* value, JVMFlag::Flags origin) {
const char* name;
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_double()) return JVMFlag::WRONG_FORMAT;
name = flag->_name;
JVMFlag::Error check = apply_constraint_and_check_range_double(name, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
double old_value = flag->get_double();
trace_flag_changed<EventDoubleFlagChanged, double>(name, old_value, *value, origin);
check = flag->set_double(*value);
*value = old_value;
flag->set_origin(origin);
return check;
}
JVMFlag::Error JVMFlag::doubleAtPut(const char* name, size_t len, double* value, JVMFlag::Flags origin) {
JVMFlag* result = JVMFlag::find_flag(name, len);
return doubleAtPut(result, value, origin);
}
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 25 26
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/jvmFlag.cpp:
if (!result->is_bool()) return JVMFlag::WRONG_FORMAT;
*value = result->get_bool();
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlag::boolAtPut(JVMFlag* flag, bool* value, JVMFlag::Flags origin) {
const char* name;
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_bool()) return JVMFlag::WRONG_FORMAT;
name = flag->_name;
JVMFlag::Error check = apply_constraint_and_check_range_bool(name, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
bool old_value = flag->get_bool();
trace_flag_changed<EventBooleanFlagChanged, bool>(name, old_value, *value, origin);
check = flag->set_bool(*value);
*value = old_value;
flag->set_origin(origin);
return check;
}
JVMFlag::Error JVMFlag::boolAtPut(const char* name, size_t len, bool* value, JVMFlag::Flags origin) {
JVMFlag* result = JVMFlag::find_flag(name, len);
return boolAtPut(result, value, origin);
}
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 25 26
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/jvmFlag.cpp:
JVMFlag::Error JVMFlag::ccstrAt(const char* name, size_t len, ccstr* value, bool allow_locked, bool return_flag) {
JVMFlag* result = JVMFlag::find_flag(name, len, allow_locked, return_flag);
if (result == NULL) return JVMFlag::INVALID_FLAG;
if (!result->is_ccstr()) return JVMFlag::WRONG_FORMAT;
*value = result->get_ccstr();
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlag::ccstrAtPut(const char* name, size_t len, ccstr* value, JVMFlag::Flags origin) {
JVMFlag* result = JVMFlag::find_flag(name, len);
if (result == NULL) return JVMFlag::INVALID_FLAG;
if (!result->is_ccstr()) return JVMFlag::WRONG_FORMAT;
ccstr old_value = result->get_ccstr();
trace_flag_changed<EventStringFlagChanged, const char*>(name, old_value, *value, origin);
char* new_value = NULL;
if (*value != NULL) {
new_value = os::strdup_check_oom(*value);
}
JVMFlag::Error check = result->set_ccstr(new_value);
if (result->is_default() && old_value != NULL) {
// Prior value is NOT heap allocated, but was a literal constant.
old_value = os::strdup_check_oom(old_value);
}
*value = old_value;
result->set_origin(origin);
return check;
}
JVMFlag::Error JVMFlagEx::ccstrAtPut(JVMFlagsWithType flag, ccstr value, JVMFlag::Flags origin) {
JVMFlag* faddr = address_of_flag(flag);
guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type");
ccstr old_value = faddr->get_ccstr();
trace_flag_changed<EventStringFlagChanged, const char*>(faddr->_name, old_value, value, origin);
char* new_value = os::strdup_check_oom(value);
JVMFlag::Error check = faddr->set_ccstr(new_value);
if (!faddr->is_default() && old_value != NULL) {
// Prior value is heap allocated so free it.
FREE_C_HEAP_ARRAY(char, old_value);
}
faddr->set_origin(origin);
return check;
}
extern "C" {
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 25 26
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 | JavaPriority4_To_OSPriority
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 233971205292
|
value | int | -1
|
name | string | PerfDataMemorySize
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 201472543291
|
value | int | 32768
|
name | string | PerfMaxStringConstLength
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 252333673750
|
value | int | 1024
|
UnsignedIntFlag
default profiling startTime duration end of every chunk 11 17 21 25 26
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 | ErrorHandlerTest
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 242214087250
|
value | uint | 0
|
name | string | StringDeduplicationAgeThreshold
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 205981149208
|
value | uint | 3
|
name | string | VerifyIterativeGVN
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 273469276000
|
value | uint | 0
|
LongFlag
default profiling startTime duration end of every chunk 11 17 21 25 26
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 | InteriorEntryAlignment
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 230210323958
|
value | long | 16
|
name | string | EliminateAllocationArraySizeLimit
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 199127002166
|
value | long | 64
|
name | string | MaxBCEAEstimateSize
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 242226863250
|
value | long | 150
|
UnsignedLongFlag
default profiling startTime duration end of every chunk 11 17 21 25 26
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 | AdaptiveSizeThroughPutPolicy
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 242226878542
|
value | ulong | 0
|
name | string | AdaptiveSizePolicyCollectionCostMargin
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 199127014000
|
value | ulong | 50
|
name | string | ParallelGCBufferWastePct
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 230210336708
|
value | ulong | 10
|
DoubleFlag
default profiling startTime duration end of every chunk 11 17 21 25 26
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 | MaxRAMPercentage
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 242226893292
|
value | double | 25.0
|
name | string | InitialRAMPercentage
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 218782454958
|
value | double | 1.5625
|
name | string | MinRAMPercentage
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 233971232500
|
value | double | 50.0
|
BooleanFlag
default profiling startTime duration end of every chunk 11 17 21 25 26
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 | StressLoopInvariantCodeMotion
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 230210347583
|
value | boolean | false
|
name | string | PatchALot
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 199127026375
|
value | boolean | false
|
name | string | PrintCodeCacheExtension
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 242226924292
|
value | boolean | false
|
StringFlag
default profiling startTime duration end of every chunk 11 17 21 25 26
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 | CompileCommand
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 242226946833
|
value | string |
name | string | ShenandoahGCMode
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 205981209791
|
value | string | satb
|
name | string | OnOutOfMemoryError
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 230210371458
|
value | string |
JVM: GC: Collector
GarbageCollection
default profiling startTime duration 11 17 21 25 26
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:
#if INCLUDE_G1GC
#include "gc/g1/evacuationInfo.hpp"
#include "gc/g1/g1YCTypes.hpp"
#endif
// 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
ParallelOldGarbageCollection
default profiling startTime duration 11 17 21 25 26
Category: Java Virtual Machine / GC / Collector
Appearing in: ParallelGC
Missing in: G1GC, SerialGC, ShenandoahGC, ZGC
Extra information specific to Parallel Old Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_smallChunksTotalSize(summary.small_chunks_size_in_bytes());
e.set_mediumChunks(summary.num_medium_chunks());
e.set_mediumChunksTotalSize(summary.medium_chunks_size_in_bytes());
e.set_humongousChunks(summary.num_humongous_chunks());
e.set_humongousChunksTotalSize(summary.humongous_chunks_size_in_bytes());
e.commit();
}
}
void ParallelOldTracer::send_parallel_old_event() const {
EventParallelOldGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_densePrefix((TraceAddress)_parallel_old_gc_info.dense_prefix());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void YoungGCTracer::send_young_gc_event() const {
EventYoungGarbageCollection e(UNTIMED);
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
densePrefix | ulong: address | Dense Prefix The address of the dense prefix, used when compacting |
Examples 1
YoungGarbageCollection
default profiling startTime duration 11 17 21 25 26
Category: Java Virtual Machine / GC / Collector
Appearing in: G1GC, ParallelGC, SerialGC
Missing in: ShenandoahGC, ZGC
Extra information specific to Young Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
void ParallelOldTracer::send_parallel_old_event() const {
EventParallelOldGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_densePrefix((TraceAddress)_parallel_old_gc_info.dense_prefix());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void YoungGCTracer::send_young_gc_event() const {
EventYoungGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_tenuringThreshold(_tenuring_threshold);
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
bool YoungGCTracer::should_send_promotion_in_new_plab_event() const {
return EventPromoteObjectInNewPLAB::is_enabled();
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
tenuringThreshold | uint | Tenuring Threshold |
Examples 3
OldGarbageCollection
default profiling startTime duration 11 17 21 25 26
Category: Java Virtual Machine / GC / Collector
Appearing in: G1GC, ParallelGC, SerialGC
Missing in: ShenandoahGC, ZGC
Extra information specific to Old Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
EventPromoteObjectOutsidePLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.commit();
}
}
void OldGCTracer::send_old_gc_event() const {
EventOldGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
static JfrStructCopyFailed to_struct(const CopyFailedInfo& cf_info) {
JfrStructCopyFailed failed_info;
failed_info.set_objectCount(cf_info.failed_count());
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
Examples 3
G1GarbageCollection
default profiling startTime duration 11 17 21 25 26
Category: Java Virtual Machine / GC / Collector
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Extra information specific to G1 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:
// Common to CMS and G1
void OldGCTracer::send_concurrent_mode_failure_event() {
EventConcurrentModeFailure e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.commit();
}
}
#if INCLUDE_G1GC
void G1NewTracer::send_g1_young_gc_event() {
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type(_g1_young_gc_info.type());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void G1MMUTracer::send_g1_mmu_event(double time_slice_ms, double gc_time_ms, double max_time_ms) {
EventG1MMU e;
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
type | G1YCType | Type Consider contributing a description to jfreventcollector. |
Examples 1
JVM: GC: Configuration
GCConfiguration
default profiling startTime duration end of every chunk 11 17 21 25 26
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 | 261258682542
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | DefNew
|
concurrentGCThreads | uint | 3
|
---|---|---|
gcTimeRatio | uint | 12
|
isExplicitGCConcurrent | boolean | false
|
isExplicitGCDisabled | boolean | false
|
oldCollector | GCName | G1Old
|
parallelGCThreads | uint | 10
|
pauseTarget | long: millis | -9223372036854775808
|
startTime | long: millis | 220016528833
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | G1New
|
concurrentGCThreads | uint | 0
|
---|---|---|
gcTimeRatio | uint | 99
|
isExplicitGCConcurrent | boolean | false
|
isExplicitGCDisabled | boolean | false
|
oldCollector | GCName | ParallelOld
|
parallelGCThreads | uint | 10
|
pauseTarget | long: millis | -9223372036854775808
|
startTime | long: millis | 254437616542
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | ParallelScavenge
|
GCSurvivorConfiguration
default profiling startTime duration end of every chunk 11 17 21 25 26
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 25 26
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 25 26
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 25 26
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
G1MMU
default profiling startTime 11 17 21 25 26
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/shared/gcTraceSend.cpp:
#if INCLUDE_G1GC
void G1NewTracer::send_g1_young_gc_event() {
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type(_g1_young_gc_info.type());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
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();
}
}
void G1NewTracer::send_evacuation_info_event(EvacuationInfo* info) {
EventEvacuationInformation e;
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
timeSlice | long: millis | Time Slice Time slice used to calculate MMU |
gcTime | long: millis | GC Time Time stopped because of GC during last time slice |
pauseTarget | long: millis | Pause Target Max time allowed to be spent on GC during last time slice |
Examples 1
EvacuationInformation
default profiling startTime 11 17 21 25 26
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/shared/gcTraceSend.cpp:
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();
}
}
void G1NewTracer::send_evacuation_info_event(EvacuationInfo* 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_copied());
e.set_bytesCopied(info->bytes_copied());
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 | 4
|
---|---|---|
allocationRegionsUsedAfter | ulong: bytes | 23640688
|
allocationRegionsUsedBefore | ulong: bytes | 6192
|
bytesCopied | ulong: bytes | 23634496
|
cSetRegions | uint | 78
|
cSetUsedAfter | ulong: bytes | 0
|
cSetUsedBefore | ulong: bytes | 649006016
|
gcId | uint | 897
|
regionsFreed | uint | 78
|
startTime | long: millis | 243704593458
|
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 | 50852
|
---|---|---|
gcId | uint | 711
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/util/LinkedHashMap
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/util
|
startTime | long: millis | 252430367167
|
totalSize | ulong: bytes | 3254528
|
count | long | 110808
|
---|---|---|
gcId | uint | 783
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1041
|
name | string | [Ljava/lang/Object;
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/lang
|
startTime | long: millis | 200123701541
|
totalSize | ulong: bytes | 10446664
|
count | long | 71941
|
---|---|---|
gcId | uint | 302
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1041
|
name | string | [Ljava/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.7
|
name | string | java/lang
|
startTime | long: millis | 232766745792
|
totalSize | ulong: bytes | 1917376
|
G1EvacuationYoungStatistics
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Memory related evacuation statistics during GC for the young generation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
s.set_allocated(summary.allocated() * HeapWordSize);
s.set_wasted(summary.wasted() * HeapWordSize);
s.set_used(summary.used() * HeapWordSize);
s.set_undoWaste(summary.undo_wasted() * HeapWordSize);
s.set_regionEndWaste(summary.region_end_waste() * HeapWordSize);
s.set_regionsRefilled(summary.regions_filled());
s.set_directAllocated(summary.direct_allocated() * HeapWordSize);
s.set_failureUsed(summary.failure_used() * HeapWordSize);
s.set_failureWaste(summary.failure_waste() * HeapWordSize);
return s;
}
void G1NewTracer::send_young_evacuation_statistics(const G1EvacSummary& summary) const {
EventG1EvacuationYoungStatistics surv_evt;
if (surv_evt.should_commit()) {
surv_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
surv_evt.commit();
}
}
void G1NewTracer::send_old_evacuation_statistics(const G1EvacSummary& summary) const {
EventG1EvacuationOldStatistics old_evt;
if (old_evt.should_commit()) {
old_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
old_evt.commit();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
statistics | G1EvacuationStatistics struct | Evacuation Statistics |
Examples 1
startTime | long: millis | 236157934875
|
---|---|---|
statistics | G1EvacuationStatistics | |
allocated | ulong: bytes | 95760
|
directAllocated | ulong: bytes | 125344
|
failureUsed | ulong: bytes | 0
|
failureWaste | ulong: bytes | 0
|
gcId | uint | 861
|
regionEndWaste | ulong: bytes | 0
|
regionsRefilled | uint | 1
|
undoWaste | ulong: bytes | 0
|
used | ulong: bytes | 38584
|
wasted | ulong: bytes | 32
|
G1EvacuationOldStatistics
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Memory related evacuation statistics during GC for the old generation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
s.set_failureWaste(summary.failure_waste() * HeapWordSize);
return s;
}
void G1NewTracer::send_young_evacuation_statistics(const G1EvacSummary& summary) const {
EventG1EvacuationYoungStatistics surv_evt;
if (surv_evt.should_commit()) {
surv_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
surv_evt.commit();
}
}
void G1NewTracer::send_old_evacuation_statistics(const G1EvacSummary& summary) const {
EventG1EvacuationOldStatistics old_evt;
if (old_evt.should_commit()) {
old_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
old_evt.commit();
}
}
void G1NewTracer::send_basic_ihop_statistics(size_t threshold,
size_t target_occupancy,
size_t current_occupancy,
size_t last_allocation_size,
double last_allocation_duration,
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
statistics | G1EvacuationStatistics struct | Evacuation Statistics |
Examples 1
startTime | long: millis | 251147565541
|
---|---|---|
statistics | G1EvacuationStatistics | |
allocated | ulong: bytes | 132096
|
directAllocated | ulong: bytes | 83472
|
failureUsed | ulong: bytes | 0
|
failureWaste | ulong: bytes | 0
|
gcId | uint | 910
|
regionEndWaste | ulong: bytes | 0
|
regionsRefilled | uint | 1
|
undoWaste | ulong: bytes | 0
|
used | ulong: bytes | 119240
|
wasted | ulong: bytes | 1768
|
G1BasicIHOP
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Basic statistics related to current IHOP calculation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
EventG1EvacuationOldStatistics old_evt;
if (old_evt.should_commit()) {
old_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
old_evt.commit();
}
}
void G1NewTracer::send_basic_ihop_statistics(size_t threshold,
size_t target_occupancy,
size_t current_occupancy,
size_t last_allocation_size,
double last_allocation_duration,
double last_marking_length) {
EventG1BasicIHOP evt;
if (evt.should_commit()) {
evt.set_gcId(GCId::current());
evt.set_threshold(threshold);
evt.set_targetOccupancy(target_occupancy);
evt.set_thresholdPercentage(target_occupancy > 0 ? ((double)threshold / target_occupancy) : 0.0);
evt.set_currentOccupancy(current_occupancy);
evt.set_recentMutatorAllocationSize(last_allocation_size);
evt.set_recentMutatorDuration(last_allocation_duration * MILLIUNITS);
evt.set_recentAllocationRate(last_allocation_duration != 0.0 ? last_allocation_size / last_allocation_duration : 0.0);
evt.set_lastMarkingDuration(last_marking_length * MILLIUNITS);
evt.commit();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
threshold | ulong: bytes | Current IHOP Threshold Current IHOP threshold |
thresholdPercentage | float: percentage | Current IHOP Threshold Current IHOP threshold in percent of old generation |
targetOccupancy | ulong: bytes | Target Occupancy Target old generation occupancy to reach at the start of mixed GC |
currentOccupancy | ulong: bytes | Current Occupancy Current old generation occupancy |
recentMutatorAllocationSize | ulong: bytes | Recent Mutator Allocation Size Mutator allocation during mutator operation in the most recent interval |
recentMutatorDuration | long: millis | Recent Mutator Duration Time the mutator ran in the most recent interval |
recentAllocationRate | double: bytes-per-second | Recent Allocation Rate Allocation rate of the mutator in the most recent interval in bytes/second |
lastMarkingDuration | long: millis | Last Marking Duration Last time from the end of the last initial mark to the first mixed GC |
Examples 1
currentOccupancy | ulong: bytes | 245167240
|
---|---|---|
gcId | uint | 822
|
lastMarkingDuration | long: millis | 264
|
recentAllocationRate | double: bytes-per-second | 0.0
|
recentMutatorAllocationSize | ulong: bytes | 0
|
recentMutatorDuration | long: millis | 123
|
startTime | long: millis | 225378419125
|
targetOccupancy | ulong: bytes | 956301312
|
threshold | ulong: bytes | 0
|
thresholdPercentage | float: percentage | 0.0
|
G1AdaptiveIHOP
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Statistics related to current adaptive IHOP calculation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
evt.set_recentAllocationRate(last_allocation_duration != 0.0 ? last_allocation_size / last_allocation_duration : 0.0);
evt.set_lastMarkingDuration(last_marking_length * MILLIUNITS);
evt.commit();
}
}
void G1NewTracer::send_adaptive_ihop_statistics(size_t threshold,
size_t internal_target_occupancy,
size_t current_occupancy,
size_t additional_buffer_size,
double predicted_allocation_rate,
double predicted_marking_length,
bool prediction_active) {
EventG1AdaptiveIHOP evt;
if (evt.should_commit()) {
evt.set_gcId(GCId::current());
evt.set_threshold(threshold);
evt.set_thresholdPercentage(internal_target_occupancy > 0 ? ((double)threshold / internal_target_occupancy) : 0.0);
evt.set_ihopTargetOccupancy(internal_target_occupancy);
evt.set_currentOccupancy(current_occupancy);
evt.set_additionalBufferSize(additional_buffer_size);
evt.set_predictedAllocationRate(predicted_allocation_rate);
evt.set_predictedMarkingDuration(predicted_marking_length * MILLIUNITS);
evt.set_predictionActive(prediction_active);
evt.commit();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
threshold | ulong: bytes | Threshold Current IHOP Threshold |
thresholdPercentage | float: percentage | Threshold Current IHOP threshold in percent of the internal target occupancy |
ihopTargetOccupancy | ulong: bytes | IHOP Target Occupancy Internal target old generation occupancy to reach at the start of mixed GC |
currentOccupancy | ulong: bytes | Current Occupancy Current old generation occupancy |
additionalBufferSize | ulong: bytes | Additional Buffer Additional buffer size |
predictedAllocationRate | double: bytes-per-second | Predicted Allocation Rate Current predicted allocation rate for the mutator in bytes/second |
predictedMarkingDuration | long: millis | Predicted Marking Duration Current predicted time from the end of the last initial mark to the first mixed GC |
predictionActive | boolean | Prediction Active Indicates whether the adaptive IHOP prediction is active |
Examples 1
additionalBufferSize | ulong: bytes | 2399141888
|
---|---|---|
currentOccupancy | ulong: bytes | 399399560
|
gcId | uint | 869
|
ihopTargetOccupancy | ulong: bytes | 3801297715
|
predictedAllocationRate | double: bytes-per-second | 2.0443863836354275E9
|
predictedMarkingDuration | long: millis | 521
|
predictionActive | boolean | true
|
startTime | long: millis | 238581674583
|
threshold | ulong: bytes | 335102070
|
thresholdPercentage | float: percentage | 0.08815465
|
PromoteObjectInNewPLAB
profiling startTime eventThread 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC, ParallelGC
Missing in: SerialGC, ShenandoahGC, ZGC
Object survived scavenge and was copied to a new Promotion Local Allocation Buffer (PLAB). Supported GCs are Parallel Scavange, G1 and CMS with Parallel New. Due to promotion being done in parallel an object might be reported multiple times as the GC threads race to copy all objects.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
void YoungGCTracer::send_young_gc_event() const {
EventYoungGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_tenuringThreshold(_tenuring_threshold);
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
bool YoungGCTracer::should_send_promotion_in_new_plab_event() const {
return EventPromoteObjectInNewPLAB::is_enabled();
}
bool YoungGCTracer::should_send_promotion_outside_plab_event() const {
return EventPromoteObjectOutsidePLAB::is_enabled();
}
void YoungGCTracer::send_promotion_in_new_plab_event(Klass* klass, size_t obj_size,
uint age, bool tenured,
size_t plab_size) const {
EventPromoteObjectInNewPLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.set_plabSize(plab_size);
event.commit();
}
}
Configuration | enabled |
---|---|
default | false |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier Identifier signifying GC during which the object was promoted |
objectClass | Class | Object Class Class of promoted object |
objectSize | ulong: bytes | Object Size Size of promoted object |
tenuringAge | uint | Object Tenuring Age Tenuring age of a surviving object before being copied. The tenuring age of an object is a value between 0-15 and is incremented each scavange the object survives. Newly allocated objects have tenuring age 0. |
tenured | boolean | Tenured True if object was promoted to Old space, otherwise the object was aged and copied to a Survivor space |
plabSize | ulong: bytes | PLAB Size Size of the allocated PLAB to which the object was copied |
Examples 2
gcId | uint | 297
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | scala/Tuple2
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala
|
objectSize | ulong: bytes | 24
|
plabSize | ulong: bytes | 32752
|
startTime | long: millis | 230210638333
|
tenured | boolean | false
|
tenuringAge | uint | 0
|
gcId | uint | 778
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | jdk/internal/event/ThreadSleepEvent
|
package | Package | |
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.7
|
name | string | jdk/internal/event
|
objectSize | ulong: bytes | 40
|
plabSize | ulong: bytes | 29432
|
startTime | long: millis | 199113209166
|
tenured | boolean | false
|
tenuringAge | uint | 0
|
PromoteObjectOutsidePLAB
profiling startTime eventThread 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC, ParallelGC
Missing in: SerialGC, ShenandoahGC, ZGC
Object survived scavenge and was copied directly to the heap. Supported GCs are Parallel Scavange, G1 and CMS with Parallel New. Due to promotion being done in parallel an object might be reported multiple times as the GC threads race to copy all objects.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_gcId(GCId::current());
e.set_tenuringThreshold(_tenuring_threshold);
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
bool YoungGCTracer::should_send_promotion_in_new_plab_event() const {
return EventPromoteObjectInNewPLAB::is_enabled();
}
bool YoungGCTracer::should_send_promotion_outside_plab_event() const {
return EventPromoteObjectOutsidePLAB::is_enabled();
}
void YoungGCTracer::send_promotion_in_new_plab_event(Klass* klass, size_t obj_size,
uint age, bool tenured,
size_t plab_size) const {
EventPromoteObjectInNewPLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.set_plabSize(plab_size);
event.commit();
}
}
void YoungGCTracer::send_promotion_outside_plab_event(Klass* klass, size_t obj_size,
uint age, bool tenured) const {
EventPromoteObjectOutsidePLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.commit();
}
}
void OldGCTracer::send_old_gc_event() const {
Configuration | enabled |
---|---|
default | false |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier Identifier signifying GC during which the object was promoted |
objectClass | Class | Object Class Class of promoted object |
objectSize | ulong: bytes | Object Size Size of promoted object |
tenuringAge | uint | Object Tenuring Age Tenuring age of a surviving object before being copied. The tenuring age of an object is a value between 0-15 and is incremented each scavange the object survives. Newly allocated objects have tenuring age 0. |
tenured | boolean | Tenured True if object was promoted to Old space, otherwise the object was aged and copied to a Survivor space |
Examples 2
PromotionFailed
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Promotion of an object failed
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
static JfrStructCopyFailed to_struct(const CopyFailedInfo& cf_info) {
JfrStructCopyFailed failed_info;
failed_info.set_objectCount(cf_info.failed_count());
failed_info.set_firstSize(cf_info.first_size() * HeapWordSize);
failed_info.set_smallestSize(cf_info.smallest_size() * HeapWordSize);
failed_info.set_totalSize(cf_info.total_size() * HeapWordSize);
return failed_info;
}
void YoungGCTracer::send_promotion_failed_event(const PromotionFailedInfo& pf_info) const {
EventPromotionFailed e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_promotionFailed(to_struct(pf_info));
e.set_thread(pf_info.thread_trace_id());
e.commit();
}
}
// Common to CMS and G1
void OldGCTracer::send_concurrent_mode_failure_event() {
EventConcurrentModeFailure e;
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
promotionFailed | CopyFailed struct | Promotion Failed Data |
thread | Thread | Running thread |
EvacuationFailed
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Evacuation of an object failed
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
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_copied());
e.set_bytesCopied(info->bytes_copied());
e.set_regionsFreed(info->regions_freed());
e.commit();
}
}
void G1NewTracer::send_evacuation_failed_event(const EvacuationFailedInfo& ef_info) const {
EventEvacuationFailed e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_evacuationFailed(to_struct(ef_info));
e.commit();
}
}
static JfrStructG1EvacuationStatistics
create_g1_evacstats(unsigned gcid, const G1EvacSummary& summary) {
JfrStructG1EvacuationStatistics s;
s.set_gcId(gcid);
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
evacuationFailed | CopyFailed struct | Evacuation Failed Data |
ConcurrentModeFailure
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Concurrent Mode failed
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
void YoungGCTracer::send_promotion_failed_event(const PromotionFailedInfo& pf_info) const {
EventPromotionFailed e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_promotionFailed(to_struct(pf_info));
e.set_thread(pf_info.thread_trace_id());
e.commit();
}
}
// Common to CMS and G1
void OldGCTracer::send_concurrent_mode_failure_event() {
EventConcurrentModeFailure e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.commit();
}
}
#if INCLUDE_G1GC
void G1NewTracer::send_g1_young_gc_event() {
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
Examples 1
AllocationRequiringGC
startTime eventThread stackTrace 11 17 21 25 26
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/allocTracer.cpp:
event.set_allocationSize(alloc_size);
event.commit();
}
}
void AllocTracer::send_allocation_in_new_tlab(Klass* klass, HeapWord* obj, size_t tlab_size, size_t alloc_size, Thread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(obj, alloc_size, thread);)
EventObjectAllocationInNewTLAB event;
if (event.should_commit()) {
event.set_objectClass(klass);
event.set_allocationSize(alloc_size);
event.set_tlabSize(tlab_size);
event.commit();
}
}
void AllocTracer::send_allocation_requiring_gc_event(size_t size, uint gcId) {
EventAllocationRequiringGC event;
if (event.should_commit()) {
event.set_gcId(gcId);
event.set_size(size);
event.commit();
}
}
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
gcId | uint | Pending GC Identifier |
size | ulong: bytes | Allocation Size |
Examples 3
gcId | uint | 376
|
---|---|---|
size | ulong: bytes | 24
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 17
|
lineNumber | int | 97
|
method | Method | |
descriptor | string | (Lcom/twitter/util/Try;)V
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | runInScheduler
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1033
|
name | string | com/twitter/util/Promise$WaitQueue
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | com/twitter/util
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | true
|
startTime | long: millis | 271039293042
|
gcId | uint | 820
|
---|---|---|
size | ulong: bytes | 4194304
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | 339
|
method | Method | |
descriptor | string | ()Ljava/util/stream/Collector;
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | joining
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | java/util/stream/Collectors
|
package | Package | |
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.7
|
name | string | java/util/stream
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | true
|
startTime | long: millis | 225125375250
|
gcId | uint | 778
|
---|---|---|
size | ulong: bytes | 4194320
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 6
|
lineNumber | int | 71
|
method | Method | |
descriptor | string | (IILjava/lang/foreign/MemorySegment;)V
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/nio/HeapByteBuffer
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/nio
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | true
|
startTime | long: millis | 277567754167
|
TenuringDistribution
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC, SerialGC
Missing in: ParallelGC, 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/ageTableTracer.cpp:
void AgeTableTracer::send_tenuring_distribution_event(uint age, size_t size) {
EventTenuringDistribution e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_age(age);
e.set_size(size);
e.commit();
}
}
bool AgeTableTracer::is_tenuring_distribution_event_enabled() {
return EventTenuringDistribution::is_enabled();
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
age | uint | Age |
size | ulong: bytes | Size |
Examples 2
G1HeapRegionTypeChange
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Information about a G1 heap region type change
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/heapRegionTracer.cpp:
void HeapRegionTracer::send_region_type_change(uint index,
G1HeapRegionTraceType::Type from,
G1HeapRegionTraceType::Type to,
uintptr_t start,
size_t used) {
EventG1HeapRegionTypeChange e;
if (e.should_commit()) {
e.set_index(index);
e.set_from(from);
e.set_to(to);
e.set_start(start);
e.set_used(used);
e.commit();
}
}
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
index | uint | Index |
from | G1HeapRegionType | From Consider contributing a description to jfreventcollector. |
to | G1HeapRegionType | To Consider contributing a description to jfreventcollector. |
start | ulong: address | Start |
used | ulong: bytes | Used |
Examples 1
from | G1HeapRegionType | Free
|
---|---|---|
index | uint | 177
|
start | ulong: address | 22959620096
|
startTime | long: millis | 199114849083
|
to | G1HeapRegionType | Free
|
used | ulong: bytes | 0
|
ObjectCount
startTime every chunk 11 17 21 25 26
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:
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 | period |
---|---|---|
default | false | everyChunk |
profiling | false | everyChunk |
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 | 58138
|
---|---|---|
gcId | uint | 708
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | java/time/LocalDateTime
|
package | Package | |
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.7
|
name | string | java/time
|
startTime | long: millis | 243907057708
|
totalSize | ulong: bytes | 1395312
|
G1HeapRegionInformation
startTime duration every chunk 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Information about a specific heap region in the G1 GC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1HeapRegionEventSender.cpp:
class DumpEventInfoClosure : public HeapRegionClosure {
public:
bool do_heap_region(HeapRegion* r) {
EventG1HeapRegionInformation evt;
evt.set_index(r->hrm_index());
evt.set_type(r->get_trace_type());
evt.set_start((uintptr_t)r->bottom());
evt.set_used(r->used());
evt.commit();
return false;
}
};
class VM_G1SendHeapRegionInfoEvents : public VM_Operation {
virtual void doit() {
DumpEventInfoClosure c;
G1CollectedHeap::heap()->heap_region_iterate(&c);
Configuration | enabled | period |
---|---|---|
default | false | everyChunk |
profiling | false | everyChunk |
Field | Type | Description |
---|---|---|
index | uint | Index |
type | G1HeapRegionType | Type Consider contributing a description to jfreventcollector. |
start | ulong: address | Start |
used | ulong: bytes | Used |
Examples 1
ZPageAllocation
experimental default profiling startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: ZGC
Missing in: G1GC, ParallelGC, SerialGC, ShenandoahGC
Allocation of a ZPage
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zTracer.cpp:
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_page_alloc(size_t size, size_t used, size_t free, size_t cache, bool nonblocking, bool noreserve) {
NoSafepointVerifier nsv(true, !SafepointSynchronize::is_at_safepoint());
EventZPageAllocation e;
if (e.should_commit()) {
e.set_pageSize(size);
e.set_usedAfter(used);
e.set_freeAfter(free);
e.set_inCacheAfter(cache);
e.set_nonBlocking(nonblocking);
e.set_noReserve(noreserve);
e.commit();
}
}
Configuration | enabled | threshold |
---|---|---|
default | true | 10 ms |
profiling | true | 10 ms |
Field | Type | Description |
---|---|---|
pageSize | ulong: bytes 11 until JDK 15 | Page Size |
usedAfter | ulong: bytes 11 until JDK 15 | Used After |
freeAfter | ulong: bytes 11 until JDK 15 | Free After |
inCacheAfter | ulong: bytes 11 until JDK 15 | In Cache After |
nonBlocking | boolean | Non-blocking |
noReserve | boolean 11 until JDK 16 | No Reserve |
Examples 1
ZThreadPhase
experimental default profiling startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: ZGC
Missing in: G1GC, ParallelGC, SerialGC, ShenandoahGC
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/z/zTracer.cpp:
NoSafepointVerifier nsv(true, !SafepointSynchronize::is_at_safepoint());
EventZStatisticsSampler e;
if (e.should_commit()) {
e.set_id(sampler_id);
e.set_value(value);
e.commit();
}
}
void ZTracer::send_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
NoSafepointVerifier nsv(true, !SafepointSynchronize::is_at_safepoint());
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_page_alloc(size_t size, size_t used, size_t free, size_t cache, bool nonblocking, bool noreserve) {
NoSafepointVerifier nsv(true, !SafepointSynchronize::is_at_safepoint());
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
Examples 1
ZStatisticsCounter
experimental default profiling startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: ZGC
Missing in: G1GC, ParallelGC, SerialGC, ShenandoahGC
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/z/zTracer.cpp:
ZTracer::ZTracer() :
GCTracer(Z) {}
void ZTracer::initialize() {
assert(_tracer == NULL, "Already initialized");
_tracer = new (ResourceObj::C_HEAP, mtGC) ZTracer();
JFR_ONLY(register_jfr_type_serializers());
}
void ZTracer::send_stat_counter(uint32_t counter_id, uint64_t increment, uint64_t value) {
NoSafepointVerifier nsv(true, !SafepointSynchronize::is_at_safepoint());
EventZStatisticsCounter e;
if (e.should_commit()) {
e.set_id(counter_id);
e.set_increment(increment);
e.set_value(value);
e.commit();
}
}
void ZTracer::send_stat_sampler(uint32_t sampler_id, uint64_t value) {
NoSafepointVerifier nsv(true, !SafepointSynchronize::is_at_safepoint());
Configuration | enabled | threshold |
---|---|---|
default | true | 10 ms |
profiling | true | 10 ms |
Field | Type | Description |
---|---|---|
id | ZStatisticsCounterType | Id Consider contributing a description to jfreventcollector. |
increment | ulong | Increment |
value | ulong | Value |
Examples 1
id | ZStatisticsCounterType | Page Cache Hit L1
|
---|---|---|
increment | ulong | 1
|
startTime | long: millis | 230744621459
|
value | ulong | 3
|
ZStatisticsSampler
experimental default profiling startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: ZGC
Missing in: G1GC, ParallelGC, SerialGC, ShenandoahGC
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/z/zTracer.cpp:
EventZStatisticsCounter e;
if (e.should_commit()) {
e.set_id(counter_id);
e.set_increment(increment);
e.set_value(value);
e.commit();
}
}
void ZTracer::send_stat_sampler(uint32_t sampler_id, uint64_t value) {
NoSafepointVerifier nsv(true, !SafepointSynchronize::is_at_safepoint());
EventZStatisticsSampler e;
if (e.should_commit()) {
e.set_id(sampler_id);
e.set_value(value);
e.commit();
}
}
void ZTracer::send_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
NoSafepointVerifier nsv(true, !SafepointSynchronize::is_at_safepoint());
EventZThreadPhase e(UNTIMED);
Configuration | enabled | threshold |
---|---|---|
default | true | 10 ms |
profiling | true | 10 ms |
Field | Type | Description |
---|---|---|
id | ZStatisticsSamplerType | Id Consider contributing a description to jfreventcollector. |
value | ulong | Value |
Examples 1
id | ZStatisticsSamplerType | Concurrent Mark
|
---|---|---|
startTime | long: millis | 231352469917
|
value | ulong | 51702375
|
ShenandoahHeapRegionStateChange
Category: Java Virtual Machine / GC / Detailed
Appearing in: ShenandoahGC
Missing in: G1GC, ParallelGC, SerialGC, ZGC
Information about a Shenandoah heap region state change
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp:
void ShenandoahHeapRegion::do_uncommit() {
ShenandoahHeap* heap = ShenandoahHeap::heap();
if (!heap->is_heap_region_special() && !os::uncommit_memory((char *) bottom(), RegionSizeBytes)) {
report_java_out_of_memory("Unable to uncommit region");
}
if (!heap->uncommit_bitmap_slice(this)) {
report_java_out_of_memory("Unable to uncommit bitmaps for region");
}
heap->decrease_committed(ShenandoahHeapRegion::region_size_bytes());
}
void ShenandoahHeapRegion::set_state(RegionState to) {
EventShenandoahHeapRegionStateChange evt;
if (evt.should_commit()){
evt.set_index((unsigned)index());
evt.set_start((uintptr_t)bottom());
evt.set_used(used());
evt.set_from(_state);
evt.set_to(to);
evt.commit();
}
_state = to;
}
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
index | uint | Index |
from | ShenandoahHeapRegionState | From Consider contributing a description to jfreventcollector. |
to | ShenandoahHeapRegionState | To Consider contributing a description to jfreventcollector. |
start | ulong: address | Start |
used | ulong: bytes | Used |
Examples 1
from | ShenandoahHeapRegionState | Regular
|
---|---|---|
index | uint | 108
|
start | ulong: address | 21927821312
|
startTime | long: millis | 211616084541
|
to | ShenandoahHeapRegionState | Collection Set
|
used | ulong: bytes | 4194304
|
ShenandoahHeapRegionInformation
startTime duration every chunk 11 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: ShenandoahGC
Missing in: G1GC, ParallelGC, SerialGC, ZGC
Information about a specific heap region in the Shenandoah GC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shenandoah/shenandoahJfrSupport.cpp:
void ShenandoahJFRSupport::register_jfr_type_serializers() {
JfrSerializer::register_serializer(TYPE_SHENANDOAHHEAPREGIONSTATE,
false,
true,
new ShenandoahHeapRegionStateConstant());
}
#endif
class ShenandoahDumpHeapRegionInfoClosure : public ShenandoahHeapRegionClosure {
public:
virtual void heap_region_do(ShenandoahHeapRegion* r) {
EventShenandoahHeapRegionInformation evt;
evt.set_index((unsigned)r->index());
evt.set_state((u8)r->state());
evt.set_start((uintptr_t)r->bottom());
evt.set_used(r->used());
evt.commit();
}
};
void VM_ShenandoahSendHeapRegionInfoEvents::doit() {
ShenandoahDumpHeapRegionInfoClosure c;
ShenandoahHeap::heap()->heap_region_iterate(&c);
Configuration | enabled | period |
---|---|---|
default | false | everyChunk |
profiling | false | everyChunk |
Field | Type | Description |
---|---|---|
index | uint | Index |
state | ShenandoahHeapRegionState | State Consider contributing a description to jfreventcollector. |
start | ulong: address | Start |
used | ulong: bytes | Used |
Examples 1
JVM: GC: Heap
GCHeapSummary
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Heap
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/gcTraceSend.cpp:
space.set_used(summary.used());
space.set_size(summary.size());
return space;
}
class GCHeapSummaryEventSender : public GCHeapSummaryVisitor {
GCWhen::Type _when;
public:
GCHeapSummaryEventSender(GCWhen::Type when) : _when(when) {}
void visit(const GCHeapSummary* heap_summary) const {
const VirtualSpaceSummary& heap_space = heap_summary->heap();
EventGCHeapSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when((u1)_when);
e.set_heapSpace(to_struct(heap_space));
e.set_heapUsed(heap_summary->used());
e.commit();
}
}
void visit(const G1HeapSummary* g1_heap_summary) const {
visit((GCHeapSummary*)g1_heap_summary);
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
when | GCWhen | When Consider contributing a description to jfreventcollector. |
heapSpace | VirtualSpace struct | Heap Space Consider contributing a description to jfreventcollector. |
heapUsed | ulong: bytes | Heap Used Bytes allocated by objects in the heap |
Examples 3
gcId | uint | 819
|
---|---|---|
heapSpace | VirtualSpace | |
committedEnd | ulong: address | 22431137792
|
committedSize | ulong: bytes | 956301312
|
reservedEnd | ulong: address | 34359738368
|
reservedSize | ulong: bytes | 12884901888
|
start | ulong: address | 21474836480
|
heapUsed | ulong: bytes | 458117048
|
startTime | long: millis | 225041717291
|
when | GCWhen | After GC
|
gcId | uint | 317
|
---|---|---|
heapSpace | VirtualSpace | |
committedEnd | ulong: address | 27372552192
|
committedSize | ulong: bytes | 5897715712
|
reservedEnd | ulong: address | 34359738368
|
reservedSize | ulong: bytes | 12884901888
|
start | ulong: address | 21474836480
|
heapUsed | ulong: bytes | 247471336
|
startTime | long: millis | 243546556083
|
when | GCWhen | After GC
|
gcId | uint | 740
|
---|---|---|
heapSpace | VirtualSpace | |
committedEnd | ulong: address | 22529425408
|
committedSize | ulong: bytes | 1054588928
|
reservedEnd | ulong: address | 34359738368
|
reservedSize | ulong: bytes | 12884901888
|
start | ulong: address | 21474836480
|
heapUsed | ulong: bytes | 255173640
|
startTime | long: millis | 266518364375
|
when | GCWhen | After GC
|
MetaspaceSummary
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Heap
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/gcTraceSend.cpp:
static JfrStructMetaspaceSizes to_struct(const MetaspaceSizes& sizes) {
JfrStructMetaspaceSizes meta_sizes;
meta_sizes.set_committed(sizes.committed());
meta_sizes.set_used(sizes.used());
meta_sizes.set_reserved(sizes.reserved());
return meta_sizes;
}
void GCTracer::send_meta_space_summary_event(GCWhen::Type when, const MetaspaceSummary& meta_space_summary) const {
EventMetaspaceSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when((u1) when);
e.set_gcThreshold(meta_space_summary.capacity_until_GC());
e.set_metaspace(to_struct(meta_space_summary.meta_space()));
e.set_dataSpace(to_struct(meta_space_summary.data_space()));
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
when | GCWhen | When Consider contributing a description to jfreventcollector. |
gcThreshold | ulong: bytes | GC Threshold |
metaspace | MetaspaceSizes struct | Total Consider contributing a description to jfreventcollector. |
dataSpace | MetaspaceSizes struct | Data Consider contributing a description to jfreventcollector. |
classSpace | MetaspaceSizes struct | Class Consider contributing a description to jfreventcollector. |
Examples 3
classSpace | MetaspaceSizes | |
---|---|---|
committed | ulong: bytes | 90439680
|
reserved | ulong: bytes | 1073741824
|
used | ulong: bytes | 88521992
|
dataSpace | MetaspaceSizes | |
committed | ulong: bytes | 572653568
|
reserved | ulong: bytes | 603979776
|
used | ulong: bytes | 570679728
|
gcId | uint | 314
|
gcThreshold | ulong: bytes | 1104936960
|
metaspace | MetaspaceSizes | |
committed | ulong: bytes | 663093248
|
reserved | ulong: bytes | 1677721600
|
used | ulong: bytes | 659201720
|
startTime | long: millis | 242215157542
|
when | GCWhen | Before GC
|
classSpace | MetaspaceSizes | |
---|---|---|
committed | ulong: bytes | 92667904
|
reserved | ulong: bytes | 1073741824
|
used | ulong: bytes | 90744624
|
dataSpace | MetaspaceSizes | |
committed | ulong: bytes | 585826304
|
reserved | ulong: bytes | 603979776
|
used | ulong: bytes | 583868592
|
gcId | uint | 737
|
gcThreshold | ulong: bytes | 1130758144
|
metaspace | MetaspaceSizes | |
committed | ulong: bytes | 678494208
|
reserved | ulong: bytes | 1677721600
|
used | ulong: bytes | 674613216
|
startTime | long: millis | 266318439083
|
when | GCWhen | Before GC
|
classSpace | MetaspaceSizes | |
---|---|---|
committed | ulong: bytes | 92864512
|
reserved | ulong: bytes | 1073741824
|
used | ulong: bytes | 90923232
|
dataSpace | MetaspaceSizes | |
committed | ulong: bytes | 586416128
|
reserved | ulong: bytes | 603979776
|
used | ulong: bytes | 584435808
|
gcId | uint | 809
|
gcThreshold | ulong: bytes | 1132134400
|
metaspace | MetaspaceSizes | |
committed | ulong: bytes | 679280640
|
reserved | ulong: bytes | 1677721600
|
used | ulong: bytes | 675359040
|
startTime | long: millis | 224212201833
|
when | GCWhen | After GC
|
PSHeapSummary
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Heap
Appearing in: ParallelGC
Missing in: G1GC, 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/shared/gcTraceSend.cpp:
void visit(const PSHeapSummary* ps_heap_summary) const {
visit((GCHeapSummary*)ps_heap_summary);
const VirtualSpaceSummary& old_summary = ps_heap_summary->old();
const SpaceSummary& old_space = ps_heap_summary->old_space();
const VirtualSpaceSummary& young_summary = ps_heap_summary->young();
const SpaceSummary& eden_space = ps_heap_summary->eden();
const SpaceSummary& from_space = ps_heap_summary->from();
const SpaceSummary& to_space = ps_heap_summary->to();
EventPSHeapSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when((u1)_when);
e.set_oldSpace(to_struct(ps_heap_summary->old()));
e.set_oldObjectSpace(to_struct(ps_heap_summary->old_space()));
e.set_youngSpace(to_struct(ps_heap_summary->young()));
e.set_edenSpace(to_struct(ps_heap_summary->eden()));
e.set_fromSpace(to_struct(ps_heap_summary->from()));
e.set_toSpace(to_struct(ps_heap_summary->to()));
e.commit();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
when | GCWhen | When Consider contributing a description to jfreventcollector. |
oldSpace | VirtualSpace struct | Old Space Consider contributing a description to jfreventcollector. |
oldObjectSpace | ObjectSpace struct | Old Object Space Consider contributing a description to jfreventcollector. |
youngSpace | VirtualSpace struct | Young Space Consider contributing a description to jfreventcollector. |
edenSpace | ObjectSpace struct | Eden Space Consider contributing a description to jfreventcollector. |
fromSpace | ObjectSpace struct | From Space Consider contributing a description to jfreventcollector. |
toSpace | ObjectSpace struct | To Space Consider contributing a description to jfreventcollector. |
Examples 1
edenSpace | ObjectSpace | |
---|---|---|
end | ulong: address | 33392951296
|
size | ulong: bytes | 3328180224
|
start | ulong: address | 30064771072
|
used | ulong: bytes | 0
|
fromSpace | ObjectSpace | |
end | ulong: address | 33634123776
|
size | ulong: bytes | 70778880
|
start | ulong: address | 33563344896
|
used | ulong: bytes | 0
|
gcId | uint | 339
|
oldObjectSpace | ObjectSpace | |
end | ulong: address | 23519035392
|
size | ulong: bytes | 2044198912
|
start | ulong: address | 21474836480
|
used | ulong: bytes | 370405224
|
oldSpace | VirtualSpace | |
committedEnd | ulong: address | 23519035392
|
committedSize | ulong: bytes | 2044198912
|
reservedEnd | ulong: address | 30064771072
|
reservedSize | ulong: bytes | 8589934592
|
start | ulong: address | 21474836480
|
startTime | long: millis | 255808983417
|
toSpace | ObjectSpace | |
end | ulong: address | 33709096960
|
size | ulong: bytes | 74973184
|
start | ulong: address | 33634123776
|
used | ulong: bytes | 0
|
when | GCWhen | After GC
|
youngSpace | VirtualSpace | |
committedEnd | ulong: address | 33709096960
|
committedSize | ulong: bytes | 3644325888
|
reservedEnd | ulong: address | 34359738368
|
reservedSize | ulong: bytes | 4294967296
|
start | ulong: address | 30064771072
|
G1HeapSummary
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Heap
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/shared/gcTraceSend.cpp:
EventGCHeapSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when((u1)_when);
e.set_heapSpace(to_struct(heap_space));
e.set_heapUsed(heap_summary->used());
e.commit();
}
}
void visit(const G1HeapSummary* g1_heap_summary) const {
visit((GCHeapSummary*)g1_heap_summary);
EventG1HeapSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when((u1)_when);
e.set_edenUsedSize(g1_heap_summary->edenUsed());
e.set_edenTotalSize(g1_heap_summary->edenCapacity());
e.set_survivorUsedSize(g1_heap_summary->survivorUsed());
e.set_numberOfRegions(g1_heap_summary->numberOfRegions());
e.commit();
}
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
when | GCWhen | When Consider contributing a description to jfreventcollector. |
edenUsedSize | ulong: bytes | Eden Used Size |
edenTotalSize | ulong: bytes | Eden Total Size |
survivorUsedSize | ulong: bytes | Survivor Used Size |
numberOfRegions | uint | Number of Regions |
Examples 1
JVM: GC: Metaspace
MetaspaceGCThreshold
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Metaspace
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/memory/metaspaceTracer.cpp:
void MetaspaceTracer::report_gc_threshold(size_t old_val,
size_t new_val,
MetaspaceGCThresholdUpdater::Type updater) const {
EventMetaspaceGCThreshold event;
if (event.should_commit()) {
event.set_oldValue(old_val);
event.set_newValue(new_val);
event.set_updater((u1)updater);
event.commit();
}
}
void MetaspaceTracer::report_metaspace_allocation_failure(ClassLoaderData *cld,
size_t word_size,
MetaspaceObj::Type objtype,
Metaspace::MetadataType mdtype) const {
send_allocation_failure_event<EventMetaspaceAllocationFailure>(cld, word_size, objtype, mdtype);
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
oldValue | ulong: bytes | Old Value |
newValue | ulong: bytes | New Value |
updater | GCThresholdUpdater | Updater Consider contributing a description to jfreventcollector. |
Examples 3
MetaspaceAllocationFailure
default profiling startTime stackTrace 11 17 21 25 26
Category: Java Virtual Machine / GC / Metaspace
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/memory/metaspaceTracer.cpp:
EventMetaspaceGCThreshold event;
if (event.should_commit()) {
event.set_oldValue(old_val);
event.set_newValue(new_val);
event.set_updater((u1)updater);
event.commit();
}
}
void MetaspaceTracer::report_metaspace_allocation_failure(ClassLoaderData *cld,
size_t word_size,
MetaspaceObj::Type objtype,
Metaspace::MetadataType mdtype) const {
send_allocation_failure_event<EventMetaspaceAllocationFailure>(cld, word_size, objtype, mdtype);
}
void MetaspaceTracer::report_metadata_oom(ClassLoaderData *cld,
size_t word_size,
MetaspaceObj::Type objtype,
Metaspace::MetadataType mdtype) const {
send_allocation_failure_event<EventMetaspaceOOM>(cld, word_size, objtype, mdtype);
}
template <typename E>
void MetaspaceTracer::send_allocation_failure_event(ClassLoaderData *cld,
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
classLoader | ClassLoader | Class Loader Consider contributing a description to jfreventcollector. |
anonymousClassLoader | boolean 11 until JDK 12 | Anonymous Class Loader |
size | ulong: bytes | Size |
metadataType | MetadataType | Metadata Type Consider contributing a description to jfreventcollector. |
metaspaceObjectType | MetaspaceObjectType | Metaspace Object Type Consider contributing a description to jfreventcollector. |
MetaspaceOOM
default profiling startTime stackTrace 11 17 21 25 26
Category: Java Virtual Machine / GC / Metaspace
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/memory/metaspaceTracer.cpp:
void MetaspaceTracer::report_metaspace_allocation_failure(ClassLoaderData *cld,
size_t word_size,
MetaspaceObj::Type objtype,
Metaspace::MetadataType mdtype) const {
send_allocation_failure_event<EventMetaspaceAllocationFailure>(cld, word_size, objtype, mdtype);
}
void MetaspaceTracer::report_metadata_oom(ClassLoaderData *cld,
size_t word_size,
MetaspaceObj::Type objtype,
Metaspace::MetadataType mdtype) const {
send_allocation_failure_event<EventMetaspaceOOM>(cld, word_size, objtype, mdtype);
}
template <typename E>
void MetaspaceTracer::send_allocation_failure_event(ClassLoaderData *cld,
size_t word_size,
MetaspaceObj::Type objtype,
Metaspace::MetadataType mdtype) const {
E event;
if (event.should_commit()) {
event.set_classLoader(cld);
if (cld->is_anonymous()) {
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
classLoader | ClassLoader | Class Loader Consider contributing a description to jfreventcollector. |
anonymousClassLoader | boolean 11 until JDK 12 | Anonymous Class Loader |
size | ulong: bytes | Size |
metadataType | MetadataType | Metadata Type Consider contributing a description to jfreventcollector. |
metaspaceObjectType | MetaspaceObjectType | Metaspace Object Type Consider contributing a description to jfreventcollector. |
MetaspaceChunkFreeListSummary
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Metaspace
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/gcTraceSend.cpp:
void GCTracer::send_reference_stats_event(ReferenceType type, size_t count) const {
EventGCReferenceStatistics e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type((u1)type);
e.set_count(count);
e.commit();
}
}
void GCTracer::send_metaspace_chunk_free_list_summary(GCWhen::Type when, Metaspace::MetadataType mdtype,
const MetaspaceChunkFreeListSummary& summary) const {
EventMetaspaceChunkFreeListSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when(when);
e.set_metadataType(mdtype);
e.set_specializedChunks(summary.num_specialized_chunks());
e.set_specializedChunksTotalSize(summary.specialized_chunks_size_in_bytes());
e.set_smallChunks(summary.num_small_chunks());
e.set_smallChunksTotalSize(summary.small_chunks_size_in_bytes());
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
when | GCWhen | When Consider contributing a description to jfreventcollector. |
metadataType | MetadataType | Metadata Type Consider contributing a description to jfreventcollector. |
specializedChunks | ulong | Specialized Chunks |
specializedChunksTotalSize | ulong: bytes | Specialized Chunks Total Size |
smallChunks | ulong | Small Chunks |
smallChunksTotalSize | ulong: bytes | Small Chunks Total Size |
mediumChunks | ulong | Medium Chunks |
mediumChunksTotalSize | ulong: bytes | Medium Chunks Total Size |
humongousChunks | ulong | Humongous Chunks |
humongousChunksTotalSize | ulong: bytes | Humongous Chunks Total Size |
Examples 3
gcId | uint | 303
|
---|---|---|
humongousChunks | ulong | 0
|
humongousChunksTotalSize | ulong: bytes | 0
|
mediumChunks | ulong | 0
|
mediumChunksTotalSize | ulong: bytes | 0
|
metadataType | MetadataType | Class
|
smallChunks | ulong | 0
|
smallChunksTotalSize | ulong: bytes | 0
|
specializedChunks | ulong | 0
|
specializedChunksTotalSize | ulong: bytes | 0
|
startTime | long: millis | 233211052167
|
when | GCWhen | Before GC
|
gcId | uint | 785
|
---|---|---|
humongousChunks | ulong | 0
|
humongousChunksTotalSize | ulong: bytes | 0
|
mediumChunks | ulong | 0
|
mediumChunksTotalSize | ulong: bytes | 0
|
metadataType | MetadataType | Class
|
smallChunks | ulong | 0
|
smallChunksTotalSize | ulong: bytes | 0
|
specializedChunks | ulong | 0
|
specializedChunksTotalSize | ulong: bytes | 0
|
startTime | long: millis | 201508787375
|
when | GCWhen | After GC
|
gcId | uint | 722
|
---|---|---|
humongousChunks | ulong | 0
|
humongousChunksTotalSize | ulong: bytes | 0
|
mediumChunks | ulong | 0
|
mediumChunksTotalSize | ulong: bytes | 0
|
metadataType | MetadataType | Class
|
smallChunks | ulong | 0
|
smallChunksTotalSize | ulong: bytes | 0
|
specializedChunks | ulong | 0
|
specializedChunksTotalSize | ulong: bytes | 0
|
startTime | long: millis | 265129771542
|
when | GCWhen | Before GC
|
JVM: GC: Phases
GCPhasePause
default profiling startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / GC / Phases
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/gcTraceSend.cpp:
e.set_gcThreshold(meta_space_summary.capacity_until_GC());
e.set_metaspace(to_struct(meta_space_summary.meta_space()));
e.set_dataSpace(to_struct(meta_space_summary.data_space()));
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 1, "There is only one level for ConcurrentPhase");
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
Examples 3
GCPhasePauseLevel1
default profiling startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / GC / Phases
Appearing in: G1GC, ParallelGC, SerialGC, ShenandoahGC
Missing in: 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/gcTraceSend.cpp:
e.set_metaspace(to_struct(meta_space_summary.meta_space()));
e.set_dataSpace(to_struct(meta_space_summary.data_space()));
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 1, "There is only one level for ConcurrentPhase");
switch (phase->level()) {
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
Examples 3
GCPhasePauseLevel2
default profiling startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / GC / Phases
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/gcTraceSend.cpp:
e.set_dataSpace(to_struct(meta_space_summary.data_space()));
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 1, "There is only one level for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
Examples 3
GCPhasePauseLevel3
startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / GC / Phases
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/gcTraceSend.cpp:
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 1, "There is only one level for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
default: /* Ignore sending this phase */ break;
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
Examples 3
GCPhasePauseLevel4
startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / GC / Phases
Appearing in: G1GC, ParallelGC
Missing in: 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/shared/gcTraceSend.cpp:
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 1, "There is only one level for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
default: /* Ignore sending this phase */ break;
}
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
Examples 2
GCPhaseConcurrent
default profiling startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / GC / Phases
Appearing in: G1GC, ShenandoahGC, ZGC
Missing in: ParallelGC, SerialGC
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/gcTraceSend.cpp:
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 1, "There is only one level for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
public:
template<typename T>
void send_phase(GCPhase* phase) {
T event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_name(phase->name());
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
Examples 3
JVM: GC: Reference
GCReferenceStatistics
default profiling startTime 11 17 21 25 26
Category: Java Virtual Machine / GC / Reference
Total count of processed references during GC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_name(_shared_gc_info.name());
event.set_cause((u2) _shared_gc_info.cause());
event.set_sumOfPauses(_shared_gc_info.sum_of_pauses());
event.set_longestPause(_shared_gc_info.longest_pause());
event.set_starttime(_shared_gc_info.start_timestamp());
event.set_endtime(_shared_gc_info.end_timestamp());
event.commit();
}
}
void GCTracer::send_reference_stats_event(ReferenceType type, size_t count) const {
EventGCReferenceStatistics e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type((u1)type);
e.set_count(count);
e.commit();
}
}
void GCTracer::send_metaspace_chunk_free_list_summary(GCWhen::Type when, Metaspace::MetadataType mdtype,
const MetaspaceChunkFreeListSummary& summary) const {
EventMetaspaceChunkFreeListSummary e;
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
type | ReferenceType | Type Consider contributing a description to jfreventcollector. |
count | ulong | Total Count |
Examples 3
count | ulong | 0
|
---|---|---|
gcId | uint | 717
|
startTime | long: millis | 264847786792
|
type | ReferenceType | Soft reference
|
count | ulong | 2479
|
---|---|---|
gcId | uint | 300
|
startTime | long: millis | 231240193792
|
type | ReferenceType | Phantom reference
|
count | ulong | 0
|
---|---|---|
gcId | uint | 790
|
startTime | long: millis | 205968509625
|
type | ReferenceType | Soft reference
|
JVM: Profiling
OldObjectSample
cutoff default profiling startTime eventThread stackTrace 11 17 21 25 26
Category: Java Virtual Machine / Profiling
A potential memory leak
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/leakprofiler/checkpoint/eventEmitter.cpp:
if (edge == NULL) {
// In order to dump out a representation of the event
// even though it was not reachable / too long to reach,
// we need to register a top level edge for this object.
edge = edge_store->put(object_addr);
} else {
gc_root_id = edge_store->gc_root_id(edge);
}
assert(edge != NULL, "invariant");
const traceid object_id = edge_store->get_id(edge);
assert(object_id != 0, "invariant");
EventOldObjectSample e(UNTIMED);
e.set_starttime(_start_time);
e.set_endtime(_end_time);
e.set_allocationTime(sample->allocation_time());
e.set_lastKnownHeapUsage(sample->heap_used_at_last_gc());
e.set_object(object_id);
e.set_arrayElements(array_size(edge->pointee()));
e.set_root(gc_root_id);
// Temporarily assigning both the stack trace id and thread id
// onto the thread local data structure of the emitter thread (for the duration
// of the commit() call). This trick provides a means to override
src/hotspot/share/jfr/leakprofiler/sampling/objectSampler.cpp:
if (!tl->has_thread_blob()) {
JfrCheckpointManager::create_thread_blob(thread);
}
assert(tl->has_thread_blob(), "invariant");
return tl->thread_id();
}
class RecordStackTrace {
private:
JavaThread* _jt;
bool _enabled;
public:
RecordStackTrace(JavaThread* jt) : _jt(jt),
_enabled(JfrEventSetting::has_stacktrace(EventOldObjectSample::eventId)) {
if (_enabled) {
JfrStackTraceRepository::record_for_leak_profiler(jt);
}
}
~RecordStackTrace() {
if (_enabled) {
_jt->jfr_thread_local()->clear_cached_stack_trace();
}
}
};
src/hotspot/share/jfr/jni/jfrJniMethod.cpp:
NO_TRANSITION(jlong, jfr_elapsed_counter(JNIEnv* env, jobject jvm))
return JfrTicks::now();
NO_TRANSITION_END
NO_TRANSITION(void, jfr_retransform_classes(JNIEnv* env, jobject jvm, jobjectArray classes))
JfrJvmtiAgent::retransform_classes(env, classes, JavaThread::thread_from_jni_environment(env));
NO_TRANSITION_END
NO_TRANSITION(void, jfr_set_enabled(JNIEnv* env, jobject jvm, jlong event_type_id, jboolean enabled))
JfrEventSetting::set_enabled(event_type_id, JNI_TRUE == enabled);
if (EventOldObjectSample::eventId == event_type_id) {
ThreadInVMfromNative transition(JavaThread::thread_from_jni_environment(env));
if (JNI_TRUE == enabled) {
LeakProfiler::start(JfrOptionSet::old_object_queue_size());
} else {
LeakProfiler::stop();
}
}
NO_TRANSITION_END
NO_TRANSITION(void, jfr_set_file_notification(JNIEnv* env, jobject jvm, jlong threshold))
JfrChunkRotation::set_threshold((intptr_t)threshold);
Configuration | cutoff | enabled | stackTrace |
---|---|---|---|
default | 0 ns | true | false |
profiling | 0 ns | true | true |
Field | Type | Description |
---|---|---|
allocationTime | Ticks | Allocation Time Consider contributing a description to jfreventcollector. |
lastKnownHeapUsage | ulong: bytes | Last Known Heap Usage |
object | OldObject | Object Consider contributing a description to jfreventcollector. |
arrayElements | int | Array Elements If the object is an array, the number of elements, or -1 if it is not an array |
root | OldObjectGcRoot | GC Root Consider contributing a description to jfreventcollector. |
Examples 3
allocationTime | Ticks | 145117985083
|
---|---|---|
arrayElements | int | 228140
|
lastKnownHeapUsage | ulong: bytes | 142502888
|
object | OldObject | |
address | ulong: address | 25828351248
|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1041
|
name | string | [B
|
package | Package | null
|
root | OldObjectGcRoot | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 128
|
lineNumber | int | 1678
|
method | Method | |
descriptor | string | (I)V
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | initCEN
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 10
|
name | string | java/util/zip/ZipFile$Source
|
package | Package | |
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.7
|
name | string | java/util/zip
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 294457260833
|
allocationTime | Ticks | 232250885833
|
---|---|---|
arrayElements | int | -2147483648
|
lastKnownHeapUsage | ulong: bytes | 229245104
|
object | OldObject | |
address | ulong: address | 21714772272
|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 8
|
name | string | java/util/LinkedHashMap$Entry
|
package | Package | |
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.7
|
name | string | java/util
|
root | OldObjectGcRoot | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | 281
|
method | Method | |
descriptor | string | (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node;
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | newNode
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/util/LinkedHashMap
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/util
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 253457007166
|
allocationTime | Ticks | 249837693875
|
---|---|---|
arrayElements | int | -2147483648
|
lastKnownHeapUsage | ulong: bytes | 213711392
|
object | OldObject | |
address | ulong: address | 21686571128
|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 8
|
name | string | java/util/HashMap$Node
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/util
|
root | OldObjectGcRoot | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | 1909
|
method | Method | |
descriptor | string | (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/HashMap$Node;)Ljava/util/HashMap$Node;
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | newNode
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/util/HashMap
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/util
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 271918712542
|
ExecutionSample
default profiling startTime every chunk 11 17 21 25 26
Category: Java Virtual Machine / Profiling
Snapshot of a threads state
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
case _thread_in_native_trans:
break;
case _thread_in_native:
return true;
default:
ShouldNotReachHere();
break;
}
return false;
}
class JfrThreadSampleClosure {
public:
JfrThreadSampleClosure(EventExecutionSample* events, EventNativeMethodSample* events_native);
~JfrThreadSampleClosure() {}
EventExecutionSample* next_event() { return &_events[_added_java++]; }
EventNativeMethodSample* next_event_native() { return &_events_native[_added_native++]; }
void commit_events(JfrSampleType type);
bool do_sample_thread(JavaThread* thread, JfrStackFrame* frames, u4 max_frames, JfrSampleType type);
uint java_entries() { return _added_java; }
uint native_entries() { return _added_native; }
private:
bool sample_thread_in_java(JavaThread* thread, JfrStackFrame* frames, u4 max_frames);
bool sample_thread_in_native(JavaThread* thread, JfrStackFrame* frames, u4 max_frames);
EventExecutionSample* _events;
EventNativeMethodSample* _events_native;
Thread* _self;
uint _added_java;
uint _added_native;
};
class OSThreadSampler : public os::SuspendedThreadTask {
public:
OSThreadSampler(JavaThread* thread,
JfrThreadSampleClosure& closure,
JfrStackFrame *frames,
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
// Skip sample if we signaled a thread that moved to other state
if (!thread_state_in_java(jth)) {
return;
}
JfrGetCallTrace trace(true, jth);
frame topframe;
if (trace.get_topframe(context.ucontext(), topframe)) {
if (_stacktrace.record_thread(*jth, topframe)) {
/* If we managed to get a topframe and a stacktrace, create an event
* and put it into our array. We can't call Jfr::_stacktraces.add()
* here since it would allocate memory using malloc. Doing so while
* the stopped thread is inside malloc would deadlock. */
_success = true;
EventExecutionSample *ev = _closure.next_event();
ev->set_starttime(_suspend_time);
ev->set_endtime(_suspend_time); // fake to not take an end time
ev->set_sampledThread(JFR_THREAD_ID(jth));
ev->set_state(java_lang_Thread::get_thread_status(jth->threadObj()));
}
}
}
void OSThreadSampler::take_sample() {
run();
}
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
bool JfrThreadSampleClosure::sample_thread_in_java(JavaThread* thread, JfrStackFrame* frames, u4 max_frames) {
OSThreadSampler sampler(thread, *this, frames, max_frames);
sampler.take_sample();
/* We don't want to allocate any memory using malloc/etc while the thread
* is stopped, so everything is stored in stack allocated memory until this
* point where the thread has been resumed again, if the sampling was a success
* we need to store the stacktrace in the stacktrace repository and update
* the event with the id that was returned. */
if (!sampler.success()) {
return false;
}
EventExecutionSample *event = &_events[_added_java - 1];
traceid id = JfrStackTraceRepository::add(sampler.stacktrace());
assert(id != 0, "Stacktrace id should not be 0");
event->set_stackTrace(id);
return true;
}
bool JfrThreadSampleClosure::sample_thread_in_native(JavaThread* thread, JfrStackFrame* frames, u4 max_frames) {
JfrNativeSamplerCallback cb(*this, thread, frames, max_frames);
if (JfrOptionSet::sample_protection()) {
os::ThreadCrashProtection crash_protection;
if (!crash_protection.call(cb)) {
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
assert(_added_java > 0 && _added_java <= MAX_NR_OF_JAVA_SAMPLES, "invariant");
for (uint i = 0; i < _added_java; ++i) {
_events[i].commit();
}
} else {
assert(NATIVE_SAMPLE == type, "invariant");
assert(_added_native > 0 && _added_native <= MAX_NR_OF_NATIVE_SAMPLES, "invariant");
for (uint i = 0; i < _added_native; ++i) {
_events_native[i].commit();
}
}
}
JfrThreadSampleClosure::JfrThreadSampleClosure(EventExecutionSample* events, EventNativeMethodSample* events_native) :
_events(events),
_events_native(events_native),
_self(Thread::current()),
_added_java(0),
_added_native(0) {
}
class JfrThreadSampler : public NonJavaThread {
friend class JfrThreadSampling;
private:
Semaphore _sample;
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
last_java_ms = get_monotonic_ms();
}
if ((next_n - sleep_to_next) <= 0) {
task_stacktrace(NATIVE_SAMPLE, &_last_thread_native);
last_native_ms = get_monotonic_ms();
}
}
delete this;
}
void JfrThreadSampler::task_stacktrace(JfrSampleType type, JavaThread** last_thread) {
ResourceMark rm;
EventExecutionSample samples[MAX_NR_OF_JAVA_SAMPLES];
EventNativeMethodSample samples_native[MAX_NR_OF_NATIVE_SAMPLES];
JfrThreadSampleClosure sample_task(samples, samples_native);
const uint sample_limit = JAVA_SAMPLE == type ? MAX_NR_OF_JAVA_SAMPLES : MAX_NR_OF_NATIVE_SAMPLES;
uint num_samples = 0;
JavaThread* start = NULL;
{
elapsedTimer sample_time;
sample_time.start();
{
src/hotspot/share/jfr/jni/jfrJniMethod.cpp:
JVM_ENTRY_NO_ENV(void, jfr_subscribe_log_level(JNIEnv* env, jobject jvm, jobject log_tag, jint id))
JfrJavaLog::subscribe_log_level(log_tag, id, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_set_output(JNIEnv* env, jobject jvm, jstring path))
JfrRepository::set_chunk_path(path, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_set_method_sampling_interval(JNIEnv* env, jobject jvm, jlong type, jlong intervalMillis))
if (intervalMillis < 0) {
intervalMillis = 0;
}
JfrEventId typed_event_id = (JfrEventId)type;
assert(EventExecutionSample::eventId == typed_event_id || EventNativeMethodSample::eventId == typed_event_id, "invariant");
if (intervalMillis > 0) {
JfrEventSetting::set_enabled(typed_event_id, true); // ensure sampling event is enabled
}
if (EventExecutionSample::eventId == type) {
JfrThreadSampling::set_java_sample_interval(intervalMillis);
} else {
JfrThreadSampling::set_native_sample_interval(intervalMillis);
}
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_store_metadata_descriptor(JNIEnv* env, jobject jvm, jbyteArray descriptor))
JfrMetadataEvent::update(descriptor);
JVM_END
// trace thread id for a thread object
Configuration | enabled | period |
---|---|---|
default | true | 20 ms |
profiling | true | 10 ms |
Field | Type | Description |
---|---|---|
sampledThread | Thread | Thread Consider contributing a description to jfreventcollector. |
stackTrace | StackTrace | Stack Trace Consider contributing a description to jfreventcollector. |
state | ThreadState | Thread State |
Examples 3
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | Executor task launch worker for task 8.0 in stage 22.0 (TID 163)
|
javaThreadId | long | 1583
|
osName | string | Executor task launch worker for task 8.0 in stage 22.0 (TID 163)
|
osThreadId | long | 147223
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 62
|
lineNumber | int | 182
|
method | Method | |
descriptor | string | (I)I
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | getPos$mcI$sp
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | org/apache/spark/util/collection/OpenHashSet$mcI$sp
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/util/collection
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | true
|
startTime | long: millis | 213051629791
|
state | ThreadState | STATE_RUNNABLE
|
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | Executor task launch worker for task 0.0 in stage 26.0 (TID 195)
|
javaThreadId | long | 1576
|
osName | string | Executor task launch worker for task 0.0 in stage 26.0 (TID 195)
|
osThreadId | long | 261143
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 258
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljava/lang/String;ID[DII[DI)V
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | dspr
|
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 | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | org/netlib/blas/Dspr
|
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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/netlib/blas
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 250111862417
|
state | ThreadState | STATE_RUNNABLE
|
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | Executor task launch worker for task 6.0 in stage 20.0 (TID 141)
|
javaThreadId | long | 1579
|
osName | string | Executor task launch worker for task 6.0 in stage 20.0 (TID 141)
|
osThreadId | long | 168471
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 35
|
lineNumber | int | 444
|
method | Method | |
descriptor | string | (I)I
|
hidden | boolean | false
|
modifiers | int | 4
|
name | string | next
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/util/Random
|
package | Package | |
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.7
|
name | string | java/util
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 242464227708
|
state | ThreadState | STATE_RUNNABLE
|
NativeMethodSample
default profiling startTime every chunk 11 17 21 25 26
Category: Java Virtual Machine / Profiling
Snapshot of a threads state when in native
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
case _thread_in_native_trans:
break;
case _thread_in_native:
return true;
default:
ShouldNotReachHere();
break;
}
return false;
}
class JfrThreadSampleClosure {
public:
JfrThreadSampleClosure(EventExecutionSample* events, EventNativeMethodSample* events_native);
~JfrThreadSampleClosure() {}
EventExecutionSample* next_event() { return &_events[_added_java++]; }
EventNativeMethodSample* next_event_native() { return &_events_native[_added_native++]; }
void commit_events(JfrSampleType type);
bool do_sample_thread(JavaThread* thread, JfrStackFrame* frames, u4 max_frames, JfrSampleType type);
uint java_entries() { return _added_java; }
uint native_entries() { return _added_native; }
private:
bool sample_thread_in_java(JavaThread* thread, JfrStackFrame* frames, u4 max_frames);
bool sample_thread_in_native(JavaThread* thread, JfrStackFrame* frames, u4 max_frames);
EventExecutionSample* _events;
EventNativeMethodSample* _events_native;
Thread* _self;
uint _added_java;
uint _added_native;
};
class OSThreadSampler : public os::SuspendedThreadTask {
public:
OSThreadSampler(JavaThread* thread,
JfrThreadSampleClosure& closure,
JfrStackFrame *frames,
u4 max_frames) : os::SuspendedThreadTask((Thread*)thread),
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
virtual void call();
bool success() { return _success; }
JfrStackTrace& stacktrace() { return _stacktrace; }
private:
JfrThreadSampleClosure& _closure;
JavaThread* _jt;
JfrStackTrace _stacktrace;
bool _success;
};
static void write_native_event(JfrThreadSampleClosure& closure, JavaThread* jt) {
EventNativeMethodSample *ev = closure.next_event_native();
ev->set_starttime(JfrTicks::now());
ev->set_sampledThread(JFR_THREAD_ID(jt));
ev->set_state(java_lang_Thread::get_thread_status(jt->threadObj()));
}
void JfrNativeSamplerCallback::call() {
// When a thread is only attach it will be native without a last java frame
if (!_jt->has_last_Java_frame()) {
return;
}
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
bool JfrThreadSampleClosure::sample_thread_in_native(JavaThread* thread, JfrStackFrame* frames, u4 max_frames) {
JfrNativeSamplerCallback cb(*this, thread, frames, max_frames);
if (JfrOptionSet::sample_protection()) {
os::ThreadCrashProtection crash_protection;
if (!crash_protection.call(cb)) {
log_error(jfr)("Thread method sampler crashed for native");
}
} else {
cb.call();
}
if (!cb.success()) {
return false;
}
EventNativeMethodSample *event = &_events_native[_added_native - 1];
traceid id = JfrStackTraceRepository::add(cb.stacktrace());
assert(id != 0, "Stacktrace id should not be 0");
event->set_stackTrace(id);
return true;
}
static const uint MAX_NR_OF_JAVA_SAMPLES = 5;
static const uint MAX_NR_OF_NATIVE_SAMPLES = 1;
void JfrThreadSampleClosure::commit_events(JfrSampleType type) {
if (JAVA_SAMPLE == type) {
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
assert(_added_java > 0 && _added_java <= MAX_NR_OF_JAVA_SAMPLES, "invariant");
for (uint i = 0; i < _added_java; ++i) {
_events[i].commit();
}
} else {
assert(NATIVE_SAMPLE == type, "invariant");
assert(_added_native > 0 && _added_native <= MAX_NR_OF_NATIVE_SAMPLES, "invariant");
for (uint i = 0; i < _added_native; ++i) {
_events_native[i].commit();
}
}
}
JfrThreadSampleClosure::JfrThreadSampleClosure(EventExecutionSample* events, EventNativeMethodSample* events_native) :
_events(events),
_events_native(events_native),
_self(Thread::current()),
_added_java(0),
_added_native(0) {
}
class JfrThreadSampler : public NonJavaThread {
friend class JfrThreadSampling;
private:
Semaphore _sample;
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
if ((next_n - sleep_to_next) <= 0) {
task_stacktrace(NATIVE_SAMPLE, &_last_thread_native);
last_native_ms = get_monotonic_ms();
}
}
delete this;
}
void JfrThreadSampler::task_stacktrace(JfrSampleType type, JavaThread** last_thread) {
ResourceMark rm;
EventExecutionSample samples[MAX_NR_OF_JAVA_SAMPLES];
EventNativeMethodSample samples_native[MAX_NR_OF_NATIVE_SAMPLES];
JfrThreadSampleClosure sample_task(samples, samples_native);
const uint sample_limit = JAVA_SAMPLE == type ? MAX_NR_OF_JAVA_SAMPLES : MAX_NR_OF_NATIVE_SAMPLES;
uint num_samples = 0;
JavaThread* start = NULL;
{
elapsedTimer sample_time;
sample_time.start();
{
MonitorLockerEx tlock(Threads_lock, Mutex::_allow_vm_block_flag);
src/hotspot/share/jfr/jni/jfrJniMethod.cpp:
JVM_ENTRY_NO_ENV(void, jfr_subscribe_log_level(JNIEnv* env, jobject jvm, jobject log_tag, jint id))
JfrJavaLog::subscribe_log_level(log_tag, id, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_set_output(JNIEnv* env, jobject jvm, jstring path))
JfrRepository::set_chunk_path(path, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_set_method_sampling_interval(JNIEnv* env, jobject jvm, jlong type, jlong intervalMillis))
if (intervalMillis < 0) {
intervalMillis = 0;
}
JfrEventId typed_event_id = (JfrEventId)type;
assert(EventExecutionSample::eventId == typed_event_id || EventNativeMethodSample::eventId == typed_event_id, "invariant");
if (intervalMillis > 0) {
JfrEventSetting::set_enabled(typed_event_id, true); // ensure sampling event is enabled
}
if (EventExecutionSample::eventId == type) {
JfrThreadSampling::set_java_sample_interval(intervalMillis);
} else {
JfrThreadSampling::set_native_sample_interval(intervalMillis);
}
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_store_metadata_descriptor(JNIEnv* env, jobject jvm, jbyteArray descriptor))
Configuration | enabled | period |
---|---|---|
default | true | 20 ms |
profiling | true | 20 ms |
Field | Type | Description |
---|---|---|
sampledThread | Thread | Thread Consider contributing a description to jfreventcollector. |
stackTrace | StackTrace | Stack Trace Consider contributing a description to jfreventcollector. |
state | ThreadState | Thread State |
Examples 3
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | SparkUI-1537
|
javaThreadId | long | 1537
|
osName | string | SparkUI-1537
|
osThreadId | long | 155155
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (IJIJ)I
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | poll
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | sun/nio/ch/KQueue
|
package | Package | |
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.7
|
name | string | sun/nio/ch
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 231811384208
|
state | ThreadState | STATE_RUNNABLE
|
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | finagle/netty4
|
parent | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | finagle/netty4-2-18
|
javaThreadId | long | 1225
|
osName | string | finagle/netty4-2-18
|
osThreadId | long | 174343
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (IJIJ)I
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | poll
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | sun/nio/ch/KQueue
|
package | Package | |
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.7
|
name | string | sun/nio/ch
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 200179162416
|
state | ThreadState | STATE_RUNNABLE
|
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | finagle/netty4
|
parent | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | finagle/netty4-2-5
|
javaThreadId | long | 1195
|
osName | string | finagle/netty4-2-5
|
osThreadId | long | 34351
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (IJIJ)I
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | poll
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | sun/nio/ch/KQueue
|
package | Package | |
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.7
|
name | string | sun/nio/ch
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 242417243208
|
state | ThreadState | STATE_RUNNABLE
|
JVM: Runtime
BiasedLockRevocation
default profiling startTime duration eventThread stackTrace 11 17 until JDK 18
Category: Java Virtual Machine / Runtime
Revoked bias of object
Code Context
The event is likely defined and utilized 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/biasedLocking.cpp:
assert(event != NULL, "invariant");
// Subtract 1 to match the id of events committed inside the safepoint
event->set_safepointId(SafepointSynchronize::safepoint_counter() - 1);
}
static void post_self_revocation_event(EventBiasedLockSelfRevocation* event, Klass* k) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_lockClass(k);
event->commit();
}
static void post_revocation_event(EventBiasedLockRevocation* event, Klass* k, VM_RevokeBias* revoke) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(revoke != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_lockClass(k);
set_safepoint_id(event);
event->set_previousOwner(revoke->biased_locker());
event->commit();
}
static void post_class_revocation_event(EventBiasedLockClassRevocation* event, Klass* k, bool disabled_bias) {
src/hotspot/share/runtime/biasedLocking.cpp:
// can come in with a CAS to steal the bias of an object that has a
// stale epoch.
ResourceMark rm;
log_info(biasedlocking)("Revoking bias by walking my own stack:");
EventBiasedLockSelfRevocation event;
BiasedLocking::Condition cond = revoke_bias(obj(), false, false, (JavaThread*) THREAD, NULL);
((JavaThread*) THREAD)->set_cached_monitor_info(NULL);
assert(cond == BIAS_REVOKED, "why not?");
if (event.should_commit()) {
post_self_revocation_event(&event, k);
}
return cond;
} else {
EventBiasedLockRevocation event;
VM_RevokeBias revoke(&obj, (JavaThread*) THREAD);
VMThread::execute(&revoke);
if (event.should_commit() && revoke.status_code() != NOT_BIASED) {
post_revocation_event(&event, k, &revoke);
}
return revoke.status_code();
}
}
assert((heuristics == HR_BULK_REVOKE) ||
(heuristics == HR_BULK_REBIAS), "?");
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
lockClass | Class | Lock Class Class of object whose biased lock was revoked |
safepointId | int | Safepoint Identifier |
previousOwner | Thread | Previous Owner Thread owning the bias before revocation |
BiasedLockSelfRevocation
default profiling startTime duration eventThread stackTrace 11 17 until JDK 18
Category: Java Virtual Machine / Runtime
Revoked bias of object biased towards own thread
Code Context
The event is likely defined and utilized 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/biasedLocking.cpp:
virtual void doit() {
_status_code = bulk_revoke_or_rebias_at_safepoint((*_obj)(), _bulk_rebias, _attempt_rebias_of_object, _requesting_thread);
clean_up_cached_monitor_info();
}
};
template <typename E>
static void set_safepoint_id(E* event) {
assert(event != NULL, "invariant");
// Subtract 1 to match the id of events committed inside the safepoint
event->set_safepointId(SafepointSynchronize::safepoint_counter() - 1);
}
static void post_self_revocation_event(EventBiasedLockSelfRevocation* event, Klass* k) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_lockClass(k);
event->commit();
}
static void post_revocation_event(EventBiasedLockRevocation* event, Klass* k, VM_RevokeBias* revoke) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(revoke != NULL, "invariant");
src/hotspot/share/runtime/biasedLocking.cpp:
if (mark->biased_locker() == THREAD &&
prototype_header->bias_epoch() == mark->bias_epoch()) {
// A thread is trying to revoke the bias of an object biased
// toward it, again likely due to an identity hash code
// computation. We can again avoid a safepoint in this case
// since we are only going to walk our own stack. There are no
// races with revocations occurring in other threads because we
// reach no safepoints in the revocation path.
// Also check the epoch because even if threads match, another thread
// can come in with a CAS to steal the bias of an object that has a
// stale epoch.
ResourceMark rm;
log_info(biasedlocking)("Revoking bias by walking my own stack:");
EventBiasedLockSelfRevocation event;
BiasedLocking::Condition cond = revoke_bias(obj(), false, false, (JavaThread*) THREAD, NULL);
((JavaThread*) THREAD)->set_cached_monitor_info(NULL);
assert(cond == BIAS_REVOKED, "why not?");
if (event.should_commit()) {
post_self_revocation_event(&event, k);
}
return cond;
} else {
EventBiasedLockRevocation event;
VM_RevokeBias revoke(&obj, (JavaThread*) THREAD);
VMThread::execute(&revoke);
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
lockClass | Class | Lock Class Class of object whose biased lock was revoked |
BiasedLockClassRevocation
default profiling startTime duration eventThread stackTrace 11 17 until JDK 18
Category: Java Virtual Machine / Runtime
Revoked biases for all instances of a class
Code Context
The event is likely defined and utilized 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/biasedLocking.cpp:
static void post_revocation_event(EventBiasedLockRevocation* event, Klass* k, VM_RevokeBias* revoke) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(revoke != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_lockClass(k);
set_safepoint_id(event);
event->set_previousOwner(revoke->biased_locker());
event->commit();
}
static void post_class_revocation_event(EventBiasedLockClassRevocation* event, Klass* k, bool disabled_bias) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_revokedClass(k);
event->set_disableBiasing(disabled_bias);
set_safepoint_id(event);
event->commit();
}
BiasedLocking::Condition BiasedLocking::revoke_and_rebias(Handle obj, bool attempt_rebias, TRAPS) {
assert(!SafepointSynchronize::is_at_safepoint(), "must not be called while at safepoint");
src/hotspot/share/runtime/biasedLocking.cpp:
} else {
EventBiasedLockRevocation event;
VM_RevokeBias revoke(&obj, (JavaThread*) THREAD);
VMThread::execute(&revoke);
if (event.should_commit() && revoke.status_code() != NOT_BIASED) {
post_revocation_event(&event, k, &revoke);
}
return revoke.status_code();
}
}
assert((heuristics == HR_BULK_REVOKE) ||
(heuristics == HR_BULK_REBIAS), "?");
EventBiasedLockClassRevocation event;
VM_BulkRevokeBias bulk_revoke(&obj, (JavaThread*) THREAD,
(heuristics == HR_BULK_REBIAS),
attempt_rebias);
VMThread::execute(&bulk_revoke);
if (event.should_commit()) {
post_class_revocation_event(&event, obj->klass(), heuristics != HR_BULK_REBIAS);
}
return bulk_revoke.status_code();
}
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
revokedClass | Class | Revoked Class Class whose biased locks were revoked |
disableBiasing | boolean | Disable Further Biasing Whether further biasing for instances of this class will be allowed |
safepointId | int | Safepoint Identifier |
ReservedStackActivation
default profiling startTime eventThread stackTrace 11 17 21 25 26
Category: Java Virtual Machine / Runtime
Activation of Reserved Stack Area caused by stack overflow with ReservedStackAccess annotated method in call stack
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/sharedRuntime.cpp:
for (ScopeDesc *sd = nm->scope_desc_near(fr.pc()); sd != NULL; sd = sd->sender()) {
method = sd->method();
if (method != NULL && method->has_reserved_stack_access()) {
found = true;
}
}
}
}
if (found) {
activation = fr;
warning("Potentially dangerous stack overflow in "
"ReservedStackAccess annotated method %s [%d]",
method->name_and_sig_as_C_string(), count++);
EventReservedStackActivation event;
if (event.should_commit()) {
event.set_method(method);
event.commit();
}
}
if (fr.is_first_java_frame()) {
break;
} else {
fr = fr.java_sender();
}
}
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
method | Method | Java Method |
SafepointBegin
default profiling startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / Runtime / Safepoint
Safepointing begin
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/safepoint.cpp:
#ifdef COMPILER1
#include "c1/c1_globals.hpp"
#endif
template <typename E>
static void set_current_safepoint_id(E* event, int adjustment = 0) {
assert(event != NULL, "invariant");
event->set_safepointId(SafepointSynchronize::safepoint_counter() + adjustment);
}
static void post_safepoint_begin_event(EventSafepointBegin* event,
int thread_count,
int critical_thread_count) {
assert(event != NULL, "invariant");
assert(event->should_commit(), "invariant");
set_current_safepoint_id(event);
event->set_totalThreadCount(thread_count);
event->set_jniCriticalThreadCount(critical_thread_count);
event->commit();
}
static void post_safepoint_cleanup_event(EventSafepointCleanup* event) {
src/hotspot/share/runtime/safepoint.cpp:
SafepointSynchronize::SynchronizeState volatile SafepointSynchronize::_state = SafepointSynchronize::_not_synchronized;
volatile int SafepointSynchronize::_waiting_to_block = 0;
volatile int SafepointSynchronize::_safepoint_counter = 0;
int SafepointSynchronize::_current_jni_active_count = 0;
long SafepointSynchronize::_end_of_last_safepoint = 0;
int SafepointSynchronize::_defer_thr_suspend_loop_count = 4000;
static const int safepoint_spin_before_yield = 2000;
static volatile int PageArmed = 0 ; // safepoint polling page is RO|RW vs PROT_NONE
static volatile int TryingToBlock = 0 ; // proximate value -- for advisory use only
static bool timeout_error_printed = false;
// Roll all threads forward to a safepoint and suspend them all
void SafepointSynchronize::begin() {
EventSafepointBegin begin_event;
Thread* myThread = Thread::current();
assert(myThread->is_VM_thread(), "Only VM thread may execute a safepoint");
if (PrintSafepointStatistics || PrintSafepointStatisticsTimeout > 0) {
_safepoint_begin_time = os::javaTimeNanos();
_ts_of_current_safepoint = tty->time_stamp().seconds();
}
Universe::heap()->safepoint_synchronize_begin();
// By getting the Threads_lock, we assure that no threads are about to start or
Configuration | enabled | threshold |
---|---|---|
default | true | 10 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | int | Safepoint Identifier |
totalThreadCount | int | Total Threads The total number of threads at the start of safe point |
jniCriticalThreadCount | int | JNI Critical Threads The number of threads in JNI critical sections |
Examples 3
SafepointStateSynchronization
startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / Runtime / Safepoint
Synchronize run state of threads
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/safepoint.cpp:
set_current_safepoint_id(event);
event->set_totalThreadCount(thread_count);
event->set_jniCriticalThreadCount(critical_thread_count);
event->commit();
}
static void post_safepoint_cleanup_event(EventSafepointCleanup* event) {
assert(event != NULL, "invariant");
assert(event->should_commit(), "invariant");
set_current_safepoint_id(event);
event->commit();
}
static void post_safepoint_synchronize_event(EventSafepointStateSynchronization* event,
int initial_number_of_threads,
int threads_waiting_to_block,
unsigned int iterations) {
assert(event != NULL, "invariant");
if (event->should_commit()) {
// Group this event together with the ones committed after the counter is increased
set_current_safepoint_id(event, 1);
event->set_initialThreadCount(initial_number_of_threads);
event->set_runningThreadCount(threads_waiting_to_block);
event->set_iterations(iterations);
event->commit();
src/hotspot/share/runtime/safepoint.cpp:
// on every call to native code.
// 3. Running compiled Code
// Compiled code reads a global (Safepoint Polling) page that
// is set to fault if we are trying to get to a safepoint.
// 4. Blocked
// A thread which is blocked will not be allowed to return from the
// block condition until the safepoint operation is complete.
// 5. In VM or Transitioning between states
// If a Java thread is currently running in the VM or transitioning
// between states, the safepointing code will wait for the thread to
// block itself when it attempts transitions to a new state.
//
{
EventSafepointStateSynchronization sync_event;
int initial_running = 0;
_state = _synchronizing;
if (SafepointMechanism::uses_thread_local_poll()) {
// Arming the per thread poll while having _state != _not_synchronized means safepointing
log_trace(safepoint)("Setting thread local yield flag for threads");
OrderAccess::storestore(); // storestore, global state -> local state
for (JavaThreadIteratorWithHandle jtiwh; JavaThread *cur = jtiwh.next(); ) {
// Make sure the threads start polling, it is time to yield.
SafepointMechanism::arm_local_poll(cur);
Configuration | enabled | threshold |
---|---|---|
default | false | 10 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | int | Safepoint Identifier |
initialThreadCount | int | Initial Threads The number of threads running at the beginning of state check |
runningThreadCount | int | Running Threads The number of threads still running |
iterations | int | Iterations Number of state check iterations |
Examples 3
SafepointWaitBlocked
startTime duration eventThread 11 until JDK 13
Category: Java Virtual Machine / Runtime / Safepoint
Safepointing begin waiting on running threads to block
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/safepoint.cpp:
int threads_waiting_to_block,
unsigned int iterations) {
assert(event != NULL, "invariant");
if (event->should_commit()) {
// Group this event together with the ones committed after the counter is increased
set_current_safepoint_id(event, 1);
event->set_initialThreadCount(initial_number_of_threads);
event->set_runningThreadCount(threads_waiting_to_block);
event->set_iterations(iterations);
event->commit();
}
}
static void post_safepoint_wait_blocked_event(EventSafepointWaitBlocked* event,
int initial_threads_waiting_to_block) {
assert(event != NULL, "invariant");
assert(event->should_commit(), "invariant");
set_current_safepoint_id(event);
event->set_runningThreadCount(initial_threads_waiting_to_block);
event->commit();
}
static void post_safepoint_cleanup_task_event(EventSafepointCleanupTask* event,
const char* name) {
assert(event != NULL, "invariant");
src/hotspot/share/runtime/safepoint.cpp:
} // ThreadsListHandle destroyed here.
assert(still_running == 0, "sanity check");
if (PrintSafepointStatistics) {
update_statistics_on_spin_end();
}
if (sync_event.should_commit()) {
post_safepoint_synchronize_event(&sync_event, initial_running, _waiting_to_block, iterations);
}
}
// wait until all threads are stopped
{
EventSafepointWaitBlocked wait_blocked_event;
int initial_waiting_to_block = _waiting_to_block;
while (_waiting_to_block > 0) {
log_debug(safepoint)("Waiting for %d thread(s) to block", _waiting_to_block);
if (!SafepointTimeout || timeout_error_printed) {
Safepoint_lock->wait(true); // true, means with no safepoint checks
} else {
// Compute remaining time
jlong remaining_time = safepoint_limit_time - os::javaTimeNanos();
// If there is no remaining time, then there is an error
Configuration | enabled | threshold |
---|---|---|
default | false | 10 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | int | Safepoint Identifier |
runningThreadCount | int | Running Threads The number running of threads wait for safe point |
SafepointCleanup
startTime duration eventThread 11 17 21 until JDK 23
Category: Java Virtual Machine / Runtime / Safepoint
Safepointing begin running cleanup tasks
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/safepoint.cpp:
static void post_safepoint_begin_event(EventSafepointBegin* event,
int thread_count,
int critical_thread_count) {
assert(event != NULL, "invariant");
assert(event->should_commit(), "invariant");
set_current_safepoint_id(event);
event->set_totalThreadCount(thread_count);
event->set_jniCriticalThreadCount(critical_thread_count);
event->commit();
}
static void post_safepoint_cleanup_event(EventSafepointCleanup* event) {
assert(event != NULL, "invariant");
assert(event->should_commit(), "invariant");
set_current_safepoint_id(event);
event->commit();
}
static void post_safepoint_synchronize_event(EventSafepointStateSynchronization* event,
int initial_number_of_threads,
int threads_waiting_to_block,
unsigned int iterations) {
assert(event != NULL, "invariant");
src/hotspot/share/runtime/safepoint.cpp:
// Update the count of active JNI critical regions
GCLocker::set_jni_lock_count(_current_jni_active_count);
log_info(safepoint)("Entering safepoint region: %s", VMThread::vm_safepoint_description());
RuntimeService::record_safepoint_synchronized();
if (PrintSafepointStatistics) {
update_statistics_on_sync_end(os::javaTimeNanos());
}
// Call stuff that needs to be run when a safepoint is just about to be completed
{
EventSafepointCleanup cleanup_event;
do_cleanup_tasks();
if (cleanup_event.should_commit()) {
post_safepoint_cleanup_event(&cleanup_event);
}
}
if (PrintSafepointStatistics) {
// Record how much time spend on the above cleanup tasks
update_statistics_on_cleanup_end(os::javaTimeNanos());
}
Configuration | enabled | threshold |
---|---|---|
default | false | 10 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | int | Safepoint Identifier |
Examples 3
SafepointCleanupTask
startTime duration eventThread 11 17 21 until JDK 23
Category: Java Virtual Machine / Runtime / Safepoint
Safepointing begin running cleanup tasks
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/safepoint.cpp:
event->commit();
}
}
static void post_safepoint_wait_blocked_event(EventSafepointWaitBlocked* event,
int initial_threads_waiting_to_block) {
assert(event != NULL, "invariant");
assert(event->should_commit(), "invariant");
set_current_safepoint_id(event);
event->set_runningThreadCount(initial_threads_waiting_to_block);
event->commit();
}
static void post_safepoint_cleanup_task_event(EventSafepointCleanupTask* event,
const char* name) {
assert(event != NULL, "invariant");
if (event->should_commit()) {
set_current_safepoint_id(event);
event->set_name(name);
event->commit();
}
}
static void post_safepoint_end_event(EventSafepointEnd* event) {
assert(event != NULL, "invariant");
src/hotspot/share/runtime/safepoint.cpp:
ParallelSPCleanupTask(uint num_workers, DeflateMonitorCounters* counters) :
AbstractGangTask("Parallel Safepoint Cleanup"),
_cleanup_threads_cl(ParallelSPCleanupThreadClosure(counters)),
_num_workers(num_workers),
_subtasks(SafepointSynchronize::SAFEPOINT_CLEANUP_NUM_TASKS),
_counters(counters) {}
void work(uint worker_id) {
// All threads deflate monitors and mark nmethods (if necessary).
Threads::possibly_parallel_threads_do(true, &_cleanup_threads_cl);
if (!_subtasks.is_task_claimed(SafepointSynchronize::SAFEPOINT_CLEANUP_DEFLATE_MONITORS)) {
const char* name = "deflating idle monitors";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
ObjectSynchronizer::deflate_idle_monitors(_counters);
if (event.should_commit()) {
post_safepoint_cleanup_task_event(&event, name);
}
}
if (!_subtasks.is_task_claimed(SafepointSynchronize::SAFEPOINT_CLEANUP_UPDATE_INLINE_CACHES)) {
const char* name = "updating inline caches";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
InlineCacheBuffer::update_inline_caches();
if (event.should_commit()) {
post_safepoint_cleanup_task_event(&event, name);
}
}
if (!_subtasks.is_task_claimed(SafepointSynchronize::SAFEPOINT_CLEANUP_COMPILATION_POLICY)) {
const char* name = "compilation policy safepoint handler";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
CompilationPolicy::policy()->do_safepoint_work();
if (event.should_commit()) {
post_safepoint_cleanup_task_event(&event, name);
}
}
if (!_subtasks.is_task_claimed(SafepointSynchronize::SAFEPOINT_CLEANUP_SYMBOL_TABLE_REHASH)) {
if (SymbolTable::needs_rehashing()) {
const char* name = "rehashing symbol table";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
SymbolTable::rehash_table();
if (event.should_commit()) {
post_safepoint_cleanup_task_event(&event, name);
}
}
}
if (!_subtasks.is_task_claimed(SafepointSynchronize::SAFEPOINT_CLEANUP_STRING_TABLE_REHASH)) {
if (StringTable::needs_rehashing()) {
const char* name = "rehashing string table";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
StringTable::rehash_table();
if (event.should_commit()) {
post_safepoint_cleanup_task_event(&event, name);
}
}
}
if (!_subtasks.is_task_claimed(SafepointSynchronize::SAFEPOINT_CLEANUP_CLD_PURGE)) {
// CMS delays purging the CLDG until the beginning of the next safepoint and to
// make sure concurrent sweep is done
const char* name = "purging class loader data graph";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
ClassLoaderDataGraph::purge_if_needed();
if (event.should_commit()) {
post_safepoint_cleanup_task_event(&event, name);
}
}
if (!_subtasks.is_task_claimed(SafepointSynchronize::SAFEPOINT_CLEANUP_SYSTEM_DICTIONARY_RESIZE)) {
const char* name = "resizing system dictionaries";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
ClassLoaderDataGraph::resize_if_needed();
if (event.should_commit()) {
post_safepoint_cleanup_task_event(&event, name);
}
}
_subtasks.all_tasks_completed(_num_workers);
}
};
// Various cleaning tasks that should be done periodically at safepoints.
Configuration | enabled | threshold |
---|---|---|
default | false | 10 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | int | Safepoint Identifier |
name | string | Task Name The task name |
Examples 3
SafepointEnd
startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / Runtime / Safepoint
Safepointing end
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/safepoint.cpp:
event->commit();
}
static void post_safepoint_cleanup_task_event(EventSafepointCleanupTask* event,
const char* name) {
assert(event != NULL, "invariant");
if (event->should_commit()) {
set_current_safepoint_id(event);
event->set_name(name);
event->commit();
}
}
static void post_safepoint_end_event(EventSafepointEnd* event) {
assert(event != NULL, "invariant");
if (event->should_commit()) {
// Group this event together with the ones committed before the counter increased
set_current_safepoint_id(event, -1);
event->commit();
}
}
// --------------------------------------------------------------------------------------------------
// Implementation of Safepoint begin/end
src/hotspot/share/runtime/safepoint.cpp:
update_statistics_on_cleanup_end(os::javaTimeNanos());
}
if (begin_event.should_commit()) {
post_safepoint_begin_event(&begin_event, nof_threads, _current_jni_active_count);
}
}
// Wake up all threads, so they are ready to resume execution after the safepoint
// operation has been carried out
void SafepointSynchronize::end() {
assert(Threads_lock->owned_by_self(), "must hold Threads_lock");
assert((_safepoint_counter & 0x1) == 1, "must be odd");
EventSafepointEnd event;
_safepoint_counter ++;
// memory fence isn't required here since an odd _safepoint_counter
// value can do no harm and a fence is issued below anyway.
DEBUG_ONLY(Thread* myThread = Thread::current();)
assert(myThread->is_VM_thread(), "Only VM thread can execute a safepoint");
if (PrintSafepointStatistics) {
end_statistics(os::javaTimeNanos());
}
Configuration | enabled | threshold |
---|---|---|
default | false | 10 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | int | Safepoint Identifier |
Examples 3
ExecuteVMOperation
default profiling startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / Runtime
Execution of a VM Operation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/vmThread.cpp:
// otherwise we will hang, since there is no one can end the safepoint.
// Wait until VM thread is terminated
// Note: it should be OK to use Terminator_lock here. But this is called
// at a very delicate time (VM shutdown) and we are operating in non- VM
// thread at Safepoint. It's safer to not share lock with other threads.
{ MutexLockerEx ml(_terminate_lock, Mutex::_no_safepoint_check_flag);
while(!VMThread::is_terminated()) {
_terminate_lock->wait(Mutex::_no_safepoint_check_flag);
}
}
}
static void post_vm_operation_event(EventExecuteVMOperation* event, VM_Operation* op) {
assert(event != NULL, "invariant");
assert(event->should_commit(), "invariant");
assert(op != NULL, "invariant");
const bool is_concurrent = op->evaluate_concurrently();
const bool evaluate_at_safepoint = op->evaluate_at_safepoint();
event->set_operation(op->type());
event->set_safepoint(evaluate_at_safepoint);
event->set_blocking(!is_concurrent);
// Only write caller thread information for non-concurrent vm operations.
// For concurrent vm operations, the thread id is set to 0 indicating thread is unknown.
// This is because the caller thread could have exited already.
src/hotspot/share/runtime/vmThread.cpp:
event->set_safepointId(evaluate_at_safepoint ? SafepointSynchronize::safepoint_counter() : 0);
event->commit();
}
void VMThread::evaluate_operation(VM_Operation* op) {
ResourceMark rm;
{
PerfTraceTime vm_op_timer(perf_accumulated_vm_operation_time());
HOTSPOT_VMOPS_BEGIN(
(char *) op->name(), strlen(op->name()),
op->evaluation_mode());
EventExecuteVMOperation event;
op->evaluate();
if (event.should_commit()) {
post_vm_operation_event(&event, op);
}
HOTSPOT_VMOPS_END(
(char *) op->name(), strlen(op->name()),
op->evaluation_mode());
}
// Last access of info in _cur_vm_operation!
Configuration | enabled | threshold |
---|---|---|
default | true | 10 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
operation | VMOperationType | Operation Consider contributing a description to jfreventcollector. |
safepoint | boolean | At Safepoint If the operation occured at a safepoint |
blocking | boolean | Caller Blocked If the calling thread was blocked until the operation was complete |
caller | Thread | Caller Thread requesting operation. If non-blocking, will be set to 0 indicating thread is unknown |
safepointId | int | Safepoint Identifier The safepoint (if any) under which this operation was completed |
Examples 3
blocking | boolean | true
|
---|---|---|
caller | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | JFR Periodic Tasks
|
javaThreadId | long | 15
|
osName | string | JFR Periodic Tasks
|
osThreadId | long | 26371
|
virtual | boolean | false
|
operation | VMOperationType | GC_HeapInspection
|
safepoint | boolean | true
|
safepointId | int | 1394
|
startTime | long: millis | 242227006458
|
blocking | boolean | true
|
---|---|---|
caller | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | JFR Periodic Tasks
|
javaThreadId | long | 16
|
osName | string | JFR Periodic Tasks
|
osThreadId | long | 25347
|
virtual | boolean | false
|
operation | VMOperationType | ClassLoaderStatsOperation
|
safepoint | boolean | true
|
safepointId | int | 946
|
startTime | long: millis | 233960320625
|
Shutdown
default profiling startTime eventThread stackTrace 11 17 21 25 26
Category: Java Virtual Machine / Runtime
JVM shutting down
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/prims/jvm.cpp:
HandleMark hm(THREAD);
const char* temp_dir = os::get_temp_directory();
Handle h = java_lang_String::create_from_platform_dependent_str(temp_dir, CHECK_NULL);
return (jstring) JNIHandles::make_local(env, h());
JVM_END
// java.lang.Runtime /////////////////////////////////////////////////////////////////////////
extern volatile jint vm_created;
JVM_ENTRY_NO_ENV(void, JVM_BeforeHalt())
JVMWrapper("JVM_BeforeHalt");
EventShutdown event;
if (event.should_commit()) {
event.set_reason("Shutdown requested from Java");
event.commit();
}
JVM_END
JVM_ENTRY_NO_ENV(void, JVM_Halt(jint code))
before_exit(thread);
vm_exit(code);
JVM_END
src/hotspot/share/runtime/thread.cpp:
#ifdef ASSERT
_vm_complete = false;
#endif
// Wait until we are the last non-daemon thread to execute
{ MutexLocker nu(Threads_lock);
while (Threads::number_of_non_daemon_threads() > 1)
// This wait should make safepoint checks, wait without a timeout,
// and wait as a suspend-equivalent condition.
Threads_lock->wait(!Mutex::_no_safepoint_check_flag, 0,
Mutex::_as_suspend_equivalent_flag);
}
EventShutdown e;
if (e.should_commit()) {
e.set_reason("No remaining non-daemon Java threads");
e.commit();
}
// Hang forever on exit if we are reporting an error.
if (ShowMessageBoxOnError && VMError::is_error_reported()) {
os::infinite_sleep();
}
os::wait_for_keypress_at_exit();
src/hotspot/share/utilities/vmError.cpp:
show_message_box(buffer, sizeof(buffer));
// User has asked JVM to abort. Reset ShowMessageBoxOnError so the
// WatcherThread can kill JVM if the error handler hangs.
ShowMessageBoxOnError = false;
}
os::check_dump_limit(buffer, sizeof(buffer));
// reset signal handlers or exception filter; make sure recursive crashes
// are handled properly.
reset_signal_handlers();
EventShutdown e;
if (e.should_commit()) {
e.set_reason("VM Error");
e.commit();
}
JFR_ONLY(Jfr::on_vm_shutdown(true);)
} else {
// If UseOsErrorReporting we call this for each level of the call stack
// while searching for the exception handler. Only the first level needs
// to be reported.
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
reason | string | Reason Reason for JVM shutdown |
Examples 3
reason | string | No remaining non-daemon Java threads
|
---|---|---|
stackTrace | StackTrace | null
|
startTime | long: millis | 271918480958
|
reason | string | No remaining non-daemon Java threads
|
---|---|---|
stackTrace | StackTrace | null
|
startTime | long: millis | 294456948250
|
reason | string | No remaining non-daemon Java threads
|
---|---|---|
stackTrace | StackTrace | null
|
startTime | long: millis | 253456608458
|
ThreadDump
default profiling startTime duration every chunk 11 17 21 25 26
Category: Java Virtual Machine / Runtime
Appearing in: ParallelGC
Missing in: G1GC, 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/jfr/periodic/jfrPeriodic.cpp:
/*
* This is left empty on purpose, having ExecutionSample as a requestable
* is a way of getting the period. The period is passed to ThreadSampling::update_period.
* Implementation in jfrSamples.cpp
*/
TRACE_REQUEST_FUNC(ExecutionSample) {
}
TRACE_REQUEST_FUNC(NativeMethodSample) {
}
TRACE_REQUEST_FUNC(ThreadDump) {
ResourceMark rm;
EventThreadDump event;
event.set_result(JfrDcmdEvent::thread_dump());
event.commit();
}
static int _native_library_callback(const char* name, address base, address top, void *param) {
EventNativeLibrary event(UNTIMED);
event.set_name(name);
event.set_baseAddress((u8)base);
event.set_topAddress((u8)top);
event.set_endtime(*(JfrTicks*) param);
event.commit();
src/hotspot/share/jfr/periodic/jfrThreadDumpEvent.cpp:
Thread* THREAD = Thread::current();
assert(!HAS_PENDING_EXCEPTION, "dcmd does not expect pending exceptions on entry!");
// delegate to DCmd execution
DCmd::parse_and_execute(DCmd_Source_Internal, &st, cmd, ' ', THREAD);
if (HAS_PENDING_EXCEPTION) {
log_debug(jfr, system)("unable to create jfr event for DCMD %s", cmd);
log_debug(jfr, system)("exception type: %s", PENDING_EXCEPTION->klass()->external_name());
// don't unwind this exception
CLEAR_PENDING_EXCEPTION;
// if exception occurred,
// reset stream.
st.reset();
return false;
}
return true;
}
// caller needs ResourceMark
const char* JfrDcmdEvent::thread_dump() {
assert(EventThreadDump::is_enabled(), "invariant");
bufferedStream st;
execute_dcmd(st, "Thread.print");
return st.as_string();
}
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | 60 s |
Field | Type | Description |
---|---|---|
result | string | Thread Dump |
Examples 1
result | string | 2025-08-11 13:13:10
Full thread dump OpenJDK 64-Bit Server VM (21.0.7+6-LTS mixed mode, sharing):
Threads class SMR info:
_java_thread_list=0x0000600000a55b00, length=296, elements={
0x000000012d008600, 0x000000012c01b200, 0x000000012c018800, 0x000000012b811400,
0x000000012b811c00, 0x000000012b8124…
|
---|---|---|
startTime | long: millis | 242286191375
|
NativeLibrary
default profiling startTime every chunk 11 17 21 25 26
Category: Java Virtual Machine / Runtime
Information about a dynamic library or other native image loaded by the JVM process
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(ExecutionSample) {
}
TRACE_REQUEST_FUNC(NativeMethodSample) {
}
TRACE_REQUEST_FUNC(ThreadDump) {
ResourceMark rm;
EventThreadDump event;
event.set_result(JfrDcmdEvent::thread_dump());
event.commit();
}
static int _native_library_callback(const char* name, address base, address top, void *param) {
EventNativeLibrary event(UNTIMED);
event.set_name(name);
event.set_baseAddress((u8)base);
event.set_topAddress((u8)top);
event.set_endtime(*(JfrTicks*) param);
event.commit();
return 0;
}
TRACE_REQUEST_FUNC(NativeLibrary) {
JfrTicks ts= JfrTicks::now();
os::get_loaded_modules_info(&_native_library_callback, (void *)&ts);
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
baseAddress | ulong: address | Base Address Starting address of the module |
topAddress | ulong: address | Top Address Ending address of the module, if available |
Examples 3
ModuleRequire
default profiling startTime every chunk 11 17 21 25 26
Category: Java Virtual Machine / Runtime / Modules
A directed edge representing a dependency
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrModuleEvent.cpp:
ModuleDependencyClosure(const ModuleEntry* module, EventFunc ef) : ModuleEventCallbackClosure(ef), _module(module) {}
void do_module(ModuleEntry* entry);
};
class ModuleExportClosure : public ModuleEventCallbackClosure {
private:
const PackageEntry* const _package;
public:
ModuleExportClosure(const PackageEntry* pkg, EventFunc ef) : ModuleEventCallbackClosure(ef), _package(pkg) {}
void do_module(ModuleEntry* entry);
};
static void write_module_dependency_event(const void* from_module, const ModuleEntry* to_module) {
EventModuleRequire event(UNTIMED);
event.set_endtime(invocation_time);
event.set_source((const ModuleEntry* const)from_module);
event.set_requiredModule(to_module);
event.commit();
}
static void write_module_export_event(const void* package, const ModuleEntry* qualified_export) {
EventModuleExport event(UNTIMED);
event.set_endtime(invocation_time);
event.set_exportedPackage((const PackageEntry*)package);
event.set_targetModule(qualified_export);
Configuration | enabled | period |
---|---|---|
default | true | endChunk |
profiling | true | endChunk |
Field | Type | Description |
---|---|---|
source | Module | Source Module |
requiredModule | Module | Required Module Consider contributing a description to jfreventcollector. |
Examples 3
requiredModule | Module | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
source | Module | |
classLoader | ClassLoader | |
name | string | platform
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 10
|
name | string | jdk/internal/loader/ClassLoaders$PlatformClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | jdk/internal/loader
|
location | string | jrt:/jdk.security.auth
|
name | string | jdk.security.auth
|
version | string | 21.0.7
|
startTime | long: millis | 200101111750
|
requiredModule | Module | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
source | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | jdk.proxy6
|
version | string | null
|
startTime | long: millis | 231212350792
|
requiredModule | Module | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.xml
|
name | string | java.xml
|
version | string | 21.0.7
|
source | Module | |
classLoader | ClassLoader | |
name | string | app
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 10
|
name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | jdk/internal/loader
|
location | string | jrt:/jdk.jconsole
|
name | string | jdk.jconsole
|
version | string | 21.0.7
|
startTime | long: millis | 243809184667
|
ModuleExport
default profiling startTime every chunk 11 17 21 25 26
Category: Java Virtual Machine / Runtime / Modules
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/jfrModuleEvent.cpp:
ModuleExportClosure(const PackageEntry* pkg, EventFunc ef) : ModuleEventCallbackClosure(ef), _package(pkg) {}
void do_module(ModuleEntry* entry);
};
static void write_module_dependency_event(const void* from_module, const ModuleEntry* to_module) {
EventModuleRequire event(UNTIMED);
event.set_endtime(invocation_time);
event.set_source((const ModuleEntry* const)from_module);
event.set_requiredModule(to_module);
event.commit();
}
static void write_module_export_event(const void* package, const ModuleEntry* qualified_export) {
EventModuleExport event(UNTIMED);
event.set_endtime(invocation_time);
event.set_exportedPackage((const PackageEntry*)package);
event.set_targetModule(qualified_export);
event.commit();
}
void ModuleDependencyClosure::do_module(ModuleEntry* to_module) {
assert_locked_or_safepoint(Module_lock);
assert(to_module != NULL, "invariant");
assert(_module != NULL, "invariant");
assert(_event_func != NULL, "invariant");
Configuration | enabled | period |
---|---|---|
default | true | endChunk |
profiling | true | endChunk |
Field | Type | Description |
---|---|---|
exportedPackage | Package | Exported Package Consider contributing a description to jfreventcollector. |
targetModule | Module | Target Module Module to which the package is qualifiedly exported. If null or N/A, the package is unqualifiedly exported |
Examples 3
exportedPackage | Package | |
---|---|---|
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | 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 | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/launcher
|
startTime | long: millis | 231212491500
|
targetModule | Module | null
|
exportedPackage | Package | |
---|---|---|
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/xbean/asm9
|
startTime | long: millis | 243809266625
|
targetModule | Module | null
|
exportedPackage | Package | |
---|---|---|
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/shuffle/sort/io
|
startTime | long: millis | 200101199416
|
targetModule | Module | null
|
Java Application
ThreadStart
default profiling startTime eventThread stackTrace 11 17 21 25 26
Category: Java Application
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/jni.cpp:
#if INCLUDE_JNI_CHECK
if (CheckJNICalls) return jni_functions_check();
#endif // INCLUDE_JNI_CHECK
return &jni_NativeInterface;
}
// Returns the function structure
struct JNINativeInterface_* jni_functions_nocheck() {
return &jni_NativeInterface;
}
static void post_thread_start_event(const JavaThread* jt) {
assert(jt != NULL, "invariant");
EventThreadStart event;
if (event.should_commit()) {
event.set_thread(JFR_THREAD_ID(jt));
event.set_parentThread((traceid)0);
#if INCLUDE_JFR
if (EventThreadStart::is_stacktrace_enabled()) {
jt->jfr_thread_local()->set_cached_stack_trace_id((traceid)0);
event.commit();
jt->jfr_thread_local()->clear_cached_stack_trace();
} else
#endif
{
event.commit();
}
}
}
src/hotspot/share/prims/jvm.cpp:
JavaThread::name_for(JNIHandles::resolve_non_null(jthread)));
// No one should hold a reference to the 'native_thread'.
native_thread->smr_delete();
if (JvmtiExport::should_post_resource_exhausted()) {
JvmtiExport::post_resource_exhausted(
JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR | JVMTI_RESOURCE_EXHAUSTED_THREADS,
os::native_thread_creation_failed_msg());
}
THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(),
os::native_thread_creation_failed_msg());
}
#if INCLUDE_JFR
if (JfrRecorder::is_recording() && EventThreadStart::is_enabled() &&
EventThreadStart::is_stacktrace_enabled()) {
JfrThreadLocal* tl = native_thread->jfr_thread_local();
// skip Thread.start() and Thread.start0()
tl->set_cached_stack_trace_id(JfrStackTraceRepository::record(thread, 2));
}
#endif
Thread::start(native_thread);
JVM_END
src/hotspot/share/jfr/support/jfrThreadLocal.cpp:
void JfrThreadLocal::set_thread_blob(const JfrBlobHandle& ref) {
assert(!_thread.valid(), "invariant");
_thread = ref;
}
const JfrBlobHandle& JfrThreadLocal::thread_blob() const {
return _thread;
}
static void send_java_thread_start_event(JavaThread* jt) {
EventThreadStart event;
event.set_thread(jt->jfr_thread_local()->thread_id());
event.set_parentThread(jt->jfr_thread_local()->parent_thread_id());
event.commit();
}
void JfrThreadLocal::on_start(Thread* t) {
assert(t != NULL, "invariant");
assert(Thread::current() == t, "invariant");
if (JfrRecorder::is_recording()) {
if (t->is_Java_thread()) {
send_java_thread_start_event((JavaThread*)t);
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
thread | Thread | New Java Thread |
parentThread | Thread | Parent Java Thread |
Examples 3
parentThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | block-manager-storage-async-thread-pool-59
|
javaThreadId | long | 1681
|
osName | string | block-manager-storage-async-thread-pool-59
|
osThreadId | long | 151307
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 2
|
lineNumber | int | 2577
|
method | Method | |
descriptor | string | (Ljava/lang/Thread;Ljdk/internal/vm/ThreadContainer;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | start
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/lang/System$2
|
package | Package | |
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.7
|
name | string | java/lang
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 233265306958
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | block-manager-ask-thread-pool-38
|
javaThreadId | long | 1682
|
osName | string | block-manager-ask-thread-pool-38
|
osThreadId | long | 94219
|
virtual | boolean | false
|
parentThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | block-manager-ask-thread-pool-56
|
javaThreadId | long | 1716
|
osName | string | block-manager-ask-thread-pool-56
|
osThreadId | long | 259695
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 2
|
lineNumber | int | 2577
|
method | Method | |
descriptor | string | (Ljava/lang/Thread;Ljdk/internal/vm/ThreadContainer;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | start
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/lang/System$2
|
package | Package | |
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.7
|
name | string | java/lang
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 254494550958
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | block-manager-ask-thread-pool-57
|
javaThreadId | long | 1718
|
osName | string | block-manager-ask-thread-pool-57
|
osThreadId | long | 258927
|
virtual | boolean | false
|
parentThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | block-manager-storage-async-thread-pool-92
|
javaThreadId | long | 1749
|
osName | string | block-manager-storage-async-thread-pool-92
|
osThreadId | long | 250115
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 2
|
lineNumber | int | 2577
|
method | Method | |
descriptor | string | (Ljava/lang/Thread;Ljdk/internal/vm/ThreadContainer;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | start
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/lang/System$2
|
package | Package | |
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.7
|
name | string | java/lang
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 220019628750
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | block-manager-ask-thread-pool-60
|
javaThreadId | long | 1750
|
osName | string | block-manager-ask-thread-pool-60
|
osThreadId | long | 249603
|
virtual | boolean | false
|
ThreadEnd
default profiling startTime eventThread 11 17 21 25 26
Category: Java Application
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/java.cpp:
if (HAS_PENDING_EXCEPTION) {
HandleMark hm(THREAD);
Handle exception(THREAD, PENDING_EXCEPTION);
CLEAR_PENDING_EXCEPTION;
java_lang_Throwable::java_printStackTrace(exception, THREAD);
}
#endif
// Hang forever on exit if we're reporting an error.
if (ShowMessageBoxOnError && VMError::is_error_reported()) {
os::infinite_sleep();
}
EventThreadEnd event;
if (event.should_commit()) {
event.set_thread(JFR_THREAD_ID(thread));
event.commit();
}
JFR_ONLY(Jfr::on_vm_shutdown();)
// Stop the WatcherThread. We do this before disenrolling various
// PeriodicTasks to reduce the likelihood of races.
if (PeriodicTask::num_tasks() > 0) {
WatcherThread::stop();
src/hotspot/share/jfr/support/jfrThreadLocal.cpp:
send_java_thread_start_event((JavaThread*)t);
}
}
if (t->jfr_thread_local()->has_cached_stack_trace()) {
t->jfr_thread_local()->clear_cached_stack_trace();
}
}
static void send_java_thread_end_events(traceid id, JavaThread* jt) {
assert(jt != NULL, "invariant");
assert(Thread::current() == jt, "invariant");
assert(jt->jfr_thread_local()->trace_id() == id, "invariant");
if (JfrRecorder::is_recording()) {
EventThreadEnd event;
event.set_thread(id);
event.commit();
JfrThreadCPULoadEvent::send_event_for_thread(jt);
}
}
void JfrThreadLocal::release(JfrThreadLocal* tl, Thread* t) {
assert(tl != NULL, "invariant");
assert(t != NULL, "invariant");
assert(Thread::current() == t, "invariant");
assert(!tl->is_dead(), "invariant");
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
thread | Thread | Java Thread |
Examples 3
startTime |
---|