Introduction
The following are the events for OpenJDK 20 (jdk-20.0.2+9, permalink, 12-September-2025), and Graal VM 23.0.1 (jdk-20.0.2) . 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:
static void post_events(bool exception_handler, Thread* thread) {
if (exception_handler) {
EventShutdown e;
e.set_reason("VM Error");
e.commit();
} else {
// OOM
LeakProfiler::emit_events(max_jlong, false, false);
}
EventDumpReason event;
event.set_reason(exception_handler ? "Crash" : "Out of Memory");
event.set_recordingId(-1);
event.commit();
}
void JfrEmergencyDump::on_vm_shutdown(bool exception_handler) {
if (!guard_reentrancy()) {
return;
}
Thread* thread = Thread::current_or_null_safe();
if (thread == NULL) {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
reason | string | Reason Reason for writing recording data to disk |
recordingId | int | Recording Id Id of the recording that triggered the dump, or -1 if it was not related to a recording |
DataLoss
default profiling startTime 11 17 21 25 26 graal vm
Category: Flight Recorder
Data could not be copied out from a buffer, typically because of contention
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/recorder/storage/jfrStorage.cpp:
assert(!buffer->transient(), "invariant");
assert(buffer->lease(), "invariant");
storage_instance.control().increment_leased();
return buffer;
}
}
return acquire_transient(size, thread);
}
static void write_data_loss_event(JfrBuffer* buffer, u8 unflushed_size, Thread* thread) {
assert(buffer != NULL, "invariant");
assert(buffer->empty(), "invariant");
const u8 total_data_loss = thread->jfr_thread_local()->add_data_lost(unflushed_size);
if (EventDataLoss::is_enabled()) {
JfrNativeEventWriter writer(buffer, thread);
writer.begin_event_write(false);
writer.write<u8>(EventDataLoss::eventId);
writer.write(JfrTicks::now());
writer.write(unflushed_size);
writer.write(total_data_loss);
writer.end_event_write(false);
}
}
static void write_data_loss(BufferPtr buffer, Thread* thread) {
assert(buffer != NULL, "invariant");
const size_t unflushed_size = buffer->unflushed_size();
buffer->reinitialize();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
amount | ulong: bytes | Amount Amount lost data |
total | ulong: bytes | Total Total lost amount for thread |
Flush
experimental startTime duration 14 17 21 25 26
Category: Flight Recorder
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/recorder/service/jfrRecorderService.cpp:
template <typename Functor>
static u4 invoke(Functor& f) {
f.process();
return f.elements();
}
template <typename Functor>
static u4 invoke_with_flush_event(Functor& f) {
const u4 elements = invoke(f);
EventFlush e(UNTIMED);
e.set_starttime(f.start_time());
e.set_endtime(f.end_time());
e.set_flushId(flushpoint_id);
e.set_elements(f.elements());
e.set_size(f.size());
e.commit();
return elements;
}
class StackTraceRepository : public StackObj {
private:
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ns |
profiling | false | 0 ns |
Field | Type | Description |
---|---|---|
flushId | ulong | Flush Identifier |
elements | ulong | Elements Written |
size | ulong: bytes | Size Written |
Examples 3
ActiveRecording
default profiling startTime duration stackTrace 11 17 21 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 {
// The order of these fields must be the same as the parameters in
// commit(... , long, String, String, long, long, long, long, long)
@Label("Id")
public long id;
@Label("Name")
public String name;
@Label("Destination")
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java:
private void finishChunk(RepositoryChunk chunk, Instant time, PlatformRecording ignoreMe) {
chunk.finish(time);
for (PlatformRecording r : getRecordings()) {
if (r != ignoreMe && r.getState() == RecordingState.RUNNING) {
r.appendChunk(chunk);
}
}
FilePurger.purge();
}
private void writeMetaEvents() {
long timestamp = JVM.counterTime();
if (ActiveRecordingEvent.enabled()) {
for (PlatformRecording r : getRecordings()) {
if (r.getState() == RecordingState.RUNNING && r.shouldWriteMetadataEvent()) {
WriteableUserPath path = r.getDestination();
Duration age = r.getMaxAge();
Duration flush = r.getFlushInterval();
Long size = r.getMaxSize();
Instant rStart = r.getStartTime();
Duration rDuration = r.getDuration();
ActiveRecordingEvent.commit(
timestamp,
0L,
r.getId(),
r.getName(),
path == null ? null : path.getRealPathText(),
age == null ? Long.MAX_VALUE : age.toMillis(),
flush == null ? Long.MAX_VALUE : flush.toMillis(),
size == null ? Long.MAX_VALUE : size,
rStart == null ? Long.MAX_VALUE : rStart.toEpochMilli(),
rDuration == null ? Long.MAX_VALUE : rDuration.toMillis()
);
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
X509ValidationEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.DeserializationEvent.class,
jdk.internal.event.ProcessStartEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.SecurityProviderServiceEvent.class,
jdk.internal.event.ThreadSleepEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.VirtualThreadStartEvent.class,
jdk.internal.event.VirtualThreadEndEvent.class,
jdk.internal.event.VirtualThreadPinnedEvent.class,
jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
jdk.internal.event.X509CertificateEvent.class,
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
id | long | Id |
name | string | Name Consider contributing a description to jfreventcollector. |
destination | string | Destination Consider contributing a description to jfreventcollector. |
maxAge | long: millis | Max Age |
flushInterval | long: millis 14+ | Flush Interval |
maxSize | long: bytes | Max Size |
recordingStart | long: epochmillis | Start Time |
recordingDuration | long: millis | Recording Duration |
Examples 3
destination | string | [...]_1/code/experiments/jfreventcollector/jfr/sample_UseSerialGC.jfr
|
---|---|---|
flushInterval | long: millis | 1000
|
id | long | 1
|
maxAge | long: millis | 9223372036854775807
|
maxSize | long: bytes | 262144000
|
name | string | 1
|
recordingDuration | long: millis | 9223372036854775807
|
recordingStart | long: epochmillis | 1754910820635
|
stackTrace | StackTrace | null
|
startTime | long: millis | 289836627083
|
destination | string | [...]_1/code/experiments/jfreventcollector/jfr/sample_UseG1GC.jfr
|
---|---|---|
flushInterval | long: millis | 1000
|
id | long | 1
|
maxAge | long: millis | 9223372036854775807
|
maxSize | long: bytes | 262144000
|
name | string | 1
|
recordingDuration | long: millis | 9223372036854775807
|
recordingStart | long: epochmillis | 1754910293748
|
stackTrace | StackTrace | null
|
startTime | long: millis | 218769770250
|
destination | string | [...]_1/code/experiments/jfreventcollector/jfr/sample_UseParallelGC.jfr
|
---|---|---|
flushInterval | long: millis | 1000
|
id | long | 1
|
maxAge | long: millis | 9223372036854775807
|
maxSize | long: bytes | 262144000
|
name | string | 1
|
recordingDuration | long: millis | 9223372036854775807
|
recordingStart | long: epochmillis | 1754910547922
|
stackTrace | StackTrace | null
|
startTime | long: millis | 232718815125
|
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 {
// The order of these fields must be the same as the parameters in
// commit(... , long, String, String)
@Label("Event Id")
public long id;
@Label("Setting Name")
public String name;
@Label("Setting Value")
src/jdk.jfr/share/classes/jdk/jfr/internal/EventControl.java:
void writeActiveSettingEvent(long timestamp) {
if (!type.isRegistered()) {
return;
}
for (NamedControl nc : namedControls) {
if (Utils.isSettingVisible(nc.control, type.hasEventHook()) && type.isVisible()) {
String value = nc.control.getLastValue();
if (value == null) {
value = nc.control.getDefaultValue();
}
if (ActiveSettingEvent.enabled()) {
ActiveSettingEvent.commit(timestamp, 0L, type.getId(), nc.name(), value);
}
}
}
}
public ArrayList<NamedControl> getNamedControls() {
return namedControls;
}
public PlatformEventType getEventType() {
return type;
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java:
0L,
r.getId(),
r.getName(),
path == null ? null : path.getRealPathText(),
age == null ? Long.MAX_VALUE : age.toMillis(),
flush == null ? Long.MAX_VALUE : flush.toMillis(),
size == null ? Long.MAX_VALUE : size,
rStart == null ? Long.MAX_VALUE : rStart.toEpochMilli(),
rDuration == null ? Long.MAX_VALUE : rDuration.toMillis()
);
}
}
}
if (ActiveSettingEvent.enabled()) {
for (EventControl ec : MetadataRepository.getInstance().getEventControls()) {
ec.writeActiveSettingEvent(timestamp);
}
}
}
private void periodicTask() {
if (!jvm.hasNativeJFR()) {
return;
}
while (true) {
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
X509CertificateEvent.class,
X509ValidationEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.DeserializationEvent.class,
jdk.internal.event.ProcessStartEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.SecurityProviderServiceEvent.class,
jdk.internal.event.ThreadSleepEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.VirtualThreadStartEvent.class,
jdk.internal.event.VirtualThreadEndEvent.class,
jdk.internal.event.VirtualThreadPinnedEvent.class,
jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
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 graal vm
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:
Ticks JfrPeriodicEventSet::_timestamp;
PeriodicType JfrPeriodicEventSet::_type;
Ticks JfrPeriodicEventSet::timestamp(void) {
return _timestamp;
}
PeriodicType JfrPeriodicEventSet::type(void) {
return _type;
}
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_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 | 266855041875
|
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
|
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 | 233939028666
|
InitialSystemProperty
default profiling startTime end of every chunk 11 17 21 25 26 graal vm
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_starttime(time_stamp);
event.set_endtime(time_stamp);
event.commit();
}
p = p->next();
}
}
TRACE_REQUEST_FUNC(ThreadAllocationStatistics) {
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.hpp:
// readers (we must ensure write ordering)
//
// Note that placeholders are deleted at any time, as they are removed
// when a class is completely loaded. Therefore, readers as well as writers
// of placeholders must hold the SystemDictionary_lock.
//
class BootstrapInfo;
class ClassFileStream;
class ClassLoadInfo;
class Dictionary;
class PackageEntry;
class GCTimer;
class EventClassLoad;
class Symbol;
class SystemDictionary : AllStatic {
friend class BootstrapInfo;
friend class vmClasses;
friend class VMStructs;
public:
// Returns a class with a given class name and class loader. Loads the
// class if needed. If not found a NoClassDefFoundError or a
src/hotspot/share/classfile/systemDictionary.hpp:
Handle class_loader);
static bool check_shared_class_super_type(InstanceKlass* klass, InstanceKlass* super,
Handle class_loader, Handle protection_domain,
bool is_superclass, TRAPS);
static bool check_shared_class_super_types(InstanceKlass* ik, Handle class_loader,
Handle protection_domain, TRAPS);
// Second part of load_shared_class
static void load_shared_class_misc(InstanceKlass* ik, ClassLoaderData* loader_data) NOT_CDS_RETURN;
protected:
// Used by SystemDictionaryShared
static bool add_loader_constraint(Symbol* name, Klass* klass_being_linked, Handle loader1,
Handle loader2);
static void post_class_load_event(EventClassLoad* event, const InstanceKlass* k, const ClassLoaderData* init_cld);
static InstanceKlass* load_shared_lambda_proxy_class(InstanceKlass* ik,
Handle class_loader,
Handle protection_domain,
PackageEntry* pkg_entry,
TRAPS);
static InstanceKlass* load_shared_class(InstanceKlass* ik,
Handle class_loader,
Handle protection_domain,
const ClassFileStream *cfs,
PackageEntry* pkg_entry,
TRAPS);
src/hotspot/share/classfile/systemDictionaryShared.cpp:
InstanceKlass* loaded_lambda =
SystemDictionary::load_shared_lambda_proxy_class(lambda_ik, class_loader, protection_domain, pkg_entry, CHECK_NULL);
if (loaded_lambda == NULL) {
return NULL;
}
// Ensures the nest host is the same as the lambda proxy's
// nest host recorded at dump time.
InstanceKlass* nest_host = caller_ik->nest_host(THREAD);
assert(nest_host == shared_nest_host, "mismatched nest host");
EventClassLoad class_load_start_event;
{
MutexLocker mu_r(THREAD, Compile_lock);
// Add to class hierarchy, and do possible deoptimizations.
SystemDictionary::add_to_hierarchy(loaded_lambda);
// But, do not add to dictionary.
}
loaded_lambda->link_class(CHECK_NULL);
// notify jvmti
if (JvmtiExport::should_post_class_load()) {
JvmtiExport::post_class_load(THREAD, loaded_lambda);
src/hotspot/share/classfile/systemDictionary.cpp:
InstanceKlass* check = loader_data->dictionary()->find_class(current, name);
if (check != NULL) {
// Klass is already loaded, so just return it
return check;
}
// check if other thread failed to load and cleaned up
oldprobe = PlaceholderTable::get_entry(name, loader_data);
}
}
}
return NULL;
}
void SystemDictionary::post_class_load_event(EventClassLoad* event, const InstanceKlass* k, const ClassLoaderData* init_cld) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
event->set_loadedClass(k);
event->set_definingClassLoader(k->class_loader_data());
event->set_initiatingClassLoader(init_cld);
event->commit();
}
// SystemDictionary::resolve_instance_class_or_null is the main function for class name resolution.
// After checking if the InstanceKlass already exists, it checks for ClassCircularityError and
// whether the thread must wait for loading in parallel. It eventually calls load_instance_class,
// which will load the class via the bootstrap loader or call ClassLoader.loadClass().
// This can return NULL, an exception or an InstanceKlass.
InstanceKlass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
Handle class_loader,
Handle protection_domain,
TRAPS) {
// name must be in the form of "java/lang/Object" -- cannot be "Ljava/lang/Object;"
assert(name != NULL && !Signature::is_array(name) &&
!Signature::has_envelope(name), "invalid class name");
EventClassLoad class_load_start_event;
HandleMark hm(THREAD);
// Fix for 4474172; see evaluation for more details
class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader()));
ClassLoaderData* loader_data = register_loader(class_loader);
Dictionary* dictionary = loader_data->dictionary();
// Do lookup to see if class already exists and the protection domain
// has the right access.
// This call uses find which checks protection domain already matches
src/hotspot/share/classfile/systemDictionary.cpp:
// Note: this method is much like resolve_class_from_stream, but
// does not publish the classes in the SystemDictionary.
// Handles Lookup.defineClass hidden.
InstanceKlass* SystemDictionary::resolve_hidden_class_from_stream(
ClassFileStream* st,
Symbol* class_name,
Handle class_loader,
const ClassLoadInfo& cl_info,
TRAPS) {
EventClassLoad class_load_start_event;
ClassLoaderData* loader_data;
// - for hidden classes that are not strong: create a new CLD that has a class holder and
// whose loader is the Lookup class's loader.
// - for hidden class: add the class to the Lookup class's loader's CLD.
assert (cl_info.is_hidden(), "only used for hidden classes");
bool create_mirror_cld = !cl_info.is_strong_hidden();
loader_data = register_loader(class_loader, create_mirror_cld);
assert(st != NULL, "invariant");
assert(st->need_verify(), "invariant");
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | false | true | 0 ms |
profiling | false | true | 0 ms |
Field | Type | Description |
---|---|---|
loadedClass | Class | Loaded Class Consider contributing a description to jfreventcollector. |
definingClassLoader | ClassLoader | Defining Class Loader Consider contributing a description to jfreventcollector. |
initiatingClassLoader | ClassLoader | Initiating Class Loader Consider contributing a description to jfreventcollector. |
Examples 3
definingClassLoader | ClassLoader | |
---|---|---|
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
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 | scala.collection.convert.JavaCollectionWrappers$JMapWrapperLike$$Lambda+0x00000070066d5268/1798607940
|
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/convert
|
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 | 254493511000
|
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+0x0000007006643ce0/266664853
|
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 | false
|
startTime | long: millis | 243533072250
|
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.storage.BlockManager$$Lambda+0x00000070066e98a8/860817904
|
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/storage
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/String;[BIILjava/security/ProtectionDomain;ZILjava/lang/Object;)Ljava/lang/Class;
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | defineClass0
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1025
|
name | string | java/lang/ClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 219781531750
|
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:
// during compilations.
MutexLocker mu(THREAD, Compile_lock);
update_dictionary(THREAD, loaded_class, class_loader);
}
if (JvmtiExport::should_post_class_load()) {
JvmtiExport::post_class_load(THREAD, loaded_class);
}
}
return loaded_class;
}
static void post_class_define_event(InstanceKlass* k, const ClassLoaderData* def_cld) {
EventClassDefine event;
if (event.should_commit()) {
event.set_definedClass(k);
event.set_definingClassLoader(def_cld);
event.commit();
}
}
void SystemDictionary::define_instance_class(InstanceKlass* k, Handle class_loader, TRAPS) {
ClassLoaderData* loader_data = k->class_loader_data();
assert(loader_data->class_loader() == class_loader(), "they must be the same");
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
definedClass | Class | Defined Class Consider contributing a description to jfreventcollector. |
definingClassLoader | ClassLoader | Defining Class Loader Consider contributing a description to jfreventcollector. |
Examples 3
definedClass | Class | |
---|---|---|
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | org/apache/spark/sql/SQLImplicits$$typecreator1$10
|
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/sql
|
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 | 223761335416
|
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/tpe/FindMembers
|
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
|
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 | true
|
startTime | long: millis | 244515065875
|
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 | 1
|
name | string | scala/reflect/runtime/JavaUniverse
|
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 | 260425412792
|
ClassRedefinition
default profiling startTime 15 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/prims/jvmtiRedefineClasses.cpp:
_timer_rsc_phase1.stop();
if (log_is_enabled(Info, redefine, class, timer)) {
_timer_rsc_phase2.start();
}
if (the_class->oop_map_cache() != NULL) {
// Flush references to any obsolete methods from the oop map cache
// so that obsolete methods are not pinned.
the_class->oop_map_cache()->flush_obsolete_entries();
}
increment_class_counter(the_class);
if (EventClassRedefinition::is_enabled()) {
EventClassRedefinition event;
event.set_classModificationCount(java_lang_Class::classRedefinedCount(the_class->java_mirror()));
event.set_redefinedClass(the_class);
event.set_redefinitionId(_id);
event.commit();
}
{
ResourceMark rm(current);
// increment the classRedefinedCount field in the_class and in any
// direct and indirect subclasses of the_class
log_info(redefine, class, load)
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
redefinedClass | Class | Redefined Class Consider contributing a description to jfreventcollector. |
classModificationCount | int | Class Modification Count The number of times the class has changed |
redefinitionId | ulong | Class Redefinition Id |
RedefineClasses
default profiling startTime duration eventThread stackTrace 15 17 21 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/prims/jvmtiEnv.cpp:
event.set_classCount(class_count);
event.set_redefinitionId(op.id());
event.commit();
}
return error;
} /* end RetransformClasses */
// class_count - pre-checked to be greater than or equal to 0
// class_definitions - pre-checked for NULL
jvmtiError
JvmtiEnv::RedefineClasses(jint class_count, const jvmtiClassDefinition* class_definitions) {
//TODO: add locking
EventRedefineClasses event;
VM_RedefineClasses op(class_count, class_definitions, jvmti_class_load_kind_redefine);
VMThread::execute(&op);
jvmtiError error = op.check_error();
if (error == JVMTI_ERROR_NONE) {
event.set_classCount(class_count);
event.set_redefinitionId(op.id());
event.commit();
}
return error;
} /* end RedefineClasses */
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
classCount | int | Class Count |
redefinitionId | ulong | Class Redefinition Id |
RetransformClasses
default profiling startTime duration eventThread stackTrace 15 17 21 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/prims/jvmtiEnv.cpp:
class_definitions[index].class_byte_count = (jint)reconstituter.class_file_size();
class_definitions[index].class_bytes = (unsigned char*)
reconstituter.class_file_bytes();
} else {
// it is cached, get it from the cache
class_definitions[index].class_byte_count = ik->get_cached_class_file_len();
class_definitions[index].class_bytes = ik->get_cached_class_file_bytes();
}
class_definitions[index].klass = jcls;
}
EventRetransformClasses event;
VM_RedefineClasses op(class_count, class_definitions, jvmti_class_load_kind_retransform);
VMThread::execute(&op);
jvmtiError error = op.check_error();
if (error == JVMTI_ERROR_NONE) {
event.set_classCount(class_count);
event.set_redefinitionId(op.id());
event.commit();
}
return error;
} /* end RetransformClasses */
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
classCount | int | Class Count |
redefinitionId | ulong | Class Redefinition Id |
ClassUnload
startTime eventThread 11 17 21 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/oops/instanceKlass.cpp:
ClassLoadingService::notify_class_unloaded(ik);
SystemDictionaryShared::handle_class_unloading(ik);
if (log_is_enabled(Info, class, unload)) {
ResourceMark rm;
log_info(class, unload)("unloading class %s " PTR_FORMAT, ik->external_name(), p2i(ik));
}
Events::log_class_unloading(Thread::current(), ik);
#if INCLUDE_JFR
assert(ik != NULL, "invariant");
EventClassUnload event;
event.set_unloadedClass(ik);
event.set_definingClassLoader(ik->class_loader_data());
event.commit();
#endif
}
static void method_release_C_heap_structures(Method* m) {
m->release_C_heap_structures();
}
// Called also by InstanceKlass::deallocate_contents, with false for release_sub_metadata.
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 | 267243165792
|
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 | false
|
modifiers | int | 17
|
name | string | scala/collection/immutable/Vector5
|
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
|
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 | 246689217583
|
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+0x0000007006800000/691253777
|
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 | 226327416916
|
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 | false
|
modifiers | int | 1537
|
name | string | scala/collection/IntStepper
|
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
|
JVM: Code Cache
CodeCacheFull
default profiling startTime eventThread 11 17 21 25 26
Category: Java Virtual Machine / Code Cache
A code heap is full, this leads to disabling the compiler
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/code/codeCache.cpp:
{
ttyLocker ttyl;
tty->print("%s", s.freeze());
}
if (full_count == 1) {
if (PrintCodeHeapAnalytics) {
CompileBroker::print_heapinfo(tty, "all", 4096); // details, may be a lot!
}
}
}
EventCodeCacheFull event;
if (event.should_commit()) {
event.set_codeBlobType((u1)code_blob_type);
event.set_startAddress((u8)heap->low_boundary());
event.set_commitedTopAddress((u8)heap->high());
event.set_reservedTopAddress((u8)heap->high_boundary());
event.set_entryCount(heap->blob_count());
event.set_methodCount(heap->nmethod_count());
event.set_adaptorCount(heap->adapter_count());
event.set_unallocatedCapacity(heap->unallocated_capacity());
event.set_fullCount(heap->full_count());
event.set_codeCacheMaxCapacity(CodeCache::max_capacity());
Configuration | enabled |
---|---|
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 |
codeCacheMaxCapacity | ulong: bytes 17+ | Code Cache Maximum Capacity |
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.set_dynamicCompilerThreadCount(UseDynamicNumberOfCompilerThreads);
event.commit();
}
TRACE_REQUEST_FUNC(CodeCacheStatistics) {
// Emit stats for all available code heaps
for (int bt_index = 0; bt_index < static_cast<int>(CodeBlobType::NumTypes); ++bt_index) {
const CodeBlobType bt = static_cast<CodeBlobType>(bt_index);
if (CodeCache::heap_available(bt)) {
EventCodeCacheStatistics event;
event.set_codeBlobType((u1)bt);
event.set_startAddress((u8)CodeCache::low_bound(bt));
event.set_reservedTopAddress((u8)CodeCache::high_bound(bt));
event.set_entryCount(CodeCache::blob_count(bt));
event.set_methodCount(CodeCache::nmethod_count(bt));
event.set_adaptorCount(CodeCache::adapter_count(bt));
event.set_unallocatedCapacity(CodeCache::unallocated_capacity(bt));
event.set_fullCount(CodeCache::get_codemem_full_count(bt));
event.commit();
}
}
Configuration | enabled | period |
---|---|---|
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 | 4807557120
|
startAddress | ulong: address | 4555898880
|
startTime | long: millis | 242214078375
|
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 | 201472540333
|
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 | 252333668125
|
JVM: Compiler
JITRestart
default profiling startTime eventThread 17 21 25 26
Category: Java Virtual Machine / Compiler
Restart of the JIT compilers after they were stopped
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/code/codeCache.cpp:
freed_memory += nm->total_size();
nm->flush();
if (next == nm) {
// Self looped means end of list
break;
}
nm = next;
}
// Try to start the compiler again if we freed any memory
if (!CompileBroker::should_compile_new_jobs() && freed_memory != 0) {
CompileBroker::set_should_compile_new_jobs(CompileBroker::run_compilation);
log_info(codecache)("Restarting compiler");
EventJITRestart event;
event.set_freedMemory(freed_memory);
event.set_codeCacheMaxCapacity(CodeCache::max_capacity());
event.commit();
}
}
uint8_t CodeCache::_unloading_cycle = 1;
nmethod* volatile CodeCache::_unlinked_head = NULL;
void CodeCache::increment_unloading_cycle() {
// 2-bit value (see IsUnloadingState in nmethod.cpp for details)
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
freedMemory | ulong: bytes | Freed Memory |
codeCacheMaxCapacity | ulong: bytes | Code Cache Maximum Capacity |
Compilation
default profiling startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / Compiler
Results of method compilation attempts
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
class CompilationEvent : AllStatic {
public:
static void post(EventCompilation& event, int compile_id, CompilerType type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) NOT_JFR_RETURN();
};
class CompilationFailureEvent : AllStatic {
public:
static void post(EventCompilationFailure& event, int compile_id, const char* reason) NOT_JFR_RETURN();
};
class PhaseEvent : AllStatic {
friend class CompilerPhaseTypeConstant;
public:
src/hotspot/share/compiler/compileBroker.cpp:
void CompileBroker::handle_compile_error(CompilerThread* thread, CompileTask* task, ciEnv* ci_env,
int compilable, const char* failure_reason) {
if (!AbortVMOnCompilationFailure) {
return;
}
if (compilable == ciEnv::MethodCompilable_not_at_tier) {
fatal("Not compilable at tier %d: %s", task->comp_level(), failure_reason);
}
if (compilable == ciEnv::MethodCompilable_never) {
fatal("Never compilable: %s", failure_reason);
}
}
static void post_compilation_event(EventCompilation& event, CompileTask* task) {
assert(task != NULL, "invariant");
CompilerEvent::CompilationEvent::post(event,
task->compile_id(),
task->compiler()->type(),
task->method(),
task->comp_level(),
task->is_success(),
task->osr_bci() != CompileBroker::standard_entry_bci,
task->nm_total_size(),
task->num_inlined_bytecodes());
}
int DirectivesStack::_depth = 0;
src/hotspot/share/compiler/compileBroker.cpp:
// Allocate a new set of JNI handles.
JNIHandleMark jhm(thread);
Method* target_handle = task->method();
int compilable = ciEnv::MethodCompilable;
const char* failure_reason = NULL;
bool failure_reason_on_C_heap = false;
const char* retry_message = NULL;
#if INCLUDE_JVMCI
if (UseJVMCICompiler && comp != NULL && comp->is_jvmci()) {
JVMCICompiler* jvmci = (JVMCICompiler*) comp;
TraceTime t1("compilation", &time);
EventCompilation event;
JVMCICompileState compile_state(task, jvmci);
JVMCIRuntime *runtime = NULL;
if (JVMCI::in_shutdown()) {
failure_reason = "in JVMCI shutdown";
retry_message = "not retryable";
compilable = ciEnv::MethodCompilable_never;
} else if (compile_state.target_method_is_old()) {
// Skip redefined methods
failure_reason = "redefined method";
retry_message = "not retryable";
src/hotspot/share/compiler/compileBroker.cpp:
bool method_is_old = ci_env.cache_jvmti_state();
// Skip redefined methods
if (method_is_old) {
ci_env.record_method_not_compilable("redefined method", true);
}
// Cache DTrace flags
ci_env.cache_dtrace_flags();
ciMethod* target = ci_env.get_method_from_handle(target_handle);
TraceTime t1("compilation", &time);
EventCompilation event;
if (comp == NULL) {
ci_env.record_method_not_compilable("no compiler");
} else if (!ci_env.failing()) {
if (WhiteBoxAPI && WhiteBox::compilation_locked) {
MonitorLocker locker(Compilation_lock, Mutex::_no_safepoint_check_flag);
while (WhiteBox::compilation_locked) {
locker.wait();
}
}
comp->compile_method(&ci_env, target, osr_bci, true, directive);
src/hotspot/share/compiler/compilerEvent.cpp:
// As part of event commit, a Method* is tagged as a function of an epoch.
// Epochs evolve during safepoints. To ensure the event is tagged in the correct epoch,
// that is, to avoid a race, the thread will participate in the safepoint protocol
// by transitioning from _thread_in_native to _thread_in_vm.
template <typename EventType>
static inline void commit(EventType& event) {
ThreadInVMfromNative transition(JavaThread::current());
event.commit();
}
void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_id, CompilerType compiler_type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) {
event.set_compileId(compile_id);
event.set_compiler(compiler_type);
event.set_method(method);
event.set_compileLevel((short)compile_level);
event.set_succeded(success);
event.set_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
commit(event);
}
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EventProvider.java:
* Creates and returns an empty implementation for {@link EventProvider}. This implementation
* can be used when no logging is requested.
*/
static EventProvider createEmptyEventProvider() {
return new EmptyEventProvider();
}
/**
* Creates and returns an empty implementation for {@link CompilationEvent}.
*/
static CompilationEvent createEmptyCompilationEvent() {
return new EmptyCompilationEvent();
}
/**
* Creates and returns an empty implementation for {@link CompilationEvent}.
*/
static CompilerFailureEvent createEmptyCompilerFailureEvent() {
return new EmptyCompilerFailureEvent();
}
/**
* An instant event is an event that is not considered to have taken any time.
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EventProvider.java:
/**
* Ends the timing period for this event.
*/
void end();
}
/**
* Creates a new {@link CompilationEvent}.
*
* @return a compilation event
*/
CompilationEvent newCompilationEvent();
/**
* A compilation event.
*/
public interface CompilationEvent extends TimedEvent {
void setMethod(String method);
void setCompileId(int compileId);
void setCompileLevel(int compileLevel);
void setSucceeded(boolean succeeded);
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EmptyEventProvider.java:
package jdk.vm.ci.hotspot;
/**
* An empty implementation for {@link EventProvider}. This implementation is used when no logging is
* requested.
*/
final class EmptyEventProvider implements EventProvider {
static InternalError shouldNotReachHere() {
throw new InternalError("should not reach here");
}
@Override
public CompilationEvent newCompilationEvent() {
return new EmptyCompilationEvent();
}
static class EmptyCompilationEvent implements CompilationEvent {
@Override
public void commit() {
throw shouldNotReachHere();
}
@Override
public boolean shouldWrite() {
// Events of this class should never been written.
return false;
}
Configuration | enabled | threshold |
---|---|---|
default | true | 1000 ms |
profiling | true | 100 ms |
Field | Type | Description |
---|---|---|
compileId | uint | Compilation Identifier |
compiler | CompilerType 14+ | Compiler Consider contributing a description to jfreventcollector. |
method | Method | Method Consider contributing a description to jfreventcollector. |
compileLevel | ushort | Compilation Level |
succeded | boolean | Succeeded |
isOsr | boolean | On Stack Replacement |
codeSize | ulong: bytes | Compiled Code Size |
inlinedBytes | ulong: bytes | Inlined Code Size |
Examples 3
codeSize | ulong: bytes | 1872
|
---|---|---|
compileId | uint | 85872
|
compileLevel | ushort | 4
|
compiler | CompilerType | c2
|
inlinedBytes | ulong: bytes | 281
|
isOsr | boolean | true
|
method | Method | |
descriptor | string | (IILjava/lang/String;)I
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | scan
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | java/net/URI$Parser
|
package | Package | |
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 | 260813283500
|
succeded | boolean | true
|
codeSize | ulong: bytes | 552
|
---|---|---|
compileId | uint | 83116
|
compileLevel | ushort | 3
|
compiler | CompilerType | c1
|
inlinedBytes | ulong: bytes | 1
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Ljava/lang/Object;)V
|
hidden | boolean | true
|
modifiers | int | 2
|
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 | true
|
modifiers | int | 4112
|
name | string | org.apache.spark.rdd.PairRDDFunctions$$Lambda+0x00000070066a03c0/568830579
|
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/rdd
|
startTime | long: millis | 221131943583
|
succeded | boolean | true
|
codeSize | ulong: bytes | 2104
|
---|---|---|
compileId | uint | 77674
|
compileLevel | ushort | 4
|
compiler | CompilerType | c2
|
inlinedBytes | ulong: bytes | 420
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Ljava/lang/Object;)Z
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | equals
|
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
|
startTime | long: millis | 233853086333
|
succeded | boolean | true
|
CompilerPhase
default profiling startTime duration eventThread 11 17 21 25 26
Category: Java Virtual Machine / Compiler
Describes various phases of the compilation process like inlining or string optimization related phases
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jvmci/jvmciCompilerToVM.cpp:
C2V_VMENTRY_0(jint, registerCompilerPhase, (JNIEnv* env, jobject, jstring jphase_name))
#if INCLUDE_JFR
JVMCIObject phase_name = JVMCIENV->wrap(jphase_name);
const char *name = JVMCIENV->as_utf8_string(phase_name);
return CompilerEvent::PhaseEvent::get_phase_id(name, true, true, true);
#else
return -1;
#endif // !INCLUDE_JFR
}
C2V_VMENTRY(void, notifyCompilerPhaseEvent, (JNIEnv* env, jobject, jlong startTime, jint phase, jint compileId, jint level))
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, startTime, phase, compileId, level);
}
}
C2V_VMENTRY(void, notifyCompilerInliningEvent, (JNIEnv* env, jobject, jint compileId, ARGUMENT_PAIR(caller), ARGUMENT_PAIR(callee), jboolean succeeded, jstring jmessage, jint bci))
EventCompilerInlining event;
if (event.should_commit()) {
Method* caller = UNPACK_PAIR(Method, caller);
Method* callee = UNPACK_PAIR(Method, callee);
JVMCIObject message = JVMCIENV->wrap(jmessage);
src/hotspot/share/opto/compile.cpp:
Node* n = macro_node(i);
if (n->is_Allocate()) {
if (i != allocates) {
Node* tmp = macro_node(allocates);
_macro_nodes.at_put(allocates, n);
_macro_nodes.at_put(i, tmp);
}
allocates++;
}
}
}
void Compile::print_method(CompilerPhaseType cpt, int level, Node* n) {
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, cpt, C->_compile_id, level);
}
#ifndef PRODUCT
ResourceMark rm;
stringStream ss;
ss.print_raw(CompilerPhaseTypeHelper::to_description(cpt));
if (n != nullptr) {
ss.print(": %d %s ", n->_idx, NodeClassNames[n->Opcode()]);
}
src/hotspot/share/opto/compile.cpp:
// Only used from CompileWrapper
void Compile::begin_method() {
#ifndef PRODUCT
if (_method != NULL && should_print_igv(1)) {
_igv_printer->begin_method();
}
#endif
C->_latest_stage_start_counter.stamp();
}
// Only used from CompileWrapper
void Compile::end_method() {
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, PHASE_END, C->_compile_id, 1);
}
#ifndef PRODUCT
if (_method != NULL && should_print_igv(1)) {
_igv_printer->end_method();
}
#endif
}
src/hotspot/share/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
class CompilationEvent : AllStatic {
public:
src/hotspot/share/compiler/compilerEvent.hpp:
class PhaseEvent : AllStatic {
friend class CompilerPhaseTypeConstant;
public:
// Gets a unique identifier for `phase_name`, computing and registering it first if necessary.
// If `may_exist` is true, then current registrations are searched first. If false, then
// there must not be an existing registration for `phase_name`.
// If `use_strdup` is true, then `phase_name` is strdup'ed before registration.
// If `sync` is true, then access to the registration table is synchronized.
static int get_phase_id(const char* phase_name, bool may_exist, bool use_strdup, bool sync) NOT_JFR_RETURN_(-1);
static void post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) NOT_JFR_RETURN();
static void post(EventCompilerPhase& event, jlong start_time, int phase, int compile_id, int level) {
JFR_ONLY(post(event, Ticks(start_time), phase, compile_id, level);)
}
};
class InlineEvent : AllStatic {
static void post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
public:
static void post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
static void post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
};
};
src/hotspot/share/compiler/compilerEvent.cpp:
event.set_succeded(success);
event.set_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
commit(event);
}
void CompilerEvent::CompilationFailureEvent::post(EventCompilationFailure& event, int compile_id, const char* reason) {
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) {
event.set_compileId(compile_id);
event.set_caller(caller);
event.set_callee(callee);
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/JFR.java:
/**
* @return current JFR time stamp
*/
public static long now() {
return compilerToVM().ticksNow();
}
}
/**
* Helper methods for managing JFR CompilerPhase events. The events are defined in {see @code
* src/share/jfr/metadata/metadata.xml}.
*/
public static final class CompilerPhaseEvent {
private static final ConcurrentHashMap<String, Integer> phaseToId = new ConcurrentHashMap<>();
private static int getPhaseToId(String phaseName) {
return phaseToId.computeIfAbsent(phaseName, k -> compilerToVM().registerCompilerPhase(phaseName));
}
/**
* Commits a CompilerPhase event.
*
* @param startTime time captured at the start of compiler phase
Configuration | enabled | threshold |
---|---|---|
default | true | 60 s |
profiling | true | 10 s |
Field | Type | Description |
---|---|---|
phase | CompilerPhaseType | Compile Phase |
compileId | uint | Compilation Identifier |
phaseLevel | ushort | Phase Level |
CompilationFailure
profiling startTime eventThread 11 17 21 25 26
Category: Java Virtual Machine / Compiler
In case a JIT compilation failed, a compilation failure is triggered, reporting the reason
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/ci/ciEnv.cpp:
// ------------------------------------------------------------------
// ciEnv::record_failure()
void ciEnv::record_failure(const char* reason) {
if (_failure_reason == NULL) {
// Record the first failure reason.
_failure_reason = reason;
}
}
void ciEnv::report_failure(const char* reason) {
EventCompilationFailure event;
if (event.should_commit()) {
CompilerEvent::CompilationFailureEvent::post(event, compile_id(), reason);
}
}
// ------------------------------------------------------------------
// ciEnv::record_method_not_compilable()
void ciEnv::record_method_not_compilable(const char* reason, bool all_tiers) {
int new_compilable =
all_tiers ? MethodCompilable_never : MethodCompilable_not_at_tier ;
// Only note transitions to a worse state
if (new_compilable > _compilable) {
src/hotspot/share/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
class CompilationEvent : AllStatic {
public:
static void post(EventCompilation& event, int compile_id, CompilerType type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) NOT_JFR_RETURN();
};
class CompilationFailureEvent : AllStatic {
public:
static void post(EventCompilationFailure& event, int compile_id, const char* reason) NOT_JFR_RETURN();
};
class PhaseEvent : AllStatic {
friend class CompilerPhaseTypeConstant;
public:
// Gets a unique identifier for `phase_name`, computing and registering it first if necessary.
// If `may_exist` is true, then current registrations are searched first. If false, then
// there must not be an existing registration for `phase_name`.
// If `use_strdup` is true, then `phase_name` is strdup'ed before registration.
// If `sync` is true, then access to the registration table is synchronized.
src/hotspot/share/compiler/compilerEvent.cpp:
void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_id, CompilerType compiler_type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) {
event.set_compileId(compile_id);
event.set_compiler(compiler_type);
event.set_method(method);
event.set_compileLevel((short)compile_level);
event.set_succeded(success);
event.set_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
commit(event);
}
void CompilerEvent::CompilationFailureEvent::post(EventCompilationFailure& event, int compile_id, const char* reason) {
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
Configuration | enabled |
---|---|
default | false |
profiling | true |
Field | Type | Description |
---|---|---|
failureMessage | string | Failure Message |
compileId | uint | Compilation Identifier |
Examples 3
CompilerInlining
startTime eventThread 11 17 21 25 26
Category: Java Virtual Machine / Compiler / Optimization
Describes the result of a method inlining attempt
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jvmci/jvmciCompilerToVM.cpp:
#else
return -1;
#endif // !INCLUDE_JFR
}
C2V_VMENTRY(void, notifyCompilerPhaseEvent, (JNIEnv* env, jobject, jlong startTime, jint phase, jint compileId, jint level))
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, startTime, phase, compileId, level);
}
}
C2V_VMENTRY(void, notifyCompilerInliningEvent, (JNIEnv* env, jobject, jint compileId, ARGUMENT_PAIR(caller), ARGUMENT_PAIR(callee), jboolean succeeded, jstring jmessage, jint bci))
EventCompilerInlining event;
if (event.should_commit()) {
Method* caller = UNPACK_PAIR(Method, caller);
Method* callee = UNPACK_PAIR(Method, callee);
JVMCIObject message = JVMCIENV->wrap(jmessage);
CompilerEvent::InlineEvent::post(event, compileId, caller, callee, succeeded, JVMCIENV->as_utf8_string(message), bci);
}
}
C2V_VMENTRY(void, setThreadLocalObject, (JNIEnv* env, jobject, jint id, jobject value))
requireInHotSpot("setThreadLocalObject", JVMCI_CHECK);
if (id == 0) {
src/hotspot/share/c1/c1_GraphBuilder.cpp:
void GraphBuilder::print_inlining(ciMethod* callee, const char* msg, bool success) {
CompileLog* log = compilation()->log();
if (log != NULL) {
assert(msg != NULL, "inlining msg should not be null!");
if (success) {
log->inline_success(msg);
} else {
log->inline_fail(msg);
}
}
EventCompilerInlining event;
if (event.should_commit()) {
CompilerEvent::InlineEvent::post(event, compilation()->env()->task()->compile_id(), method()->get_Method(), callee, success, msg, bci());
}
CompileTask::print_inlining_ul(callee, scope()->level(), bci(), msg);
if (!compilation()->directive()->PrintInliningOption) {
return;
}
CompileTask::print_inlining_tty(callee, scope()->level(), bci(), msg);
if (success && CIPrintMethodCodes) {
src/hotspot/share/opto/bytecodeInfo.cpp:
CompileTask::print_inlining_ul(callee_method, inline_level(),
caller_bci, inline_msg);
if (C->print_inlining()) {
C->print_inlining(callee_method, inline_level(), caller_bci, inline_msg);
guarantee(callee_method != NULL, "would crash in CompilerEvent::InlineEvent::post");
if (Verbose) {
const InlineTree *top = this;
while (top->caller_tree() != NULL) { top = top->caller_tree(); }
//tty->print(" bcs: %d+%d invoked: %d", top->count_inline_bcs(), callee_method->code_size(), callee_method->interpreter_invocation_count());
}
}
EventCompilerInlining event;
if (event.should_commit()) {
CompilerEvent::InlineEvent::post(event, C->compile_id(), caller_method->get_Method(), callee_method, success, inline_msg, caller_bci);
}
}
//------------------------------ok_to_inline-----------------------------------
bool InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms, ciCallProfile& profile,
bool& should_delay) {
#ifdef ASSERT
assert(callee_method != NULL, "caller checks for optimized virtual!");
// Make sure the incoming jvms has the same information content as me.
src/hotspot/share/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
src/hotspot/share/compiler/compilerEvent.hpp:
// there must not be an existing registration for `phase_name`.
// If `use_strdup` is true, then `phase_name` is strdup'ed before registration.
// If `sync` is true, then access to the registration table is synchronized.
static int get_phase_id(const char* phase_name, bool may_exist, bool use_strdup, bool sync) NOT_JFR_RETURN_(-1);
static void post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) NOT_JFR_RETURN();
static void post(EventCompilerPhase& event, jlong start_time, int phase, int compile_id, int level) {
JFR_ONLY(post(event, Ticks(start_time), phase, compile_id, level);)
}
};
class InlineEvent : AllStatic {
static void post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
public:
static void post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
static void post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
};
};
#endif // SHARE_COMPILER_COMPILEREVENT_HPP
src/hotspot/share/compiler/compilerEvent.cpp:
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) {
event.set_compileId(compile_id);
event.set_caller(caller);
event.set_callee(callee);
event.set_succeeded(success);
event.set_message(msg);
event.set_bci(bci);
commit(event);
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) {
JfrStructCalleeMethod callee_struct;
callee_struct.set_type(callee->klass_name()->as_utf8());
callee_struct.set_name(callee->name()->as_utf8());
callee_struct.set_descriptor(callee->signature()->as_utf8());
post(event, compile_id, caller, callee_struct, success, msg, bci);
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) {
JfrStructCalleeMethod callee_struct;
callee_struct.set_type(callee->holder()->name()->as_utf8());
callee_struct.set_name(callee->name()->as_utf8());
callee_struct.set_descriptor(callee->signature()->as_symbol()->as_utf8());
post(event, compile_id, caller, callee_struct, success, msg, bci);
}
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/JFR.java:
* @param phaseName compiler phase name
* @param compileId current compilation unit id
* @param phaseLevel compiler phase nesting level
*/
public static void write(long startTime, String phaseName, int compileId, int phaseLevel) {
compilerToVM().notifyCompilerPhaseEvent(startTime, getPhaseToId(phaseName), compileId, phaseLevel);
}
}
/**
* Helper methods for managing JFR CompilerInlining events. The events are defined in {see @code
* src/share/jfr/metadata/metadata.xml}.
*/
public static final class CompilerInliningEvent {
/**
* Commits a CompilerInlining event.
*
* @param compileId current compilation unit id
* @param caller caller method
* @param callee callee method
* @param succeeded inlining succeeded or not
* @param message extra information on inlining
* @param bci invocation byte code index
*/
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
compileId | uint | Compilation Identifier |
caller | Method | Caller Method |
callee | CalleeMethod struct | Callee Method |
succeeded | boolean | Succeeded |
message | string | Message |
bci | int | Bytecode Index |
Examples 3
bci | int | 96
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | ()V
|
name | string | unlock
|
type | string | java/util/concurrent/locks/ReentrantLock
|
caller | Method | |
descriptor | string | (JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | poll
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/util/concurrent/LinkedBlockingQueue
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/util/concurrent
|
compileId | uint | 84062
|
message | string | inline
|
startTime | long: millis | 237694641875
|
succeeded | boolean | true
|
bci | int | 7
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | (Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;
|
name | string | newInvokeSpecial
|
type | string | java/lang/invoke/LambdaForm$DMH+0x0000007001410400
|
caller | Method | |
descriptor | string | (Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
|
hidden | boolean | true
|
modifiers | int | 8
|
name | string | linkToTargetMethod
|
type | Class | |
classLoader | ClassLoader | null
|
hidden | boolean | true
|
modifiers | int | 16
|
name | string | java.lang.invoke.LambdaForm$MH+0x0000007001410c00/995911260
|
package | Package | |
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/invoke
|
compileId | uint | 77480
|
message | string | force inline by annotation
|
startTime | long: millis | 230280898750
|
succeeded | boolean | true
|
bci | int | 412
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | (Ljava/lang/Throwable;)V
|
name | string | addSuppressed
|
type | string | java/lang/Throwable
|
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 | callee is too large
|
startTime | long: millis | 199115310750
|
succeeded | boolean | false
|
Deoptimization
default profiling startTime eventThread stackTrace 14 17 21 25 26
Category: Java Virtual Machine / Compiler
Describes the detection of an uncommon situation in a compiled method which may lead to deoptimization of the method
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/deoptimization.cpp:
JfrSerializer::register_serializer(TYPE_DEOPTIMIZATIONREASON, true, new DeoptReasonSerializer());
JfrSerializer::register_serializer(TYPE_DEOPTIMIZATIONACTION, true, new DeoptActionSerializer());
}
static void post_deoptimization_event(CompiledMethod* nm,
const Method* method,
int trap_bci,
int instruction,
Deoptimization::DeoptReason reason,
Deoptimization::DeoptAction action) {
assert(nm != NULL, "invariant");
assert(method != NULL, "invariant");
if (EventDeoptimization::is_enabled()) {
static bool serializers_registered = false;
if (!serializers_registered) {
register_serializers();
serializers_registered = true;
}
EventDeoptimization event;
event.set_compileId(nm->compile_id());
event.set_compiler(nm->compiler_type());
event.set_method(method);
event.set_lineNumber(method->line_number_from_bci(trap_bci));
event.set_bci(trap_bci);
event.set_instruction(instruction);
event.set_reason(reason);
event.set_action(action);
event.commit();
}
}
Configuration | enabled | stackTrace |
---|---|---|
default | true | false |
profiling | true | true |
Field | Type | Description |
---|---|---|
compileId | uint | Compilation Identifier |
compiler | CompilerType | Compiler Consider contributing a description to jfreventcollector. |
method | Method | Method Consider contributing a description to jfreventcollector. |
lineNumber | int | Line Number |
bci | int | Bytecode Index |
instruction | Bytecode | Instruction Consider contributing a description to jfreventcollector. |
reason | DeoptimizationReason | Reason Consider contributing a description to jfreventcollector. |
action | DeoptimizationAction | Action Consider contributing a description to jfreventcollector. |
Examples 3
action | DeoptimizationAction | maybe_recompile
|
---|---|---|
bci | int | 36
|
compileId | uint | 85639
|
compiler | CompilerType | c2
|
instruction | Bytecode | if_icmplt
|
lineNumber | int | 654
|
method | Method | |
descriptor | string | (I)V
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | rollbackWriteBuffer
|
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/concurrent/stm/ccstm/AccessHistory
|
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/concurrent/stm/ccstm
|
reason | DeoptimizationReason | loop_limit_check
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 36
|
lineNumber | int | 654
|
method | Method | |
descriptor | string | (I)V
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | rollbackWriteBuffer
|
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/concurrent/stm/ccstm/AccessHistory
|
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/concurrent/stm/ccstm
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 226581434125
|
action | DeoptimizationAction | maybe_recompile
|
---|---|---|
bci | int | 60
|
compileId | uint | 3050
|
compiler | CompilerType | c2
|
instruction | Bytecode | invokeinterface
|
lineNumber | int | 233
|
method | Method | |
descriptor | string | (Ljava/util/stream/TerminalOp;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 16
|
name | string | evaluate
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1024
|
name | string | java/util/stream/AbstractPipeline
|
package | Package | |
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
|
reason | DeoptimizationReason | class_check
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 60
|
lineNumber | int | 233
|
method | Method | |
descriptor | string | (Ljava/util/stream/TerminalOp;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 16
|
name | string | evaluate
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1024
|
name | string | java/util/stream/AbstractPipeline
|
package | Package | |
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 | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 244977272792
|
action | DeoptimizationAction | maybe_recompile
|
---|---|---|
bci | int | 9
|
compileId | uint | 87228
|
compiler | CompilerType | c2
|
instruction | Bytecode | if_icmplt
|
lineNumber | int | 730
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | releaseBargeLocks
|
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 | scala/concurrent/stm/ccstm/InTxnImpl
|
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/concurrent/stm/ccstm
|
reason | DeoptimizationReason | loop_limit_check
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 9
|
lineNumber | int | 730
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | releaseBargeLocks
|
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 | scala/concurrent/stm/ccstm/InTxnImpl
|
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/concurrent/stm/ccstm
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 268196541417
|
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:
TRACE_REQUEST_FUNC(SymbolTableStatistics) {
TableStatistics statistics = SymbolTable::get_table_statistics();
emit_table_statistics<EventSymbolTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(StringTableStatistics) {
TableStatistics statistics = StringTable::get_table_statistics();
emit_table_statistics<EventStringTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(CompilerStatistics) {
EventCompilerStatistics event;
event.set_compileCount(CompileBroker::get_total_compile_count());
event.set_bailoutCount(CompileBroker::get_total_bailout_count());
event.set_invalidatedCount(CompileBroker::get_total_invalidated_count());
event.set_osrCompileCount(CompileBroker::get_total_osr_compile_count());
event.set_standardCompileCount(CompileBroker::get_total_standard_compile_count());
event.set_osrBytesCompiled(CompileBroker::get_sum_osr_bytes_compiled());
event.set_standardBytesCompiled(CompileBroker::get_sum_standard_bytes_compiled());
event.set_nmethodsSize(CompileBroker::get_sum_nmethod_size());
event.set_nmethodCodeSize(CompileBroker::get_sum_nmethod_code_size());
event.set_peakTimeSpent(CompileBroker::get_peak_compilation_time());
event.set_totalTimeSpent(CompileBroker::get_total_compilation_time());
Configuration | enabled | period |
---|---|---|
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 | 15
|
---|---|---|
compileCount | int | 83423
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 113931512
|
nmethodsSize | ulong: bytes | 172847736
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 891
|
peakTimeSpent | long: millis | 7513
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 82532
|
startTime | long: millis | 256590066250
|
totalTimeSpent | long: millis | 463347
|
bailoutCount | int | 13
|
---|---|---|
compileCount | int | 94283
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 132546592
|
nmethodsSize | ulong: bytes | 196818944
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 1067
|
peakTimeSpent | long: millis | 6943
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 93216
|
startTime | long: millis | 244614976375
|
totalTimeSpent | long: millis | 233971
|
bailoutCount | int | 14
|
---|---|---|
compileCount | int | 79172
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 106931648
|
nmethodsSize | ulong: bytes | 164655040
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 888
|
peakTimeSpent | long: millis | 5569
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 78284
|
startTime | long: millis | 252498936625
|
totalTimeSpent | long: millis | 357001
|
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.set_dynamicCompilerThreadCount(UseDynamicNumberOfCompilerThreads);
event.commit();
}
TRACE_REQUEST_FUNC(CodeCacheStatistics) {
// Emit stats for all available code heaps
for (int bt_index = 0; bt_index < static_cast<int>(CodeBlobType::NumTypes); ++bt_index) {
const CodeBlobType bt = static_cast<CodeBlobType>(bt_index);
if (CodeCache::heap_available(bt)) {
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
threadCount | int | Thread Count |
tieredCompilation | boolean | Tiered Compilation |
dynamicCompilerThreadCount | boolean 20+ | Uses Dynamic Number of Compiler Threads |
Examples 3
JVM: Diagnostics
SyncOnValueBasedClass
experimental default profiling startTime eventThread stackTrace 16 17 21 25 26
Category: Java Virtual Machine / Diagnostics
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/synchronizer.cpp:
} else {
assert(DiagnoseSyncOnValueBasedClasses == LOG_WARNING, "invalid value for DiagnoseSyncOnValueBasedClasses");
ResourceMark rm(current);
Log(valuebasedclasses) vblog;
vblog.info("Synchronizing on object " INTPTR_FORMAT " of klass %s", p2i(obj()), obj->klass()->external_name());
if (current->has_last_Java_frame()) {
LogStream info_stream(vblog.info());
current->print_stack_on(&info_stream);
} else {
vblog.info("Cannot find the last Java frame");
}
EventSyncOnValueBasedClass event;
if (event.should_commit()) {
event.set_valueBasedClass(obj->klass());
event.commit();
}
}
if (bcp_was_adjusted) {
last_frame.interpreter_frame_set_bcp(last_frame.interpreter_frame_bcp() + 1);
}
}
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
valueBasedClass | Class | Value Based Class Consider contributing a description to jfreventcollector. |
HeapDump
default profiling startTime duration eventThread stackTrace 15 17 21 25 26
Category: Java Virtual Machine / Diagnostics
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/services/heapDumper.cpp:
_large_object_list->drain(cl);
}
// dump the heap to given path.
int HeapDumper::dump(const char* path, outputStream* out, int compression, bool overwrite, uint num_dump_threads) {
assert(path != NULL && strlen(path) > 0, "path missing");
// print message in interactive case
if (out != NULL) {
out->print_cr("Dumping heap to %s ...", path);
timer()->start();
}
// create JFR event
EventHeapDump event;
AbstractCompressor* compressor = NULL;
if (compression > 0) {
compressor = new (std::nothrow) GZipCompressor(compression);
if (compressor == NULL) {
set_error("Could not allocate gzip compressor");
return -1;
}
}
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ns |
profiling | true | true | 0 ns |
Field | Type | Description |
---|---|---|
destination | string | Destination |
size | long | Size |
gcBeforeDump | boolean | GC Before Dump |
onOutOfMemoryError | boolean | On Out of Memory Error |
JVM: Flag
IntFlagChanged
default profiling startTime 11 17 21 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/jvmFlagAccess.cpp:
virtual void print_range(outputStream* st, const JVMFlagLimit* range) const {
const JVMTypedFlagLimit<T>* r = (const JVMTypedFlagLimit<T>*)range;
print_range_impl(st, r->min(), r->max());
}
virtual void range_error(const char* name, T value, T min, T max, bool verbose) const = 0;
virtual void print_range_impl(outputStream* st, T min, T max) const = 0;
};
class FlagAccessImpl_int : public RangedFlagAccessImpl<int, EventIntFlagChanged> {
public:
void range_error(const char* name, int value, int min, int max, bool verbose) const {
JVMFlag::printError(verbose,
"int %s=%d is outside the allowed range "
"[ %d ... %d ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, int value, bool verbose) const {
return ((JVMFlagConstraintFunc_int)func)(value, verbose);
}
void print_range_impl(outputStream* st, int min, int max) const {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | int | Old Value |
newValue | int | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
UnsignedIntFlagChanged
default profiling startTime 11 17 21 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/jvmFlagAccess.cpp:
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, int value, bool verbose) const {
return ((JVMFlagConstraintFunc_int)func)(value, verbose);
}
void print_range_impl(outputStream* st, int min, int max) const {
st->print("[ %-25d ... %25d ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " INT32_FORMAT_W(-25) " ... " INT32_FORMAT_W(25) " ]", INT_MIN, INT_MAX);
}
};
class FlagAccessImpl_uint : public RangedFlagAccessImpl<uint, EventUnsignedIntFlagChanged> {
public:
void range_error(const char* name, uint value, uint min, uint max, bool verbose) const {
JVMFlag::printError(verbose,
"uint %s=%u is outside the allowed range "
"[ %u ... %u ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, uint value, bool verbose) const {
return ((JVMFlagConstraintFunc_uint)func)(value, verbose);
}
void print_range_impl(outputStream* st, uint min, uint max) const {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | uint | Old Value |
newValue | uint | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
LongFlagChanged
default profiling startTime 11 17 21 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/jvmFlagAccess.cpp:
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, uint value, bool verbose) const {
return ((JVMFlagConstraintFunc_uint)func)(value, verbose);
}
void print_range_impl(outputStream* st, uint min, uint max) const {
st->print("[ %-25u ... %25u ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " UINT32_FORMAT_W(-25) " ... " UINT32_FORMAT_W(25) " ]", 0, UINT_MAX);
}
};
class FlagAccessImpl_intx : public RangedFlagAccessImpl<intx, EventLongFlagChanged> {
public:
void range_error(const char* name, intx value, intx min, intx max, bool verbose) const {
JVMFlag::printError(verbose,
"intx %s=" INTX_FORMAT " is outside the allowed range "
"[ " INTX_FORMAT " ... " INTX_FORMAT " ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, intx value, bool verbose) const {
return ((JVMFlagConstraintFunc_intx)func)(value, verbose);
}
void print_range_impl(outputStream* st, intx min, intx max) const {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | long | Old Value |
newValue | long | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
UnsignedLongFlagChanged
default profiling startTime 11 17 21 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/jvmFlagAccess.cpp:
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, intx value, bool verbose) const {
return ((JVMFlagConstraintFunc_intx)func)(value, verbose);
}
void print_range_impl(outputStream* st, intx min, intx max) const {
st->print("[ " INTX_FORMAT_W(-25) " ... " INTX_FORMAT_W(25) " ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " INTX_FORMAT_W(-25) " ... " INTX_FORMAT_W(25) " ]", min_intx, max_intx);
}
};
class FlagAccessImpl_uintx : public RangedFlagAccessImpl<uintx, EventUnsignedLongFlagChanged> {
public:
void range_error(const char* name, uintx value, uintx min, uintx max, bool verbose) const {
JVMFlag::printError(verbose,
"uintx %s=" UINTX_FORMAT " is outside the allowed range "
"[ " UINTX_FORMAT " ... " UINTX_FORMAT " ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, uintx value, bool verbose) const {
return ((JVMFlagConstraintFunc_uintx)func)(value, verbose);
}
void print_range_impl(outputStream* st, uintx min, uintx max) const {
st->print("[ " UINTX_FORMAT_W(-25) " ... " UINTX_FORMAT_W(25) " ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " UINTX_FORMAT_W(-25) " ... " UINTX_FORMAT_W(25) " ]", uintx(0), max_uintx);
}
};
class FlagAccessImpl_uint64_t : public RangedFlagAccessImpl<uint64_t, EventUnsignedLongFlagChanged> {
public:
void range_error(const char* name, uint64_t value, uint64_t min, uint64_t max, bool verbose) const {
JVMFlag::printError(verbose,
"uint64_t %s=" UINT64_FORMAT " is outside the allowed range "
"[ " UINT64_FORMAT " ... " UINT64_FORMAT " ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, uint64_t value, bool verbose) const {
return ((JVMFlagConstraintFunc_uint64_t)func)(value, verbose);
}
void print_range_impl(outputStream* st, uint64_t min, uint64_t max) const {
st->print("[ " UINT64_FORMAT_W(-25) " ... " UINT64_FORMAT_W(25) " ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " UINT64_FORMAT_W(-25) " ... " UINT64_FORMAT_W(25) " ]", uint64_t(0), uint64_t(max_juint));
}
};
class FlagAccessImpl_size_t : public RangedFlagAccessImpl<size_t, EventUnsignedLongFlagChanged> {
public:
void range_error(const char* name, size_t value, size_t min, size_t max, bool verbose) const {
JVMFlag::printError(verbose,
"size_t %s=" SIZE_FORMAT " is outside the allowed range "
"[ " SIZE_FORMAT " ... " SIZE_FORMAT " ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, size_t value, bool verbose) const {
return ((JVMFlagConstraintFunc_size_t)func)(value, verbose);
}
void print_range_impl(outputStream* st, size_t min, size_t max) const {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | ulong | Old Value |
newValue | ulong | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
DoubleFlagChanged
default profiling startTime 11 17 21 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/jvmFlagAccess.cpp:
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, size_t value, bool verbose) const {
return ((JVMFlagConstraintFunc_size_t)func)(value, verbose);
}
void print_range_impl(outputStream* st, size_t min, size_t max) const {
st->print("[ " SIZE_FORMAT_W(-25) " ... " SIZE_FORMAT_W(25) " ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " SIZE_FORMAT_W(-25) " ... " SIZE_FORMAT_W(25) " ]", size_t(0), size_t(SIZE_MAX));
}
};
class FlagAccessImpl_double : public RangedFlagAccessImpl<double, EventDoubleFlagChanged> {
public:
void range_error(const char* name, double value, double min, double max, bool verbose) const {
JVMFlag::printError(verbose,
"double %s=%f is outside the allowed range "
"[ %f ... %f ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, double value, bool verbose) const {
return ((JVMFlagConstraintFunc_double)func)(value, verbose);
}
void print_range_impl(outputStream* st, double min, double max) const {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | double | Old Value |
newValue | double | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
BooleanFlagChanged
default profiling startTime 11 17 21 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/jvmFlagAccess.cpp:
*((T*)value_addr) = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error check_constraint(const JVMFlag* flag, void * func, bool verbose) const {
return typed_check_constraint(func, flag->read<T>(), verbose);
}
virtual JVMFlag::Error typed_check_constraint(void * func, T value, bool verbose) const = 0;
};
class FlagAccessImpl_bool : public TypedFlagAccessImpl<bool, EventBooleanFlagChanged> {
public:
JVMFlag::Error set_impl(JVMFlag* flag, void* value_addr, JVMFlagOrigin origin) const {
bool verbose = JVMFlagLimit::verbose_checks_needed();
return TypedFlagAccessImpl<bool, EventBooleanFlagChanged>
::check_constraint_and_set(flag, value_addr, origin, verbose);
}
JVMFlag::Error typed_check_constraint(void* func, bool value, bool verbose) const {
return ((JVMFlagConstraintFunc_bool)func)(value, verbose);
}
};
template <typename T, typename EVENT>
class RangedFlagAccessImpl : public TypedFlagAccessImpl<T, EVENT> {
public:
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | boolean | Old Value |
newValue | boolean | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
StringFlagChanged
default profiling startTime 11 17 21 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/jvmFlagAccess.cpp:
JVMFlag::Error JVMFlagAccess::set_impl(JVMFlag* flag, void* value, JVMFlagOrigin origin) {
if (flag->is_ccstr()) {
return set_ccstr(flag, (ccstr*)value, origin);
} else {
return access_impl(flag)->set(flag, value, origin);
}
}
JVMFlag::Error JVMFlagAccess::set_ccstr(JVMFlag* flag, ccstr* value, JVMFlagOrigin origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_ccstr()) return JVMFlag::WRONG_FORMAT;
ccstr old_value = flag->get_ccstr();
trace_flag_changed<ccstr, EventStringFlagChanged>(flag, old_value, *value, origin);
char* new_value = NULL;
if (*value != NULL) {
new_value = os::strdup_check_oom(*value);
}
flag->set_ccstr(new_value);
if (!flag->is_default() && old_value != NULL) {
// Old value is heap allocated so free it.
FREE_C_HEAP_ARRAY(char, old_value);
}
// Unlike the other APIs, the old vale is NOT returned, so the caller won't need to free it.
// The callers typically don't care what the old value is.
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | string | Old Value |
newValue | string | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
IntFlag
default profiling startTime duration end of every chunk 11 17 21 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 | ParGCArrayScanChunk
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 237269678000
|
value | int | 50
|
name | string | ParGCArrayScanChunk
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 199126994000
|
value | int | 50
|
name | string | SoftwarePrefetchHintDistance
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 247327043708
|
value | int | 384
|
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 | UseSVE
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 201472544666
|
value | uint | 0
|
name | string | UseSVE
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 252333675792
|
value | uint | 0
|
name | string | SharedSymbolTableBucketSize
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 242214086292
|
value | uint | 4
|
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 | MaxBCEAEstimateLevel
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 199127004875
|
value | long | 5
|
name | string | LoopOptsCount
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 230210325458
|
value | long | 43
|
name | string | MaxJumpTableSparseness
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 242226857333
|
value | long | 5
|
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 | PausePadding
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 199127013875
|
value | ulong | 1
|
name | string | MaxRAM
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 242226883833
|
value | ulong | 137438953472
|
name | string | NewRatio
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 230210338708
|
value | ulong | 2
|
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 | ZCollectionIntervalMajor
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 237269727125
|
value | double | -1.0
|
name | string | MaxRAMPercentage
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 218782454875
|
value | double | 25.0
|
name | string | SweeperThreshold
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 247327096375
|
value | double | 15.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 | PrintOptoInlining
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 199127027375
|
value | boolean | false
|
name | string | ReduceSignalUsage
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 242226925083
|
value | boolean | false
|
name | string | PrintBlockElimination
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 230210347833
|
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 | SharedClassListFile
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 205981207375
|
value | string | null
|
name | string | CompileCommandFile
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 233971259000
|
value | string | null
|
name | string | DumpLoadedClassList
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 247327150708
|
value | string | null
|
JVM: GC: Collector
GarbageCollection
default profiling startTime duration 11 17 21 25 26 graal vm
Category: Java Virtual Machine / GC / Collector
Garbage collection performed by the JVM
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
// All GC dependencies against the trace framework is contained within this file.
typedef uintptr_t TraceAddress;
bool GCTracer::should_send_cpu_time_event() const {
return EventGCCPUTime::is_enabled();
}
void GCTracer::send_garbage_collection_event() const {
EventGarbageCollection event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_name(_shared_gc_info.name());
event.set_cause((u2) _shared_gc_info.cause());
event.set_sumOfPauses(_shared_gc_info.sum_of_pauses());
event.set_longestPause(_shared_gc_info.longest_pause());
event.set_starttime(_shared_gc_info.start_timestamp());
event.set_endtime(_shared_gc_info.end_timestamp());
event.commit();
}
}
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | GCName | Name The name of the Garbage Collector |
cause | GCCause | Cause The reason for triggering this Garbage Collection |
sumOfPauses | Tickspan | Sum of Pauses Sum of all the times in which Java execution was paused during the garbage collection |
longestPause | Tickspan | Longest Pause Longest individual pause during the garbage collection |
Examples 3
SystemGC
default profiling startTime duration eventThread stackTrace 17 21 25 26
Category: Java Virtual Machine / GC / Collector
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/prims/jvm.cpp:
event.commit();
}
JVM_END
JVM_ENTRY_NO_ENV(void, JVM_Halt(jint code))
before_exit(thread, true);
vm_exit(code);
JVM_END
JVM_ENTRY_NO_ENV(void, JVM_GC(void))
if (!DisableExplicitGC) {
EventSystemGC event;
event.set_invokedConcurrent(ExplicitGCInvokesConcurrent);
Universe::heap()->collect(GCCause::_java_lang_system_gc);
event.commit();
}
JVM_END
JVM_LEAF(jlong, JVM_MaxObjectInspectionAge(void))
return Universe::heap()->millis_since_last_whole_heap_examined();
JVM_END
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
invokedConcurrent | boolean | Invoked Concurrent |
Examples 3
invokedConcurrent | boolean | false
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 257
|
name | string | gc
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/Runtime
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 266837931333
|
invokedConcurrent | boolean | false
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 257
|
name | string | gc
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/Runtime
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 232762417916
|
invokedConcurrent | boolean | false
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 257
|
name | string | gc
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/Runtime
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 268048239042
|
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 Young Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
send_adaptive_ihop_statistics(threshold,
internal_target_occupancy,
current_occupancy,
additional_buffer_size,
predicted_allocation_rate,
predicted_marking_length,
prediction_active);
}
void G1NewTracer::send_g1_young_gc_event() {
// Check that the pause type has been updated to something valid for this event.
G1GCPauseTypeHelper::assert_is_young_pause(_pause);
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type(static_cast<uint>(_pause));
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void G1NewTracer::send_evacuation_info_event(G1EvacInfo* info) {
EventEvacuationInformation e;
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
type | G1YCType | Type Consider contributing a description to jfreventcollector. |
Examples 1
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 | 0
|
---|---|---|
gcTimeRatio | uint | 99
|
isExplicitGCConcurrent | boolean | false
|
isExplicitGCDisabled | boolean | false
|
oldCollector | GCName | ParallelOld
|
parallelGCThreads | uint | 10
|
pauseTarget | long: millis | -9223372036854775808
|
startTime | long: millis | 235083261792
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | ParallelScavenge
|
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 | 212496126833
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | G1New
|
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
ZThreadDebug
internal startTime duration eventThread 18 21 25 26
Category: Java Virtual Machine / GC / Detailed
Temporary latency measurements used during development and debugging of ZGC
Only valid for the ZGC.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zTracer.cpp:
NoSafepointVerifier nsv;
EventZThreadPhase e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current_or_undefined());
e.set_name(name);
e.set_starttime(start);
e.set_endtime(end);
e.commit();
}
}
void ZTracer::send_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
NoSafepointVerifier nsv;
EventZThreadDebug e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current_or_undefined());
e.set_name(name);
e.set_starttime(start);
e.set_endtime(end);
e.commit();
}
}
src/hotspot/share/gc/z/zTracer.inline.hpp:
inline void ZTracer::report_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadPhase::is_enabled()) {
send_thread_phase(name, start, end);
}
}
inline void ZTracer::report_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadDebug::is_enabled()) {
send_thread_debug(name, start, end);
}
}
inline ZTraceThreadDebug::ZTraceThreadDebug(const char* name) :
_start(Ticks::now()),
_name(name) {}
inline ZTraceThreadDebug::~ZTraceThreadDebug() {
ZTracer::tracer()->report_thread_debug(_name, _start, Ticks::now());
}
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name The name of the GC runner |
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/g1/g1Trace.cpp:
void G1OldTracer::report_gc_start_impl(GCCause::Cause cause, const Ticks& timestamp) {
_shared_gc_info.set_start_timestamp(timestamp);
}
void G1OldTracer::set_gc_cause(GCCause::Cause cause) {
_shared_gc_info.set_cause(cause);
}
void G1MMUTracer::report_mmu(double time_slice_sec, double gc_time_sec, double max_time_sec) {
send_g1_mmu_event(time_slice_sec * MILLIUNITS,
gc_time_sec * MILLIUNITS,
max_time_sec * MILLIUNITS);
}
void G1MMUTracer::send_g1_mmu_event(double time_slice_ms, double gc_time_ms, double max_time_ms) {
EventG1MMU e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_timeSlice(time_slice_ms);
e.set_gcTime(gc_time_ms);
e.set_pauseTarget(max_time_ms);
e.commit();
}
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
timeSlice | long: millis | Time Slice Time slice used to calculate MMU |
gcTime | long: millis | GC Time Time stopped because of GC during last time slice |
pauseTarget | long: millis | Pause Target Max time allowed to be spent on GC during last time slice |
Examples 1
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/g1/g1Trace.cpp:
G1GCPauseTypeHelper::assert_is_young_pause(_pause);
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type(static_cast<uint>(_pause));
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void G1NewTracer::send_evacuation_info_event(G1EvacInfo* info) {
EventEvacuationInformation e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_cSetRegions(info->collectionset_regions());
e.set_cSetUsedBefore(info->collectionset_used_before());
e.set_cSetUsedAfter(info->collectionset_used_after());
e.set_allocationRegions(info->allocation_regions());
e.set_allocationRegionsUsedBefore(info->alloc_regions_used_before());
e.set_allocationRegionsUsedAfter(info->alloc_regions_used_before() + info->bytes_used());
e.set_bytesCopied(info->bytes_used());
e.set_regionsFreed(info->regions_freed());
e.commit();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
cSetRegions | uint | Collection Set Regions |
cSetUsedBefore | ulong: bytes | Collection Set Before Memory usage before GC in the collection set regions |
cSetUsedAfter | ulong: bytes | Collection Set After Memory usage after GC in the collection set regions |
allocationRegions | uint | Allocation Regions Regions chosen as allocation regions during evacuation (includes survivors and old space regions) |
allocationRegionsUsedBefore | ulong: bytes | Allocation Regions Before Memory usage before GC in allocation regions |
allocationRegionsUsedAfter | ulong: bytes | Allocation Regions After Memory usage after GC in allocation regions |
bytesCopied | ulong: bytes | Bytes Copied |
regionsFreed | uint | Regions Freed |
Examples 1
allocationRegions | uint | 1
|
---|---|---|
allocationRegionsUsedAfter | ulong: bytes | 1797952
|
allocationRegionsUsedBefore | ulong: bytes | 0
|
bytesCopied | ulong: bytes | 1797952
|
cSetRegions | uint | 12
|
cSetUsedAfter | ulong: bytes | 0
|
cSetUsedBefore | ulong: bytes | 100378048
|
gcId | uint | 864
|
regionsFreed | uint | 12
|
startTime | long: millis | 238424354791
|
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_starttime(timestamp);
event.set_endtime(timestamp);
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_count(count);
event.set_totalSize(size);
event.commit();
}
}
void ObjectCountEventSender::send(const KlassInfoEntry* entry, const Ticks& timestamp) {
Klass* klass = entry->klass();
jlong count = entry->count();
julong total_size = entry->words() * BytesPerWord;
send_event_if_enabled<EventObjectCount>(klass, count, total_size, timestamp);
send_event_if_enabled<EventObjectCountAfterGC>(klass, count, total_size, timestamp);
}
#endif // INCLUDE_SERVICES
Configuration | enabled |
---|---|
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 | 3658
|
---|---|---|
gcId | uint | 298
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1040
|
name | string | [Ljava/util/concurrent/ConcurrentHashMap$Node;
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/util/concurrent
|
startTime | long: millis | 230246405958
|
totalSize | ulong: bytes | 28056184
|
count | long | 50852
|
---|---|---|
gcId | uint | 707
|
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 | 242329469792
|
totalSize | ulong: bytes | 3254528
|
count | long | 390149
|
---|---|---|
gcId | uint | 786
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | java/lang/String
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/lang
|
startTime | long: millis | 201496525750
|
totalSize | ulong: bytes | 9363576
|
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/g1/g1Trace.cpp:
s.set_allocated(summary.allocated() * HeapWordSize);
s.set_wasted(summary.wasted() * HeapWordSize);
s.set_used(summary.used() * HeapWordSize);
s.set_undoWaste(summary.undo_wasted() * HeapWordSize);
s.set_regionEndWaste(summary.region_end_waste() * HeapWordSize);
s.set_regionsRefilled(summary.regions_filled());
s.set_directAllocated(summary.direct_allocated() * HeapWordSize);
s.set_failureUsed(summary.failure_used() * HeapWordSize);
s.set_failureWaste(summary.failure_waste() * HeapWordSize);
return s;
}
void G1NewTracer::send_young_evacuation_statistics(const G1EvacSummary& summary) const {
EventG1EvacuationYoungStatistics surv_evt;
if (surv_evt.should_commit()) {
surv_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
surv_evt.commit();
}
}
void G1NewTracer::send_old_evacuation_statistics(const G1EvacSummary& summary) const {
EventG1EvacuationOldStatistics old_evt;
if (old_evt.should_commit()) {
old_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
old_evt.commit();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
statistics | G1EvacuationStatistics struct | Evacuation Statistics |
Examples 1
startTime | long: millis | 225521672291
|
---|---|---|
statistics | G1EvacuationStatistics | |
allocated | ulong: bytes | 19978960
|
directAllocated | ulong: bytes | 524304
|
failureUsed | ulong: bytes | 0
|
failureWaste | ulong: bytes | 0
|
gcId | uint | 824
|
numDirectAllocated | ulong | 6182775016
|
numPlabsFilled | ulong | 34036352
|
regionEndWaste | ulong: bytes | 0
|
regionsRefilled | uint | 3
|
undoWaste | ulong: bytes | 0
|
used | ulong: bytes | 17712576
|
wasted | ulong: bytes | 2024
|
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/g1/g1Trace.cpp:
s.set_failureWaste(summary.failure_waste() * HeapWordSize);
return s;
}
void G1NewTracer::send_young_evacuation_statistics(const G1EvacSummary& summary) const {
EventG1EvacuationYoungStatistics surv_evt;
if (surv_evt.should_commit()) {
surv_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
surv_evt.commit();
}
}
void G1NewTracer::send_old_evacuation_statistics(const G1EvacSummary& summary) const {
EventG1EvacuationOldStatistics old_evt;
if (old_evt.should_commit()) {
old_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
old_evt.commit();
}
}
void G1NewTracer::send_basic_ihop_statistics(size_t threshold,
size_t target_occupancy,
size_t current_occupancy,
size_t last_allocation_size,
double last_allocation_duration,
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
statistics | G1EvacuationStatistics struct | Evacuation Statistics |
Examples 1
startTime | long: millis | 235476619458
|
---|---|---|
statistics | G1EvacuationStatistics | |
allocated | ulong: bytes | 5399424
|
directAllocated | ulong: bytes | 44285784
|
failureUsed | ulong: bytes | 0
|
failureWaste | ulong: bytes | 0
|
gcId | uint | 855
|
numDirectAllocated | ulong | 6182775016
|
numPlabsFilled | ulong | 34036352
|
regionEndWaste | ulong: bytes | 3306160
|
regionsRefilled | uint | 7
|
undoWaste | ulong: bytes | 0
|
used | ulong: bytes | 5136792
|
wasted | ulong: bytes | 27128
|
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/g1/g1Trace.cpp:
EventG1EvacuationOldStatistics old_evt;
if (old_evt.should_commit()) {
old_evt.set_statistics(create_g1_evacstats(GCId::current(), summary));
old_evt.commit();
}
}
void G1NewTracer::send_basic_ihop_statistics(size_t threshold,
size_t target_occupancy,
size_t current_occupancy,
size_t last_allocation_size,
double last_allocation_duration,
double last_marking_length) {
EventG1BasicIHOP evt;
if (evt.should_commit()) {
evt.set_gcId(GCId::current());
evt.set_threshold(threshold);
evt.set_targetOccupancy(target_occupancy);
evt.set_thresholdPercentage(target_occupancy > 0 ? ((double)threshold / target_occupancy) : 0.0);
evt.set_currentOccupancy(current_occupancy);
evt.set_recentMutatorAllocationSize(last_allocation_size);
evt.set_recentMutatorDuration(last_allocation_duration * MILLIUNITS);
evt.set_recentAllocationRate(last_allocation_duration != 0.0 ? last_allocation_size / last_allocation_duration : 0.0);
evt.set_lastMarkingDuration(last_marking_length * MILLIUNITS);
evt.commit();
Configuration | enabled |
---|---|
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 concurrent start to the first mixed GC |
Examples 1
currentOccupancy | ulong: bytes | 242360912
|
---|---|---|
gcId | uint | 840
|
lastMarkingDuration | long: millis | 563
|
recentAllocationRate | double: bytes-per-second | 0.0
|
recentMutatorAllocationSize | ulong: bytes | 0
|
recentMutatorDuration | long: millis | 133
|
startTime | long: millis | 232981557291
|
targetOccupancy | ulong: bytes | 922746880
|
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/g1/g1Trace.cpp:
evt.set_recentAllocationRate(last_allocation_duration != 0.0 ? last_allocation_size / last_allocation_duration : 0.0);
evt.set_lastMarkingDuration(last_marking_length * MILLIUNITS);
evt.commit();
}
}
void G1NewTracer::send_adaptive_ihop_statistics(size_t threshold,
size_t internal_target_occupancy,
size_t current_occupancy,
size_t additional_buffer_size,
double predicted_allocation_rate,
double predicted_marking_length,
bool prediction_active) {
EventG1AdaptiveIHOP evt;
if (evt.should_commit()) {
evt.set_gcId(GCId::current());
evt.set_threshold(threshold);
evt.set_thresholdPercentage(internal_target_occupancy > 0 ? ((double)threshold / internal_target_occupancy) : 0.0);
evt.set_ihopTargetOccupancy(internal_target_occupancy);
evt.set_currentOccupancy(current_occupancy);
evt.set_additionalBufferSize(additional_buffer_size);
evt.set_predictedAllocationRate(predicted_allocation_rate);
evt.set_predictedMarkingDuration(predicted_marking_length * MILLIUNITS);
evt.set_predictionActive(prediction_active);
evt.commit();
Configuration | enabled |
---|---|
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 concurrent start to the first mixed GC |
predictionActive | boolean | Prediction Active Indicates whether the adaptive IHOP prediction is active |
Examples 1
additionalBufferSize | ulong: bytes | 2139095040
|
---|---|---|
currentOccupancy | ulong: bytes | 440800336
|
gcId | uint | 857
|
ihopTargetOccupancy | ulong: bytes | 3394869657
|
predictedAllocationRate | double: bytes-per-second | 2.2832267814716234E9
|
predictedMarkingDuration | long: millis | 521
|
predictionActive | boolean | true
|
startTime | long: millis | 235513152875
|
threshold | ulong: bytes | 64059717
|
thresholdPercentage | float: percentage | 0.018869566
|
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 Scavenge, G1 and CMS with Parallel New. Due to promotion being done in parallel an object might be reported multiple times as the GC threads race to copy all objects.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
void YoungGCTracer::send_young_gc_event() const {
EventYoungGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_tenuringThreshold(_tenuring_threshold);
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
bool YoungGCTracer::should_send_promotion_in_new_plab_event() const {
return EventPromoteObjectInNewPLAB::is_enabled();
}
bool YoungGCTracer::should_send_promotion_outside_plab_event() const {
return EventPromoteObjectOutsidePLAB::is_enabled();
}
void YoungGCTracer::send_promotion_in_new_plab_event(Klass* klass, size_t obj_size,
uint age, bool tenured,
size_t plab_size) const {
EventPromoteObjectInNewPLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.set_plabSize(plab_size);
event.commit();
}
}
Configuration | enabled |
---|---|
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 scavenge the object survives. Newly allocated objects have tenuring age 0. |
tenured | boolean | Tenured True if object was promoted to Old space, otherwise the object was aged and copied to a Survivor space |
plabSize | ulong: bytes | PLAB Size Size of the allocated PLAB to which the object was copied |
Examples 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 | 1041
|
name | string | [Lorg/apache/spark/storage/FileSegment;
|
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/storage
|
objectSize | ulong: bytes | 56
|
plabSize | ulong: bytes | 32752
|
startTime | long: millis | 230210642000
|
tenured | boolean | false
|
tenuringAge | uint | 0
|
gcId | uint | 778
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 24
|
name | string | java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionNode
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/util/concurrent/locks
|
objectSize | ulong: bytes | 32
|
plabSize | ulong: bytes | 29432
|
startTime | long: millis | 199113309083
|
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 Scavenge, G1 and CMS with Parallel New. Due to promotion being done in parallel an object might be reported multiple times as the GC threads race to copy all objects.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_gcId(GCId::current());
e.set_tenuringThreshold(_tenuring_threshold);
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
bool YoungGCTracer::should_send_promotion_in_new_plab_event() const {
return EventPromoteObjectInNewPLAB::is_enabled();
}
bool YoungGCTracer::should_send_promotion_outside_plab_event() const {
return EventPromoteObjectOutsidePLAB::is_enabled();
}
void YoungGCTracer::send_promotion_in_new_plab_event(Klass* klass, size_t obj_size,
uint age, bool tenured,
size_t plab_size) const {
EventPromoteObjectInNewPLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.set_plabSize(plab_size);
event.commit();
}
}
void YoungGCTracer::send_promotion_outside_plab_event(Klass* klass, size_t obj_size,
uint age, bool tenured) const {
EventPromoteObjectOutsidePLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.commit();
}
}
void OldGCTracer::send_old_gc_event() const {
Configuration | enabled |
---|---|
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 scavenge the object survives. Newly allocated objects have tenuring age 0. |
tenured | boolean | Tenured True if object was promoted to Old space, otherwise the object was aged and copied to a Survivor space |
Examples 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();
}
}
// 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/g1/g1Trace.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_used());
e.set_bytesCopied(info->bytes_used());
e.set_regionsFreed(info->regions_freed());
e.commit();
}
}
void G1NewTracer::send_evacuation_failed_event(const EvacuationFailedInfo& ef_info) const {
EventEvacuationFailed e;
if (e.should_commit()) {
// Create JFR structured failure data
JfrStructCopyFailed evac_failed;
evac_failed.set_objectCount(ef_info.failed_count());
evac_failed.set_firstSize(ef_info.first_size() * HeapWordSize);
evac_failed.set_smallestSize(ef_info.smallest_size() * HeapWordSize);
evac_failed.set_totalSize(ef_info.total_size() * HeapWordSize);
// Add to the event
e.set_gcId(GCId::current());
e.set_evacuationFailed(evac_failed);
e.commit();
Configuration | enabled |
---|---|
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();
}
}
// G1
void OldGCTracer::send_concurrent_mode_failure_event() {
EventConcurrentModeFailure e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.commit();
}
}
static JfrStructVirtualSpace to_struct(const VirtualSpaceSummary& summary) {
JfrStructVirtualSpace space;
space.set_start((TraceAddress)summary.start());
space.set_committedEnd((TraceAddress)summary.committed_end());
space.set_committedSize(summary.committed_size());
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
Examples 1
GCCPUTime
default profiling startTime 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC, ParallelGC, SerialGC
Missing in: ShenandoahGC, ZGC
GC CPU Time information. Supported: G1GC, ParallelGC and SerialGC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
// All GC dependencies against the trace framework is contained within this file.
typedef uintptr_t TraceAddress;
bool GCTracer::should_send_cpu_time_event() const {
return EventGCCPUTime::is_enabled();
}
void GCTracer::send_garbage_collection_event() const {
EventGarbageCollection event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_name(_shared_gc_info.name());
event.set_cause((u2) _shared_gc_info.cause());
event.set_sumOfPauses(_shared_gc_info.sum_of_pauses());
event.set_longestPause(_shared_gc_info.longest_pause());
event.set_starttime(_shared_gc_info.start_timestamp());
event.set_endtime(_shared_gc_info.end_timestamp());
event.commit();
}
}
void GCTracer::send_cpu_time_event(double user_time, double system_time, double real_time) const {
EventGCCPUTime e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_userTime((size_t)(user_time * NANOUNITS));
e.set_systemTime((size_t)(system_time * NANOUNITS));
e.set_realTime((size_t)(real_time * NANOUNITS));
e.commit();
}
}
void GCTracer::send_reference_stats_event(ReferenceType type, size_t count) const {
EventGCReferenceStatistics e;
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
userTime | ulong: nanos | User Time |
systemTime | ulong: nanos | System Time |
realTime | ulong: nanos | Real Time |
Examples 3
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, JavaThread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, false, thread);)
EventObjectAllocationInNewTLAB event;
if (event.should_commit()) {
event.set_objectClass(klass);
event.set_allocationSize(alloc_size);
event.set_tlabSize(tlab_size);
event.commit();
}
}
void AllocTracer::send_allocation_requiring_gc_event(size_t size, uint gcId) {
EventAllocationRequiringGC event;
if (event.should_commit()) {
event.set_gcId(gcId);
event.set_size(size);
event.commit();
}
}
Configuration | enabled | stackTrace |
---|---|---|
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 | 911
|
---|---|---|
size | ulong: bytes | 466832
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 73
|
lineNumber | int | 145
|
method | Method | |
descriptor | string | (Lio/netty/util/HashingStrategy;Lio/netty/handler/codec/ValueConverter;Lio/netty/handler/codec/DefaultHeaders$NameValidator;ILio/netty/handler/codec/DefaultHeaders$ValueValidator;)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 | 1
|
name | string | io/netty/handler/codec/DefaultHeaders
|
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 | io/netty/handler/codec
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | true
|
startTime | long: millis | 251490418041
|
gcId | uint | 797
|
---|---|---|
size | ulong: bytes | 32
|
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 | 281676020375
|
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 | 165
|
start | ulong: address | 22858956800
|
startTime | long: millis | 199114847666
|
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_starttime(timestamp);
event.set_endtime(timestamp);
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_count(count);
event.set_totalSize(size);
event.commit();
}
}
void ObjectCountEventSender::send(const KlassInfoEntry* entry, const Ticks& timestamp) {
Klass* klass = entry->klass();
jlong count = entry->count();
julong total_size = entry->words() * BytesPerWord;
send_event_if_enabled<EventObjectCount>(klass, count, total_size, timestamp);
send_event_if_enabled<EventObjectCountAfterGC>(klass, count, total_size, timestamp);
}
#endif // INCLUDE_SERVICES
Configuration | enabled | period |
---|---|---|
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 | 63411
|
---|---|---|
gcId | uint | 302
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 16
|
name | string | java/lang/invoke/MemberName
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/lang/invoke
|
startTime | long: millis | 232766745792
|
totalSize | ulong: bytes | 3043728
|
count | long | 81829
|
---|---|---|
gcId | uint | 780
|
objectClass | 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
|
startTime | long: millis | 199152438958
|
totalSize | ulong: bytes | 2618528
|
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;
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
ZAllocationStall
default profiling startTime duration eventThread 15 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Time spent waiting for memory to become available
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zPageAllocator.cpp:
// Success
return true;
}
static void check_out_of_memory_during_initialization() {
if (!is_init_completed()) {
vm_exit_during_initialization("java.lang.OutOfMemoryError", "Java heap too small");
}
}
bool ZPageAllocator::alloc_page_stall(ZPageAllocation* allocation) {
ZStatTimer timer(ZCriticalPhaseAllocationStall);
EventZAllocationStall event;
ZPageAllocationStall result;
// We can only block if the VM is fully initialized
check_out_of_memory_during_initialization();
// Increment stalled counter
Atomic::inc(&_nstalled);
do {
// Start asynchronous GC
ZCollectedHeap::heap()->collect(GCCause::_z_allocation_stall);
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
type | ZPageTypeType | Type Consider contributing a description to jfreventcollector. |
size | ulong: bytes | Size |
ZPageAllocation
default profiling startTime duration eventThread stackTrace 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/zPageAllocator.cpp:
free_page_inner(page, false /* reclaimed */);
}
// Adjust capacity and used to reflect the failed capacity increase
const size_t remaining = allocation->size() - freed;
decrease_used(remaining, false /* reclaimed */);
decrease_capacity(remaining, true /* set_max_capacity */);
// Try satisfy stalled allocations
satisfy_stalled();
}
ZPage* ZPageAllocator::alloc_page(uint8_t type, size_t size, ZAllocationFlags flags) {
EventZPageAllocation event;
retry:
ZPageAllocation allocation(type, size, flags);
// Allocate one or more pages from the page cache. If the allocation
// succeeds but the returned pages don't cover the complete allocation,
// then finalize phase is allowed to allocate the remaining memory
// directly from the physical memory manager. Note that this call might
// block in a safepoint if the non-blocking flag is not set.
if (!alloc_page_or_stall(&allocation)) {
// Out of memory
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true 15+ | 1 ms |
profiling | true | true 15+ | 1 ms |
Field | Type | Description |
---|---|---|
type | ZPageTypeType 15+ | Type Consider contributing a description to jfreventcollector. |
size | ulong: bytes 15+ | Size |
flushed | ulong: bytes 17 21 until JDK 25 | Flushed |
committed | ulong: bytes 15+ | Committed |
segments | uint 17 21 until JDK 25 | Segments |
nonBlocking | boolean | Non-blocking |
Examples 1
committed | ulong: bytes | 0
|
---|---|---|
flushed | ulong: bytes | 0
|
nonBlocking | boolean | false
|
segments | uint | 1
|
size | ulong: bytes | 2097152
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | 23
|
method | Method | |
descriptor | string | (Ljava/lang/Object;)Lscala/runtime/ObjectRef;
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | create
|
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/runtime/ObjectRef
|
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/runtime
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 274627345292
|
type | ZPageTypeType | Small
|
ZRelocationSet
default profiling startTime duration eventThread 15 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/zRelocationSetSelector.cpp:
ZRelocationSetSelector::ZRelocationSetSelector() :
_small("Small", ZPageTypeSmall, ZPageSizeSmall, ZObjectSizeLimitSmall),
_medium("Medium", ZPageTypeMedium, ZPageSizeMedium, ZObjectSizeLimitMedium),
_large("Large", ZPageTypeLarge, 0 /* page_size */, 0 /* object_size_limit */),
_empty_pages() {}
void ZRelocationSetSelector::select() {
// Select pages to relocate. The resulting relocation set will be
// sorted such that medium pages comes first, followed by small
// pages. Pages within each page group will be semi-sorted by live
// bytes in ascending order. Relocating pages in this order allows
// us to start reclaiming memory more quickly.
EventZRelocationSet event;
// Select pages from each group
_large.select();
_medium.select();
_small.select();
// Send event
event.commit(total(), empty(), relocate());
}
ZRelocationSetSelectorStats ZRelocationSetSelector::stats() const {
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
total | ulong: bytes | Total |
empty | ulong: bytes | Empty |
relocate | ulong: bytes 16+ | Relocate |
Examples 1
ZRelocationSetGroup
default profiling startTime duration eventThread 15 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/zRelocationSetSelector.cpp:
// Update statistics
_stats._relocate = selected_live_bytes;
log_trace(gc, reloc)("Relocation Set (%s Pages): %d->%d, %d skipped, " SIZE_FORMAT " forwarding entries",
_name, selected_from, selected_to, npages - selected_from, selected_forwarding_entries);
}
void ZRelocationSetSelectorGroup::select() {
if (is_disabled()) {
return;
}
EventZRelocationSetGroup event;
if (is_selectable()) {
select_inner();
}
// Send event
event.commit(_page_type, _stats.npages(), _stats.total(), _stats.empty(), _stats.relocate());
}
ZRelocationSetSelector::ZRelocationSetSelector() :
_small("Small", ZPageTypeSmall, ZPageSizeSmall, ZObjectSizeLimitSmall),
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
type | ZPageTypeType | Type Consider contributing a description to jfreventcollector. |
pages | ulong 17 until JDK 21 | Pages |
total | ulong: bytes | Total |
empty | ulong: bytes | Empty |
relocate | ulong: bytes 16+ | Relocate |
Examples 1
ZStatisticsCounter
experimental 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 ZTracer();
JFR_ONLY(register_jfr_type_serializers());
}
void ZTracer::send_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
NoSafepointVerifier nsv;
EventZStatisticsCounter e;
if (e.should_commit()) {
e.set_id(counter.id());
e.set_increment(increment);
e.set_value(value);
e.commit();
}
}
void ZTracer::send_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
NoSafepointVerifier nsv;
src/hotspot/share/gc/z/zTracer.inline.hpp:
#ifndef SHARE_GC_Z_ZTRACER_INLINE_HPP
#define SHARE_GC_Z_ZTRACER_INLINE_HPP
#include "gc/z/zTracer.hpp"
#include "jfr/jfrEvents.hpp"
inline ZTracer* ZTracer::tracer() {
return _tracer;
}
inline void ZTracer::report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void ZTracer::report_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
id | ZStatisticsCounterType | Id Consider contributing a description to jfreventcollector. |
increment | ulong | Increment |
value | ulong | Value |
Examples 1
id | ZStatisticsCounterType | Mark Segment Reset Contention
|
---|---|---|
increment | ulong | 1
|
startTime | long: millis | 230743882667
|
value | ulong | 2
|
ZStatisticsSampler
experimental 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(const ZStatSampler& sampler, uint64_t value) {
NoSafepointVerifier nsv;
EventZStatisticsSampler e;
if (e.should_commit()) {
e.set_id(sampler.id());
e.set_value(value);
e.commit();
}
}
void ZTracer::send_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
NoSafepointVerifier nsv;
EventZThreadPhase e(UNTIMED);
src/hotspot/share/gc/z/zTracer.inline.hpp:
inline ZTracer* ZTracer::tracer() {
return _tracer;
}
inline void ZTracer::report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void ZTracer::report_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadPhase::is_enabled()) {
send_thread_phase(name, start, end);
}
}
inline void ZTracer::report_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
id | ZStatisticsSamplerType | Id Consider contributing a description to jfreventcollector. |
value | ulong | Value |
Examples 1
id | ZStatisticsSamplerType | Concurrent References Enqueue
|
---|---|---|
startTime | long: millis | 230816836709
|
value | ulong | 3250
|
ZThreadPhase
experimental 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;
EventZStatisticsSampler e;
if (e.should_commit()) {
e.set_id(sampler.id());
e.set_value(value);
e.commit();
}
}
void ZTracer::send_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
NoSafepointVerifier nsv;
EventZThreadPhase e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current_or_undefined());
e.set_name(name);
e.set_starttime(start);
e.set_endtime(end);
e.commit();
}
}
void ZTracer::send_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
NoSafepointVerifier nsv;
src/hotspot/share/gc/z/zTracer.inline.hpp:
inline void ZTracer::report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void ZTracer::report_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadPhase::is_enabled()) {
send_thread_phase(name, start, end);
}
}
inline void ZTracer::report_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadDebug::is_enabled()) {
send_thread_debug(name, start, end);
}
}
inline ZTraceThreadDebug::ZTraceThreadDebug(const char* name) :
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
Examples 1
ZUncommit
default profiling startTime duration eventThread 15 17 21 25 26
Category: Java Virtual Machine / GC / Detailed
Uncommitting of memory
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zUncommitter.cpp:
bool ZUncommitter::should_continue() const {
ZLocker<ZConditionLock> locker(&_lock);
return !_stop;
}
void ZUncommitter::run_service() {
uint64_t timeout = 0;
while (wait(timeout)) {
EventZUncommit event;
size_t uncommitted = 0;
while (should_continue()) {
// Uncommit chunk
const size_t flushed = _page_allocator->uncommit(&timeout);
if (flushed == 0) {
// Done
break;
}
uncommitted += flushed;
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
uncommitted | ulong: bytes | Uncommitted |
ZUnmap
default profiling startTime duration eventThread 17 21 until JDK 25
Category: Java Virtual Machine / GC / Detailed
Appearing in: ZGC
Missing in: G1GC, ParallelGC, SerialGC, ShenandoahGC
Unmapping of memory
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zUnmapper.cpp:
ZPage* const page = _queue.remove_first();
if (page != NULL) {
return page;
}
_lock.wait();
}
}
void ZUnmapper::do_unmap_and_destroy_page(ZPage* page) const {
EventZUnmap event;
const size_t unmapped = page->size();
// Unmap and destroy
_page_allocator->unmap_page(page);
_page_allocator->destroy_page(page);
// Send event
event.commit(unmapped);
}
void ZUnmapper::unmap_and_destroy_page(ZPage* page) {
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
unmapped | ulong: bytes | Unmapped |
Examples 1
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 | 23
|
start | ulong: address | 21571305472
|
startTime | long: millis | 211616084708
|
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,
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
GCLocker
default profiling startTime eventThread stackTrace 17 21 until JDK 25
Category: Java Virtual Machine / GC / Detailed
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:
Ticks GCLockerTracer::_needs_gc_start_timestamp;
volatile jint GCLockerTracer::_jni_lock_count = 0;
volatile jint GCLockerTracer::_stall_count = 0;
bool GCLockerTracer::is_started() {
return _needs_gc_start_timestamp != Ticks();
}
void GCLockerTracer::start_gc_locker(const jint jni_lock_count) {
assert(SafepointSynchronize::is_at_safepoint(), "sanity");
assert(!is_started(), "sanity");
assert(_jni_lock_count == 0, "sanity");
assert(_stall_count == 0, "sanity");
if (EventGCLocker::is_enabled()) {
_needs_gc_start_timestamp.stamp();
_jni_lock_count = jni_lock_count;
}
}
void GCLockerTracer::inc_stall_count() {
if (is_started()) {
_stall_count++;
}
}
void GCLockerTracer::report_gc_locker() {
if (is_started()) {
EventGCLocker event(UNTIMED);
if (event.should_commit()) {
event.set_starttime(_needs_gc_start_timestamp);
event.set_endtime(_needs_gc_start_timestamp);
event.set_lockCount(_jni_lock_count);
event.set_stallCount(_stall_count);
event.commit();
}
// reset
_needs_gc_start_timestamp = Ticks();
_jni_lock_count = 0;
_stall_count = 0;
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 1 s |
profiling | true | true | 100 ms |
Field | Type | Description |
---|---|---|
lockCount | uint | Lock Count The number of Java threads in a critical section when the GC locker is started |
stallCount | uint | Stall Count The number of Java threads stalled by the GC locker |
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 | 338
|
---|---|---|
heapSpace | VirtualSpace | |
committedEnd | ulong: address | 26847739904
|
committedSize | ulong: bytes | 5372903424
|
reservedEnd | ulong: address | 34359738368
|
reservedSize | ulong: bytes | 12884901888
|
start | ulong: address | 21474836480
|
heapUsed | ulong: bytes | 2014495352
|
startTime | long: millis | 255700270667
|
when | GCWhen | Before GC
|
gcId | uint | 748
|
---|---|---|
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 | 236978352
|
startTime | long: millis | 268932148583
|
when | GCWhen | After GC
|
gcId | uint | 811
|
---|---|---|
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 | 623119624
|
startTime | long: millis | 224397551666
|
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:
GCHeapSummaryEventSender visitor(when);
heap_summary.accept(&visitor);
}
static JfrStructMetaspaceSizes to_struct(const MetaspaceStats& sizes) {
JfrStructMetaspaceSizes meta_sizes;
meta_sizes.set_committed(sizes.committed());
meta_sizes.set_used(sizes.used());
meta_sizes.set_reserved(sizes.reserved());
return meta_sizes;
}
void GCTracer::send_meta_space_summary_event(GCWhen::Type when, const MetaspaceSummary& meta_space_summary) const {
EventMetaspaceSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when((u1) when);
e.set_gcThreshold(meta_space_summary.capacity_until_GC());
e.set_metaspace(to_struct(meta_space_summary.stats())); // total stats (class + nonclass)
e.set_dataSpace(to_struct(meta_space_summary.stats().non_class_space_stats())); // "dataspace" aka non-class space
e.set_classSpace(to_struct(meta_space_summary.stats().class_space_stats()));
e.commit();
}
}
Configuration | enabled |
---|---|
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 | 90505216
|
reserved | ulong: bytes | 1073741824
|
used | ulong: bytes | 88559368
|
dataSpace | MetaspaceSizes | |
committed | ulong: bytes | 572915712
|
reserved | ulong: bytes | 603979776
|
used | ulong: bytes | 570961832
|
gcId | uint | 315
|
gcThreshold | ulong: bytes | 1104936960
|
metaspace | MetaspaceSizes | |
committed | ulong: bytes | 663420928
|
reserved | ulong: bytes | 1677721600
|
used | ulong: bytes | 659521200
|
startTime | long: millis | 242751093583
|
when | GCWhen | After GC
|
classSpace | MetaspaceSizes | |
---|---|---|
committed | ulong: bytes | 91160576
|
reserved | ulong: bytes | 1073741824
|
used | ulong: bytes | 89251920
|
dataSpace | MetaspaceSizes | |
committed | ulong: bytes | 574423040
|
reserved | ulong: bytes | 603979776
|
used | ulong: bytes | 572465344
|
gcId | uint | 808
|
gcThreshold | ulong: bytes | 1109196800
|
metaspace | MetaspaceSizes | |
committed | ulong: bytes | 665583616
|
reserved | ulong: bytes | 1677721600
|
used | ulong: bytes | 661717264
|
startTime | long: millis | 222076678041
|
when | GCWhen | After GC
|
classSpace | MetaspaceSizes | |
---|---|---|
committed | ulong: bytes | 90963968
|
reserved | ulong: bytes | 1073741824
|
used | ulong: bytes | 89024640
|
dataSpace | MetaspaceSizes | |
committed | ulong: bytes | 573702144
|
reserved | ulong: bytes | 603979776
|
used | ulong: bytes | 571767240
|
gcId | uint | 712
|
gcThreshold | ulong: bytes | 1107165184
|
metaspace | MetaspaceSizes | |
committed | ulong: bytes | 664666112
|
reserved | ulong: bytes | 1677721600
|
used | ulong: bytes | 660791880
|
startTime | long: millis | 254587889667
|
when | GCWhen | Before 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 | 33557577728
|
size | ulong: bytes | 3492806656
|
start | ulong: address | 30064771072
|
used | ulong: bytes | 160996808
|
fromSpace | ObjectSpace | |
end | ulong: address | 33840168960
|
size | ulong: bytes | 1048576
|
start | ulong: address | 33839120384
|
used | ulong: bytes | 0
|
gcId | uint | 331
|
oldObjectSpace | ObjectSpace | |
end | ulong: address | 23519035392
|
size | ulong: bytes | 2044198912
|
start | ulong: address | 21474836480
|
used | ulong: bytes | 213214224
|
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 | 252955960083
|
toSpace | ObjectSpace | |
end | ulong: address | 33780400128
|
size | ulong: bytes | 59768832
|
start | ulong: address | 33720631296
|
used | ulong: bytes | 0
|
when | GCWhen | Before GC
|
youngSpace | VirtualSpace | |
committedEnd | ulong: address | 33840168960
|
committedSize | ulong: bytes | 3775397888
|
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. |
hiddenClassLoader | boolean 15+ | Hidden 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);
event.set_hiddenClassLoader(cld->has_class_mirror_holder());
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
classLoader | ClassLoader | Class Loader Consider contributing a description to jfreventcollector. |
hiddenClassLoader | boolean 15+ | Hidden 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 | 784
|
---|---|---|
humongousChunks | ulong | 0
|
humongousChunksTotalSize | ulong: bytes | 0
|
mediumChunks | ulong | 0
|
mediumChunksTotalSize | ulong: bytes | 0
|
metadataType | MetadataType | Metadata
|
smallChunks | ulong | 0
|
smallChunksTotalSize | ulong: bytes | 0
|
specializedChunks | ulong | 0
|
specializedChunksTotalSize | ulong: bytes | 0
|
startTime | long: millis | 201459344416
|
when | GCWhen | Before GC
|
gcId | uint | 313
|
---|---|---|
humongousChunks | ulong | 0
|
humongousChunksTotalSize | ulong: bytes | 0
|
mediumChunks | ulong | 0
|
mediumChunksTotalSize | ulong: bytes | 0
|
metadataType | MetadataType | Metadata
|
smallChunks | ulong | 0
|
smallChunksTotalSize | ulong: bytes | 0
|
specializedChunks | ulong | 0
|
specializedChunksTotalSize | ulong: bytes | 0
|
startTime | long: millis | 242214273667
|
when | GCWhen | Before GC
|
gcId | uint | 724
|
---|---|---|
humongousChunks | ulong | 0
|
humongousChunksTotalSize | ulong: bytes | 0
|
mediumChunks | ulong | 0
|
mediumChunksTotalSize | ulong: bytes | 0
|
metadataType | MetadataType | Metadata
|
smallChunks | ulong | 0
|
smallChunksTotalSize | ulong: bytes | 0
|
specializedChunks | ulong | 0
|
specializedChunksTotalSize | ulong: bytes | 0
|
startTime | long: millis | 265206649292
|
when | GCWhen | After GC
|
JVM: GC: Phases
GCPhasePause
default profiling startTime duration eventThread 11 17 21 25 26 graal vm
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.stats())); // total stats (class + nonclass)
e.set_dataSpace(to_struct(meta_space_summary.stats().non_class_space_stats())); // "dataspace" aka non-class space
e.set_classSpace(to_struct(meta_space_summary.stats().class_space_stats()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels 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 graal vm
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.stats())); // total stats (class + nonclass)
e.set_dataSpace(to_struct(meta_space_summary.stats().non_class_space_stats())); // "dataspace" aka non-class space
e.set_classSpace(to_struct(meta_space_summary.stats().class_space_stats()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels 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 graal vm
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.stats().non_class_space_stats())); // "dataspace" aka non-class space
e.set_classSpace(to_struct(meta_space_summary.stats().class_space_stats()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels 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 graal vm
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.stats().class_space_stats()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(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 graal vm
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() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(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() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(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());
src/hotspot/share/gc/shenandoah/shenandoahUtils.hpp:
class ShenandoahWorkerSession : public StackObj {
protected:
ShenandoahWorkerSession(uint worker_id);
public:
static inline uint worker_id() {
return WorkerThread::worker_id();
}
};
class ShenandoahConcurrentWorkerSession : public ShenandoahWorkerSession {
private:
EventGCPhaseConcurrent _event;
public:
ShenandoahConcurrentWorkerSession(uint worker_id) : ShenandoahWorkerSession(worker_id) { }
~ShenandoahConcurrentWorkerSession();
};
class ShenandoahParallelWorkerSession : public ShenandoahWorkerSession {
private:
EventGCPhaseParallel _event;
public:
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
Examples 3
GCPhaseConcurrentLevel1
default profiling startTime duration eventThread 15 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 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() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(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
GCPhaseParallel
default profiling startTime duration eventThread 12 17 21 25 26
Category: Java Virtual Machine / GC / Phases
Appearing in: G1GC, ShenandoahGC
Missing in: ParallelGC, SerialGC, ZGC
GC phases for parallel workers
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/heapRegionManager.cpp:
_worker_freelists[worker].~FreeRegionList();
}
FREE_C_HEAP_ARRAY(FreeRegionList, _worker_freelists);
}
FreeRegionList* worker_freelist(uint worker) {
return &_worker_freelists[worker];
}
// Each worker creates a free list for a chunk of the heap. The chunks won't
// be overlapping so we don't need to do any claiming.
void work(uint worker_id) {
Ticks start_time = Ticks::now();
EventGCPhaseParallel event;
uint start = worker_id * _worker_chunk_size;
uint end = MIN2(start + _worker_chunk_size, _hrm->reserved_length());
// If start is outside the heap, this worker has nothing to do.
if (start > end) {
return;
}
FreeRegionList *free_list = worker_freelist(worker_id);
for (uint i = start; i < end; i++) {
src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.cpp:
_before_used_bytes += used;
_regions_freed += 1;
}
void account_rs_length(HeapRegion* r) {
_rs_length += r->rem_set()->occupied();
}
};
// Closure applied to all regions in the collection set.
class FreeCSetClosure : public HeapRegionClosure {
// Helper to send JFR events for regions.
class JFREventForRegion {
EventGCPhaseParallel _event;
public:
JFREventForRegion(HeapRegion* region, uint worker_id) : _event() {
_event.set_gcId(GCId::current());
_event.set_gcWorkerId(worker_id);
if (region->is_young()) {
_event.set_name(G1GCPhaseTimes::phase_name(G1GCPhaseTimes::YoungFreeCSet));
} else {
_event.set_name(G1GCPhaseTimes::phase_name(G1GCPhaseTimes::NonYoungFreeCSet));
}
}
src/hotspot/share/gc/g1/g1YoungCollector.cpp:
G1CollectedHeap* _g1h;
G1ParScanThreadState* _par_scan_state;
G1ScannerTasksQueueSet* _queues;
TaskTerminator* _terminator;
G1GCPhaseTimes::GCParPhases _phase;
G1ParScanThreadState* par_scan_state() { return _par_scan_state; }
G1ScannerTasksQueueSet* queues() { return _queues; }
TaskTerminator* terminator() { return _terminator; }
inline bool offer_termination() {
EventGCPhaseParallel event;
G1ParScanThreadState* const pss = par_scan_state();
start_term_time();
const bool res = (terminator() == nullptr) ? true : terminator()->offer_termination();
end_term_time();
event.commit(GCId::current(), pss->worker_id(), G1GCPhaseTimes::phase_name(G1GCPhaseTimes::Termination));
return res;
}
public:
G1ParEvacuateFollowersClosure(G1CollectedHeap* g1h,
G1ParScanThreadState* par_scan_state,
G1ScannerTasksQueueSet* queues,
TaskTerminator* terminator,
G1GCPhaseTimes::GCParPhases phase)
: _start_term(0.0), _term_time(0.0), _term_attempts(0),
_g1h(g1h), _par_scan_state(par_scan_state),
_queues(queues), _terminator(terminator), _phase(phase) {}
void do_void() {
EventGCPhaseParallel event;
G1ParScanThreadState* const pss = par_scan_state();
pss->trim_queue();
event.commit(GCId::current(), pss->worker_id(), G1GCPhaseTimes::phase_name(_phase));
do {
EventGCPhaseParallel event;
pss->steal_and_trim_queue(queues());
event.commit(GCId::current(), pss->worker_id(), G1GCPhaseTimes::phase_name(_phase));
} while (!offer_termination());
}
double term_time() const { return _term_time; }
size_t term_attempts() const { return _term_attempts; }
};
class G1EvacuateRegionsBaseTask : public WorkerTask {
src/hotspot/share/gc/g1/g1RemSet.cpp:
size_t cards_scanned() const { return _cards_scanned; }
size_t blocks_scanned() const { return _blocks_scanned; }
size_t chunks_claimed() const { return _chunks_claimed; }
size_t heap_roots_found() const { return _heap_roots_found; }
};
void G1RemSet::scan_heap_roots(G1ParScanThreadState* pss,
uint worker_id,
G1GCPhaseTimes::GCParPhases scan_phase,
G1GCPhaseTimes::GCParPhases objcopy_phase,
bool remember_already_scanned_cards) {
EventGCPhaseParallel event;
G1ScanHRForRegionClosure cl(_scan_state, pss, worker_id, scan_phase, remember_already_scanned_cards);
_scan_state->iterate_dirty_regions_from(&cl, worker_id);
event.commit(GCId::current(), worker_id, G1GCPhaseTimes::phase_name(scan_phase));
G1GCPhaseTimes* p = _g1p->phase_times();
p->record_or_add_time_secs(objcopy_phase, worker_id, cl.rem_set_trim_partially_time().seconds());
p->record_or_add_time_secs(scan_phase, worker_id, cl.rem_set_root_scan_time().seconds());
src/hotspot/share/gc/g1/g1RemSet.cpp:
_opt_refs_memory_used(0),
_code_root_scan_time(),
_code_trim_partially_time(),
_rem_set_opt_root_scan_time(),
_rem_set_opt_trim_partially_time() { }
bool do_heap_region(HeapRegion* r) {
uint const region_idx = r->hrm_index();
// The individual references for the optional remembered set are per-worker, so we
// always need to scan them.
if (r->has_index_in_opt_cset()) {
EventGCPhaseParallel event;
G1EvacPhaseWithTrimTimeTracker timer(_pss, _rem_set_opt_root_scan_time, _rem_set_opt_trim_partially_time);
scan_opt_rem_set_roots(r);
event.commit(GCId::current(), _worker_id, G1GCPhaseTimes::phase_name(_scan_phase));
}
if (_scan_state->claim_collection_set_region(region_idx)) {
EventGCPhaseParallel event;
G1EvacPhaseWithTrimTimeTracker timer(_pss, _code_root_scan_time, _code_trim_partially_time);
// Scan the code root list attached to the current region
r->code_roots_do(_pss->closures()->weak_codeblobs());
event.commit(GCId::current(), _worker_id, G1GCPhaseTimes::phase_name(_code_roots_phase));
}
return false;
}
src/hotspot/share/gc/g1/g1GCParPhaseTimesTracker.hpp:
#ifndef SHARE_GC_G1_G1GCPARPHASETIMESTRACKER_HPP
#define SHARE_GC_G1_G1GCPARPHASETIMESTRACKER_HPP
#include "gc/g1/g1GCPhaseTimes.hpp"
#include "jfr/jfrEvents.hpp"
#include "utilities/ticks.hpp"
class G1GCParPhaseTimesTracker : public CHeapObj<mtGC> {
protected:
Ticks _start_time;
G1GCPhaseTimes::GCParPhases _phase;
G1GCPhaseTimes* _phase_times;
uint _worker_id;
EventGCPhaseParallel _event;
bool _allow_multiple_record;
public:
G1GCParPhaseTimesTracker(G1GCPhaseTimes* phase_times, G1GCPhaseTimes::GCParPhases phase, uint worker_id, bool allow_multiple_record = false);
virtual ~G1GCParPhaseTimesTracker();
};
class G1EvacPhaseTimesTracker : public G1GCParPhaseTimesTracker {
Tickspan _total_time;
Tickspan _trim_time;
src/hotspot/share/gc/shenandoah/shenandoahPhaseTimings.hpp:
static const char* phase_name(Phase phase) {
assert(phase >= 0 && phase < _num_phases, "Out of bound");
return _phase_names[phase];
}
void print_cycle_on(outputStream* out) const;
void print_global_on(outputStream* out) const;
};
class ShenandoahWorkerTimingsTracker : public StackObj {
private:
ShenandoahPhaseTimings* const _timings;
ShenandoahPhaseTimings::Phase const _phase;
ShenandoahPhaseTimings::ParPhase const _par_phase;
uint const _worker_id;
double _start_time;
EventGCPhaseParallel _event;
public:
ShenandoahWorkerTimingsTracker(ShenandoahPhaseTimings::Phase phase, ShenandoahPhaseTimings::ParPhase par_phase, uint worker_id);
~ShenandoahWorkerTimingsTracker();
};
#endif // SHARE_GC_SHENANDOAH_SHENANDOAHPHASETIMINGS_HPP
src/hotspot/share/gc/shenandoah/shenandoahUtils.hpp:
class ShenandoahConcurrentWorkerSession : public ShenandoahWorkerSession {
private:
EventGCPhaseConcurrent _event;
public:
ShenandoahConcurrentWorkerSession(uint worker_id) : ShenandoahWorkerSession(worker_id) { }
~ShenandoahConcurrentWorkerSession();
};
class ShenandoahParallelWorkerSession : public ShenandoahWorkerSession {
private:
EventGCPhaseParallel _event;
public:
ShenandoahParallelWorkerSession(uint worker_id) : ShenandoahWorkerSession(worker_id) { }
~ShenandoahParallelWorkerSession();
};
class ShenandoahSuspendibleThreadSetJoiner {
private:
SuspendibleThreadSetJoiner _joiner;
public:
ShenandoahSuspendibleThreadSetJoiner(bool active = true) : _joiner(active) {
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
gcWorkerId | uint | GC Worker Identifier |
name | string | Name |
Examples 2
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:
void GCTracer::send_cpu_time_event(double user_time, double system_time, double real_time) const {
EventGCCPUTime e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_userTime((size_t)(user_time * NANOUNITS));
e.set_systemTime((size_t)(system_time * NANOUNITS));
e.set_realTime((size_t)(real_time * NANOUNITS));
e.commit();
}
}
void GCTracer::send_reference_stats_event(ReferenceType type, size_t count) const {
EventGCReferenceStatistics e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type((u1)type);
e.set_count(count);
e.commit();
}
}
void GCTracer::send_metaspace_chunk_free_list_summary(GCWhen::Type when, Metaspace::MetadataType mdtype,
const MetaspaceChunkFreeListSummary& summary) const {
EventMetaspaceChunkFreeListSummary e;
Configuration | enabled |
---|---|
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 | 806
|
startTime | long: millis | 218865980791
|
type | ReferenceType | Final reference
|
count | ulong | 48
|
---|---|---|
gcId | uint | 315
|
startTime | long: millis | 242750821833
|
type | ReferenceType | Phantom reference
|
count | ulong | 0
|
---|---|---|
gcId | uint | 722
|
startTime | long: millis | 265134873792
|
type | ReferenceType | Final reference
|
JVM: Internal
Duration
internal startTime duration eventThread 18 21 25 26
Category: Java Virtual Machine / Internal
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Instant
internal startTime eventThread 18 21 25 26
Category: Java Virtual Machine / Internal
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.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EventProvider.java:
/**
* Creates and returns an empty implementation for {@link CompilationEvent}.
*/
static CompilerFailureEvent createEmptyCompilerFailureEvent() {
return new EmptyCompilerFailureEvent();
}
/**
* An instant event is an event that is not considered to have taken any time.
*/
public interface InstantEvent {
/**
* Commits the event.
*/
void commit();
/**
* Determines if this particular event instance would be committed to the data stream right
* now if application called {@link #commit()}. This in turn depends on whether the event is
* enabled and possible other factors.
*
* @return if this event would be committed on a call to {@link #commit()}.
*/
boolean shouldWrite();
}
/**
* Timed events describe an operation that somehow consumes time.
*/
public interface TimedEvent extends InstantEvent {
/**
* Starts the timing for this event.
*/
void begin();
/**
* Ends the timing period for this event.
*/
void end();
}
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EventProvider.java:
void setIsOsr(boolean isOsr);
void setCodeSize(int codeSize);
void setInlinedBytes(int inlinedBytes);
}
/**
* Creates a new {@link CompilerFailureEvent}.
*
* @return a compiler failure event
*/
CompilerFailureEvent newCompilerFailureEvent();
/**
* A compiler failure event.
*/
public interface CompilerFailureEvent extends InstantEvent {
void setCompileId(int compileId);
void setMessage(String message);
}
}
Value
internal startTime eventThread 18 21 25 26
Category: Java Virtual Machine / Internal
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
value | ulong | Value |
Text
internal startTime eventThread 18 21 25 26
Category: Java Virtual Machine / Internal
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
text | string | Text |
JVM: Memory
NativeMemoryUsage
default profiling startTime duration every chunk 20 21 25 26
Category: Java Virtual Machine / Memory
Native memory usage for a given memory type in the JVM
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/services/memJfrReporter.cpp:
NMTUsage* usage = MemJFRCurrentUsage::get_usage();
Ticks timestamp = MemJFRCurrentUsage::get_timestamp();
EventNativeMemoryUsageTotal event(UNTIMED);
event.set_starttime(timestamp);
event.set_reserved(usage->total_reserved());
event.set_committed(usage->total_committed());
event.commit();
}
void MemJFRReporter::send_type_event(const Ticks& starttime, const char* type, size_t reserved, size_t committed) {
EventNativeMemoryUsage event(UNTIMED);
event.set_starttime(starttime);
event.set_type(type);
event.set_reserved(reserved);
event.set_committed(committed);
event.commit();
}
void MemJFRReporter::send_type_events() {
if (!MemTracker::enabled()) {
return;
}
Configuration | enabled | period |
---|---|---|
default | true | 1000 ms |
profiling | true | 1000 ms |
Field | Type | Description |
---|---|---|
type | string | Memory Type Type used for the native memory allocation |
reserved | ulong: bytes | Reserved Memory Reserved bytes for this type |
committed | ulong: bytes | Committed Memory Committed bytes for this type |
NativeMemoryUsageTotal
default profiling startTime duration every chunk 20 21 25 26
Category: Java Virtual Machine / Memory
Total native memory usage for the JVM. Might not be the exact sum of the NativeMemoryUsage events due to timeing.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/services/memJfrReporter.cpp:
Ticks MemJFRCurrentUsage::get_timestamp() {
return _timestamp;
}
void MemJFRReporter::send_total_event() {
if (!MemTracker::enabled()) {
return;
}
NMTUsage* usage = MemJFRCurrentUsage::get_usage();
Ticks timestamp = MemJFRCurrentUsage::get_timestamp();
EventNativeMemoryUsageTotal event(UNTIMED);
event.set_starttime(timestamp);
event.set_reserved(usage->total_reserved());
event.set_committed(usage->total_committed());
event.commit();
}
void MemJFRReporter::send_type_event(const Ticks& starttime, const char* type, size_t reserved, size_t committed) {
EventNativeMemoryUsage event(UNTIMED);
event.set_starttime(starttime);
event.set_type(type);
event.set_reserved(reserved);
Configuration | enabled | period |
---|---|---|
default | true | 1000 ms |
profiling | true | 1000 ms |
Field | Type | Description |
---|---|---|
reserved | ulong: bytes | Reserved Memory Total amount of reserved bytes for the JVM |
committed | ulong: bytes | Committed Memory Total amount of committed bytes for the JVM |
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:
assert(!sample->is_dead(), "invariant");
assert(edge_store != NULL, "invariant");
assert(_jfr_thread_local != NULL, "invariant");
const StoredEdge* const edge = edge_store->get(sample);
assert(edge != NULL, "invariant");
assert(edge->pointee() == sample->object(), "invariant");
const traceid object_id = edge_store->get_id(edge);
assert(object_id != 0, "invariant");
const traceid gc_root_id = edge->gc_root_id();
Tickspan object_age = Ticks(_start_time.value()) - sample->allocation_time();
EventOldObjectSample e(UNTIMED);
e.set_starttime(_start_time);
e.set_endtime(_end_time);
e.set_allocationTime(sample->allocation_time());
e.set_objectSize(sample->allocated());
e.set_objectAge(object_age);
e.set_lastKnownHeapUsage(sample->heap_used_at_last_gc());
e.set_object(object_id);
e.set_arrayElements(array_size(edge->pointee()));
e.set_root(gc_root_id);
// Temporarily assigning both the stack trace id and thread id
src/hotspot/share/jfr/leakprofiler/sampling/objectSampler.cpp:
// for regular threads, the blob is cached in the thread local data structure
tl->set_thread_blob(JfrCheckpointManager::create_thread_blob(thread, tid));
assert(tl->has_thread_blob(), "invariant");
}
return tl->thread_blob();
}
class RecordStackTrace {
private:
JavaThread* _jt;
bool _enabled;
public:
RecordStackTrace(JavaThread* jt) : _jt(jt),
_enabled(JfrEventSetting::has_stacktrace(EventOldObjectSample::eventId)) {
if (_enabled) {
JfrStackTraceRepository::record_for_leak_profiler(jt);
}
}
~RecordStackTrace() {
if (_enabled) {
_jt->jfr_thread_local()->clear_cached_stack_trace();
}
}
};
src/hotspot/share/jfr/jni/jfrJniMethod.cpp:
NO_TRANSITION(jlong, jfr_elapsed_counter(JNIEnv* env, 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(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. |
objectSize | ulong: bytes 18+ | Object Size |
objectAge | Tickspan 14+ | Object Age 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 | 260096134333
|
---|---|---|
arrayElements | int | 16384
|
lastKnownHeapUsage | ulong: bytes | 241681328
|
object | OldObject | |
address | ulong: address | 21715786760
|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1040
|
name | string | [Ljava/util/concurrent/ConcurrentHashMap$Node;
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/util/concurrent
|
objectAge | Tickspan | 11822578209
|
objectSize | ulong: bytes | 65552
|
root | OldObjectGcRoot | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 40
|
lineNumber | int | 2431
|
method | Method | |
descriptor | string | ([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
|
hidden | boolean | false
|
modifiers | int | 18
|
name | string | transfer
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/util/concurrent/ConcurrentHashMap
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/util/concurrent
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 271918712542
|
allocationTime | Ticks | 290281700750
|
---|---|---|
arrayElements | int | 64
|
lastKnownHeapUsage | ulong: bytes | 263297432
|
object | OldObject | |
address | ulong: address | 26031855928
|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1041
|
name | string | [Ljava/util/concurrent/ForkJoinTask;
|
package | Package | |
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/concurrent
|
objectAge | Tickspan | 4175560083
|
objectSize | ulong: bytes | 272
|
root | OldObjectGcRoot | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 32
|
lineNumber | int | 1607
|
method | Method | |
descriptor | string | (Ljava/util/concurrent/ForkJoinPool$WorkQueue;)V
|
hidden | boolean | false
|
modifiers | int | 16
|
name | string | registerWorker
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/util/concurrent/ForkJoinPool
|
package | Package | |
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/concurrent
|
type | FrameType | Interpreted
|
truncated | boolean | false
|
startTime | long: millis | 294457260833
|
allocationTime | Ticks | 182207043041
|
---|---|---|
arrayElements | int | -2147483648
|
lastKnownHeapUsage | ulong: bytes | 330504624
|
object | OldObject | |
address | ulong: address | 21710868248
|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | java/lang/Double
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/lang
|
objectAge | Tickspan | 71249964125
|
objectSize | ulong: bytes | 24
|
root | OldObjectGcRoot | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | 773
|
method | Method | |
descriptor | string | (D)Ljava/lang/Double;
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | valueOf
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | java/lang/Double
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/lang
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 253457007166
|
ExecutionSample
default profiling startTime every chunk 11 17 21 25 26 graal vm
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/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_period(JNIEnv* env, jobject jvm, jlong type, jlong periodMillis))
if (periodMillis < 0) {
periodMillis = 0;
}
JfrEventId typed_event_id = (JfrEventId)type;
assert(EventExecutionSample::eventId == typed_event_id || EventNativeMethodSample::eventId == typed_event_id, "invariant");
JfrEventSetting::set_enabled(typed_event_id, periodMillis > 0);
if (EventExecutionSample::eventId == type) {
JfrThreadSampling::set_java_sample_period(periodMillis);
} else {
JfrThreadSampling::set_native_sample_period(periodMillis);
}
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
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 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(jt)) {
return;
}
JfrGetCallTrace trace(true, jt);
frame topframe;
if (trace.get_topframe(context.ucontext(), topframe)) {
if (_stacktrace.record_async(jt, 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(JfrThreadLocal::thread_id(jt));
ev->set_state(static_cast<u8>(java_lang_Thread::get_thread_status(_thread_oop)));
}
}
}
void OSThreadSampler::take_sample() {
run();
}
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
// skip frames in stack chunks on the Java heap.
StackWatermarkSet::start_processing(thread, StackWatermarkKind::gc);
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) {
// Process the oops in the thread head before calling into code that wants to
// stack walk over Loom continuations. The stack walking code will otherwise
// skip frames in stack chunks on the Java heap.
StackWatermarkSet::start_processing(thread, StackWatermarkKind::gc);
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
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) {
assert(_added_java > 0 && _added_java <= MAX_NR_OF_JAVA_SAMPLES, "invariant");
if (EventExecutionSample::is_enabled()) {
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");
if (EventNativeMethodSample::is_enabled()) {
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:
const JfrBuffer* JfrThreadSampler::get_enqueue_buffer() {
const JfrBuffer* buffer = JfrTraceIdLoadBarrier::get_sampler_enqueue_buffer(this);
return buffer != nullptr ? renew_if_full(buffer) : JfrTraceIdLoadBarrier::renew_sampler_enqueue_buffer(this);
}
const JfrBuffer* JfrThreadSampler::renew_if_full(const JfrBuffer* enqueue_buffer) {
assert(enqueue_buffer != nullptr, "invariant");
return enqueue_buffer->free_size() < _min_size ? JfrTraceIdLoadBarrier::renew_sampler_enqueue_buffer(this) : enqueue_buffer;
}
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();
{
MutexLocker tlock(Threads_lock);
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 9.0 in stage 20.0 (TID 144)
|
javaThreadId | long | 1569
|
osName | string | Executor task launch worker for task 9.0 in stage 20.0 (TID 144)
|
osThreadId | long | 142091
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 13
|
lineNumber | int | 281
|
method | Method | |
descriptor | string | (Ljava/util/Random;ILorg/apache/spark/util/collection/OpenHashSet;Ljava/lang/Object;Lscala/runtime/LongRef;Lorg/apache/spark/util/SizeEstimator$SearchState;I)V
|
hidden | boolean | false
|
modifiers | int | 4121
|
name | string | $anonfun$sampleArray$1
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.7
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | org/apache/spark/util/SizeEstimator$
|
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
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 242464072833
|
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 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 6.0 in stage 26.0 (TID 201)
|
javaThreadId | long | 1578
|
osName | string | Executor task launch worker for task 6.0 in stage 26.0 (TID 201)
|
osThreadId | long | 139807
|
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 | 254462131250
|
state | ThreadState | STATE_RUNNABLE
|
NativeMethodSample
default profiling startTime every chunk 11 17 21 25 26 graal vm
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/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_period(JNIEnv* env, jobject jvm, jlong type, jlong periodMillis))
if (periodMillis < 0) {
periodMillis = 0;
}
JfrEventId typed_event_id = (JfrEventId)type;
assert(EventExecutionSample::eventId == typed_event_id || EventNativeMethodSample::eventId == typed_event_id, "invariant");
JfrEventSetting::set_enabled(typed_event_id, periodMillis > 0);
if (EventExecutionSample::eventId == type) {
JfrThreadSampling::set_java_sample_period(periodMillis);
} else {
JfrThreadSampling::set_native_sample_period(periodMillis);
}
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_store_metadata_descriptor(JNIEnv* env, jobject jvm, jbyteArray descriptor))
JfrMetadataEvent::update(descriptor);
JVM_END
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 SuspendedThreadTask {
public:
OSThreadSampler(JavaThread* thread,
JfrThreadSampleClosure& closure,
JfrStackFrame *frames,
u4 max_frames) : 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;
oop _thread_oop;
JfrStackTrace _stacktrace;
bool _success;
};
static void write_native_event(JfrThreadSampleClosure& closure, JavaThread* jt, oop thread_oop) {
EventNativeMethodSample *ev = closure.next_event_native();
ev->set_starttime(JfrTicks::now());
ev->set_sampledThread(JfrThreadLocal::thread_id(jt));
ev->set_state(static_cast<u8>(java_lang_Thread::get_thread_status(thread_oop)));
}
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:
JfrNativeSamplerCallback cb(*this, thread, frames, max_frames);
if (JfrOptionSet::sample_protection()) {
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) {
assert(_added_java > 0 && _added_java <= MAX_NR_OF_JAVA_SAMPLES, "invariant");
if (EventExecutionSample::is_enabled()) {
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");
if (EventNativeMethodSample::is_enabled()) {
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:
const JfrBuffer* JfrThreadSampler::get_enqueue_buffer() {
const JfrBuffer* buffer = JfrTraceIdLoadBarrier::get_sampler_enqueue_buffer(this);
return buffer != nullptr ? renew_if_full(buffer) : JfrTraceIdLoadBarrier::renew_sampler_enqueue_buffer(this);
}
const JfrBuffer* JfrThreadSampler::renew_if_full(const JfrBuffer* enqueue_buffer) {
assert(enqueue_buffer != nullptr, "invariant");
return enqueue_buffer->free_size() < _min_size ? JfrTraceIdLoadBarrier::renew_sampler_enqueue_buffer(this) : enqueue_buffer;
}
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();
{
MutexLocker tlock(Threads_lock);
ThreadsListHandle tlh;
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 | finagle/netty4
|
parent | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | finagle/netty4-2-9
|
javaThreadId | long | 1207
|
osName | string | finagle/netty4-2-9
|
osThreadId | long | 44067
|
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 | 229860351125
|
state | ThreadState | STATE_RUNNABLE
|
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | SparkUI-1555
|
javaThreadId | long | 1555
|
osName | string | SparkUI-1555
|
osThreadId | long | 49191
|
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 | 200467022500
|
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-14
|
javaThreadId | long | 1197
|
osName | string | finagle/netty4-2-14
|
osThreadId | long | 167951
|
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 | 242458157417
|
state | ThreadState | STATE_RUNNABLE
|
JVM: Runtime
ContinuationFreeze
experimental startTime duration eventThread stackTrace 19 21 25 26
Category: Java Virtual Machine / Runtime
Invocation of Continuation.yield()
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/continuationFreezeThaw.cpp:
JVMTI_ONLY(jvmti_yield_cleanup(thread, cont)); // can safepoint
return freeze_epilog(thread, cont);
}
template<typename ConfigT>
static inline int freeze_internal(JavaThread* current, intptr_t* const sp) {
assert(!current->has_pending_exception(), "");
#ifdef ASSERT
log_trace(continuations)("~~~~ freeze sp: " INTPTR_FORMAT, p2i(current->last_continuation()->entry_sp()));
log_frames(current);
#endif
CONT_JFR_ONLY(EventContinuationFreeze event;)
ContinuationEntry* entry = current->last_continuation();
oop oopCont = entry->cont_oop(current);
assert(oopCont == current->last_continuation()->cont_oop(current), "");
assert(ContinuationEntry::assert_entry_frame_laid_out(current), "");
verify_continuation(oopCont);
ContinuationWrapper cont(current, oopCont);
log_develop_debug(continuations)("FREEZE #" INTPTR_FORMAT " " INTPTR_FORMAT, cont.hash(), p2i((oopDesc*)oopCont));
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | false | false | 0 ms |
profiling | false | false | 0 ms |
Field | Type | Description |
---|---|---|
carrierThread | Thread | Carrier Thread Thread enlisted as a carrier |
continuationClass | Class | Continuation Class Consider contributing a description to jfreventcollector. |
interpretedFrames | ushort | Interpreted Frames |
size | ushort: bytes | Stack Size |
ContinuationThaw
experimental startTime duration eventThread stackTrace 19 21 25 26
Category: Java Virtual Machine / Runtime
Invocation of Continuation.run() on a started continuation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/continuationFreezeThaw.cpp:
" to: " INTPTR_FORMAT " top_address: " INTPTR_FORMAT, p2i(f.sp() - frame::metadata_words), p2i(_top_stack_address));
ContinuationHelper::Frame::patch_pc(f, f.raw_pc()); // in case we want to deopt the frame in a full transition, this is checked.
ContinuationHelper::push_pd(f);
assert(ContinuationHelper::Frame::assert_frame_laid_out(f), "");
}
// returns new top sp
// called after preparations (stack overflow check and making room)
template<typename ConfigT>
static inline intptr_t* thaw_internal(JavaThread* thread, const Continuation::thaw_kind kind) {
assert(thread == JavaThread::current(), "Must be current thread");
CONT_JFR_ONLY(EventContinuationThaw event;)
log_develop_trace(continuations)("~~~~ thaw kind: %d sp: " INTPTR_FORMAT, kind, p2i(thread->last_continuation()->entry_sp()));
ContinuationEntry* entry = thread->last_continuation();
assert(entry != nullptr, "");
oop oopCont = entry->cont_oop(thread);
assert(!jdk_internal_vm_Continuation::done(oopCont), "");
assert(oopCont == get_continuation(thread), "");
verify_continuation(oopCont);
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | false | false | 0 ms |
profiling | false | false | 0 ms |
Field | Type | Description |
---|---|---|
carrierThread | Thread | Carrier Thread Thread enlisted as a carrier |
continuationClass | Class | Continuation Class Consider contributing a description to jfreventcollector. |
interpretedFrames | ushort | Interpreted Frames |
size | ushort: bytes | Stack Size |
ContinuationFreezeFast
experimental startTime eventThread 20 21 25 26
Category: Java Virtual Machine / Runtime
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/continuationFreezeThaw.cpp:
log_develop_trace(continuations)("FREEZE CHUNK #" INTPTR_FORMAT " (young)", _cont.hash());
LogTarget(Trace, continuations) lt;
if (lt.develop_is_enabled()) {
LogStream ls(lt);
chunk->print_on(true, &ls);
}
// Verification
assert(_cont.chunk_invariant(), "");
chunk->verify();
#if CONT_JFR
EventContinuationFreezeFast e;
if (e.should_commit()) {
e.set_id(cast_from_oop<u8>(chunk));
DEBUG_ONLY(e.set_allocate(chunk_is_allocated);)
e.set_size(cont_size() << LogBytesPerWord);
e.commit();
}
#endif
}
NOINLINE freeze_result FreezeBase::freeze_slow() {
#ifdef ASSERT
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
id | ulong | Continuation ID |
size | uint | Size |
allocate | boolean | Allocated New |
ContinuationFreezeSlow
experimental startTime eventThread 20 21 25 26
Category: Java Virtual Machine / Runtime
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/continuationFreezeThaw.cpp:
NOINLINE freeze_result FreezeBase::freeze_slow() {
#ifdef ASSERT
ResourceMark rm;
#endif
log_develop_trace(continuations)("freeze_slow #" INTPTR_FORMAT, _cont.hash());
assert(_thread->thread_state() == _thread_in_vm || _thread->thread_state() == _thread_blocked, "");
#if CONT_JFR
EventContinuationFreezeSlow e;
if (e.should_commit()) {
e.set_id(cast_from_oop<u8>(_cont.continuation()));
e.commit();
}
#endif
init_rest();
HandleMark hm(Thread::current());
frame f = freeze_start_frame();
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
id | ulong | Continuation ID |
ContinuationThawFast
experimental startTime eventThread 20 21 25 26
Category: Java Virtual Machine / Runtime
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/continuationFreezeThaw.cpp:
log_develop_trace(continuations)("setting entry argsize: %d", _cont.argsize());
assert(rs.bottom_sp() == _cont.entry()->bottom_sender_sp(), "");
// install the return barrier if not last frame, or the entry's pc if last
patch_return(rs.bottom_sp(), is_last);
// insert the back links from callee to caller frames
patch_caller_links(rs.top(), rs.top() + rs.total_size());
assert(is_last == _cont.is_empty(), "");
assert(_cont.chunk_invariant(), "");
#if CONT_JFR
EventContinuationThawFast e;
if (e.should_commit()) {
e.set_id(cast_from_oop<u8>(chunk));
e.set_size(thaw_size << LogBytesPerWord);
e.set_full(!partial);
e.commit();
}
#endif
#ifdef ASSERT
set_anchor(_thread, rs.sp());
log_frames(_thread);
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
id | ulong | Continuation ID |
full | boolean | Full |
size | uint | Size |
ContinuationThawSlow
experimental startTime eventThread 20 21 25 26
Category: Java Virtual Machine / Runtime
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/continuationFreezeThaw.cpp:
inline bool ThawBase::seen_by_gc() {
return _barriers || _cont.tail()->is_gc_mode();
}
NOINLINE intptr_t* ThawBase::thaw_slow(stackChunkOop chunk, bool return_barrier) {
LogTarget(Trace, continuations) lt;
if (lt.develop_is_enabled()) {
LogStream ls(lt);
ls.print_cr("thaw slow return_barrier: %d " INTPTR_FORMAT, return_barrier, p2i(chunk));
chunk->print_on(true, &ls);
}
#if CONT_JFR
EventContinuationThawSlow e;
if (e.should_commit()) {
e.set_id(cast_from_oop<u8>(_cont.continuation()));
e.commit();
}
#endif
DEBUG_ONLY(_frames = 0;)
_align_size = 0;
int num_frames = (return_barrier ? 1 : 2);
_stream = StackChunkFrameStream<ChunkFrames::Mixed>(chunk);
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
id | ulong | Continuation ID |
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();
}
}
}
return activation;
}
void SharedRuntime::on_slowpath_allocation_exit(JavaThread* current) {
// After any safepoint, just before going back to compiled code,
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 graal vm
Category: Java Virtual Machine / Runtime / Safepoint
Safepointing begin
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/safepoint.cpp:
static void post_safepoint_begin_event(EventSafepointBegin& event,
uint64_t safepoint_id,
int thread_count,
int critical_thread_count) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_totalThreadCount(thread_count);
event.set_jniCriticalThreadCount(critical_thread_count);
event.commit();
}
}
src/hotspot/share/runtime/safepoint.cpp:
SafepointMechanism::arm_local_poll(cur);
}
if (UseSystemMemoryBarrier) {
SystemMemoryBarrier::emit(); // storestore|storeload, global state -> local state
} else {
OrderAccess::fence(); // storestore|storeload, global state -> local state
}
}
// Roll all threads forward to a safepoint and suspend them all
void SafepointSynchronize::begin() {
assert(Thread::current()->is_VM_thread(), "Only VM thread may execute a safepoint");
EventSafepointBegin begin_event;
SafepointTracing::begin(VMThread::vm_op_type());
Universe::heap()->safepoint_synchronize_begin();
// By getting the Threads_lock, we assure that no threads are about to start or
// exit. It is released again in SafepointSynchronize::end().
Threads_lock->lock();
assert( _state == _not_synchronized, "trying to safepoint synchronize with wrong state");
int nof_threads = Threads::number_of_threads();
Configuration | enabled | threshold |
---|---|---|
default | true | 10 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | ulong | Safepoint Identifier |
totalThreadCount | int | Total Threads The total number of threads at the start of safe point |
jniCriticalThreadCount | int | JNI Critical Threads The number of threads in JNI critical sections |
Examples 3
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:
event.set_totalThreadCount(thread_count);
event.set_jniCriticalThreadCount(critical_thread_count);
event.commit();
}
}
static void post_safepoint_cleanup_event(EventSafepointCleanup& event, uint64_t safepoint_id) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.commit();
}
}
static void post_safepoint_synchronize_event(EventSafepointStateSynchronization& event,
uint64_t safepoint_id,
int initial_number_of_threads,
int threads_waiting_to_block,
uint64_t iterations) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_initialThreadCount(initial_number_of_threads);
event.set_runningThreadCount(threads_waiting_to_block);
event.set_iterations(iterations);
event.commit();
}
src/hotspot/share/runtime/safepoint.cpp:
_current_jni_active_count = 0;
// Set number of threads to wait for
_waiting_to_block = nof_threads;
jlong safepoint_limit_time = 0;
if (SafepointTimeout) {
// Set the limit time, so that it can be compared to see if this has taken
// too long to complete.
safepoint_limit_time = SafepointTracing::start_of_safepoint() + (jlong)SafepointTimeoutDelay * (NANOUNITS / MILLIUNITS);
timeout_error_printed = false;
}
EventSafepointStateSynchronization sync_event;
int initial_running = 0;
// Arms the safepoint, _current_jni_active_count and _waiting_to_block must be set before.
arm_safepoint();
// Will spin until all threads are safe.
int iterations = synchronize_threads(safepoint_limit_time, nof_threads, &initial_running);
assert(_waiting_to_block == 0, "No thread should be running");
#ifndef PRODUCT
// Mark all threads
Configuration | enabled | threshold |
---|---|---|
default | false | 10 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | ulong | Safepoint Identifier |
initialThreadCount | int | Initial Threads The number of threads running at the beginning of state check |
runningThreadCount | int | Running Threads The number of threads still running |
iterations | int | Iterations Number of state check iterations |
Examples 3
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,
uint64_t safepoint_id,
int thread_count,
int critical_thread_count) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_totalThreadCount(thread_count);
event.set_jniCriticalThreadCount(critical_thread_count);
event.commit();
}
}
static void post_safepoint_cleanup_event(EventSafepointCleanup& event, uint64_t safepoint_id) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.commit();
}
}
static void post_safepoint_synchronize_event(EventSafepointStateSynchronization& event,
uint64_t safepoint_id,
int initial_number_of_threads,
int threads_waiting_to_block,
uint64_t iterations) {
src/hotspot/share/runtime/safepoint.cpp:
// Update the count of active JNI critical regions
GCLocker::set_jni_lock_count(_current_jni_active_count);
post_safepoint_synchronize_event(sync_event,
_safepoint_id,
initial_running,
_waiting_to_block, iterations);
SafepointTracing::synchronized(nof_threads, initial_running, _nof_threads_hit_polling_page);
// We do the safepoint cleanup first since a GC related safepoint
// needs cleanup to be completed before running the GC op.
EventSafepointCleanup cleanup_event;
do_cleanup_tasks();
post_safepoint_cleanup_event(cleanup_event, _safepoint_id);
post_safepoint_begin_event(begin_event, _safepoint_id, nof_threads, _current_jni_active_count);
SafepointTracing::cleanup();
}
void SafepointSynchronize::disarm_safepoint() {
uint64_t active_safepoint_counter = _safepoint_counter;
{
JavaThreadIteratorWithHandle jtiwh;
Configuration | enabled | threshold |
---|---|---|
default | false | 10 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | ulong | 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:
uint64_t safepoint_id,
int initial_number_of_threads,
int threads_waiting_to_block,
uint64_t iterations) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_initialThreadCount(initial_number_of_threads);
event.set_runningThreadCount(threads_waiting_to_block);
event.set_iterations(iterations);
event.commit();
}
}
static void post_safepoint_cleanup_task_event(EventSafepointCleanupTask& event,
uint64_t safepoint_id,
const char* name) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_name(name);
event.commit();
}
}
static void post_safepoint_end_event(EventSafepointEnd& event, uint64_t safepoint_id) {
if (event.should_commit()) {
src/hotspot/share/runtime/safepoint.cpp:
if (StringTable::needs_rehashing()) return true;
if (SymbolTable::needs_rehashing()) return true;
return false;
}
class ParallelCleanupTask : public WorkerTask {
private:
SubTasksDone _subtasks;
bool _do_lazy_roots;
class Tracer {
private:
const char* _name;
EventSafepointCleanupTask _event;
TraceTime _timer;
public:
Tracer(const char* name) :
_name(name),
_event(),
_timer(name, TRACETIME_LOG(Info, safepoint, cleanup)) {}
~Tracer() {
post_safepoint_cleanup_task_event(_event, SafepointSynchronize::safepoint_id(), _name);
}
};
Configuration | enabled | threshold |
---|---|---|
default | false | 10 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | ulong | Safepoint Identifier |
name | string | Task Name The task name |
Examples 3
name |
---|