Introduction
The following are the events for OpenJDK 23 (jdk-23.0.1+11, permalink, 30-October-2024), and Graal VM 24.1.0 (jdk-23+28) . The events are collected from the event configuration and the source code. Visit the jfreventcollector repository for more information. This is also the place you can contribute additional event descriptions, if you don't want to contribute them directly to the OpenJDK. The site generator lives on GitHub , too.
This page is maintained by Johannes Bechberger of the SapMachine team at SAP and contributors.
Some events have fake end times/durations; these are hidden in the event description here.
Flight Recorder
DumpReason
default profiling startTime 11 17 21 23 24
Category: Flight Recorder
Who requested the recording and why
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/recorder/repository/jfrEmergencyDump.cpp:
static void post_events(bool exception_handler, Thread* thread) {
if (exception_handler) {
EventShutdown e;
e.set_reason("VM Error");
e.commit();
} else {
// OOM
LeakProfiler::emit_events(max_jlong, false, false);
}
EventDumpReason event;
event.set_reason(exception_handler ? "Crash" : "Out of Memory");
event.set_recordingId(-1);
event.commit();
}
void JfrEmergencyDump::on_vm_shutdown(bool exception_handler) {
if (!guard_reentrancy()) {
return;
}
Thread* thread = Thread::current_or_null_safe();
if (thread == nullptr) {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
reason | string | Reason Reason for writing recording data to disk |
recordingId | int | Recording Id Id of the recording that triggered the dump, or -1 if it was not related to a recording |
DataLoss
default profiling startTime 11 17 21 23 24 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/jni/jfrJniMethod.cpp:
JVM_ENTRY_NO_ENV(jlong, jfr_host_total_swap_memory(JNIEnv* env, jclass jvm))
#ifdef LINUX
// We want the host swap memory, not the container value.
return os::Linux::host_swap();
#else
return os::total_swap_space();
#endif
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_emit_data_loss(JNIEnv* env, jclass jvm, jlong bytes))
EventDataLoss::commit(bytes, min_jlong);
JVM_END
JVM_ENTRY_NO_ENV(jlong, jfr_register_stack_filter(JNIEnv* env, jclass jvm, jobjectArray classes, jobjectArray methods))
return JfrStackFilterRegistry::add(classes, methods, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_unregister_stack_filter(JNIEnv* env, jclass jvm, jlong id))
JfrStackFilterRegistry::remove(id);
JVM_END
NO_TRANSITION(jlong, jfr_nanos_now(JNIEnv* env, jclass jvm))
src/hotspot/share/jfr/recorder/storage/jfrStorage.cpp:
assert(!buffer->transient(), "invariant");
assert(buffer->lease(), "invariant");
storage_instance.control().increment_leased();
return buffer;
}
}
return acquire_transient(size, thread);
}
static void write_data_loss_event(JfrBuffer* buffer, u8 unflushed_size, Thread* thread) {
assert(buffer != nullptr, "invariant");
assert(buffer->empty(), "invariant");
const u8 total_data_loss = thread->jfr_thread_local()->add_data_lost(unflushed_size);
if (EventDataLoss::is_enabled()) {
JfrNativeEventWriter writer(buffer, thread);
writer.begin_event_write(false);
writer.write<u8>(EventDataLoss::eventId);
writer.write(JfrTicks::now());
writer.write(unflushed_size);
writer.write(total_data_loss);
writer.end_event_write(false);
}
}
static void write_data_loss(BufferPtr buffer, Thread* thread) {
assert(buffer != nullptr, "invariant");
const size_t unflushed_size = buffer->unflushed_size();
buffer->reinitialize();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
amount | ulong: bytes | Amount Amount lost data |
total | ulong: bytes | Total Total lost amount for thread |
Flush
experimental startTime duration 14 17 21 23 24
Category: Flight Recorder
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/recorder/service/jfrRecorderService.cpp:
template <typename Functor>
static u4 invoke(Functor& f) {
f.process();
return f.elements();
}
template <typename Functor>
static u4 invoke_with_flush_event(Functor& f) {
const u4 elements = invoke(f);
EventFlush e(UNTIMED);
e.set_starttime(f.start_time());
e.set_endtime(f.end_time());
e.set_flushId(flushpoint_id);
e.set_elements(f.elements());
e.set_size(f.size());
e.commit();
return elements;
}
class StackTraceRepository : public StackObj {
private:
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ns |
profiling | false | 0 ns |
Field | Type | Description |
---|---|---|
flushId | ulong | Flush Identifier |
elements | ulong | Elements Written |
size | ulong: bytes | Size Written |
Examples 3
ActiveRecording
default profiling startTime duration stackTrace 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ActiveRecordingEvent.java
Category: Flight Recorder
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/ActiveRecordingEvent.java:
@Name(Type.EVENT_NAME_PREFIX + "ActiveRecording")
@Label("Flight Recording")
@Category("Flight Recorder")
@RemoveFields({"duration", "eventThread", "stackTrace"})
public final class ActiveRecordingEvent extends AbstractJDKEvent {
// The order of these fields must be the same as the parameters in
// commit(... , long, String, String, long, long, long, long, long)
@Label("Id")
public long id;
@Label("Name")
public String name;
@Label("Destination")
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
public final class JDKEvents {
private static final Class<?>[] eventClasses = {
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
// jdk.internal.event.* classes need their mirror
// event class to be listed in the MirrorEvents class.
jdk.internal.event.DeserializationEvent.class,
jdk.internal.event.ErrorThrownEvent.class,
jdk.internal.event.ExceptionStatisticsEvent.class,
jdk.internal.event.ExceptionThrownEvent.class,
jdk.internal.event.FileForceEvent.class,
jdk.internal.event.FileReadEvent.class,
jdk.internal.event.FileWriteEvent.class,
jdk.internal.event.ProcessStartEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java:
// and check for missing files. This will emit more error logs that can be seen in subsequent recordings.
for (PlatformRecording r : getRecordings()) {
r.removeNonExistantPaths();
}
}
}
// Decrease initial reference count
chunk.release();
FilePurger.purge();
}
private void writeMetaEvents() {
long timestamp = JVM.counterTime();
if (ActiveRecordingEvent.enabled()) {
for (PlatformRecording r : getRecordings()) {
if (r.getState() == RecordingState.RUNNING && r.shouldWriteMetadataEvent()) {
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,
r.getId(),
r.getName(),
path == null ? null : path.getRealPathText(),
r.isToDisk(),
age == null ? Long.MAX_VALUE : age.toMillis(),
flush == null ? Long.MAX_VALUE : flush.toMillis(),
size == null ? Long.MAX_VALUE : size,
rStart == null ? Long.MAX_VALUE : rStart.toEpochMilli(),
rDuration == null ? Long.MAX_VALUE : rDuration.toMillis()
);
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. |
disk | boolean 21+ | To Disk |
maxAge | long: millis | Max Age |
flushInterval | long: millis 14+ | Flush Interval |
maxSize | long: bytes | Max Size |
recordingStart | long: epochmillis | Start Time |
recordingDuration | long: millis | Recording Duration |
Examples 3
destination | string | [...]/code/experiments/jfreventcollector/jfr/sample_UseG1GC.jfr
|
---|---|---|
disk | boolean | true
|
flushInterval | long: millis | 1000
|
id | long | 1
|
maxAge | long: millis | 9223372036854775807
|
maxSize | long: bytes | 262144000
|
name | string | 1
|
recordingDuration | long: millis | 9223372036854775807
|
recordingStart | long: epochmillis | 1727266203142
|
startTime | long: millis | 914255486833
|
destination | string | [...]/code/experiments/jfreventcollector/jfr/sample_UseParallelGC.jfr
|
---|---|---|
disk | boolean | true
|
flushInterval | long: millis | 1000
|
id | long | 1
|
maxAge | long: millis | 9223372036854775807
|
maxSize | long: bytes | 262144000
|
name | string | 1
|
recordingDuration | long: millis | 9223372036854775807
|
recordingStart | long: epochmillis | 1702899886817
|
stackTrace | StackTrace | null
|
startTime | long: millis | 30585354042
|
destination | string | [...]/code/experiments/jfreventcollector/jfr/sample_UseSerialGC.jfr
|
---|---|---|
disk | boolean | true
|
flushInterval | long: millis | 1000
|
id | long | 1
|
maxAge | long: millis | 9223372036854775807
|
maxSize | long: bytes | 262144000
|
name | string | 1
|
recordingDuration | long: millis | 9223372036854775807
|
recordingStart | long: epochmillis | 1702899981921
|
stackTrace | StackTrace | null
|
startTime | long: millis | 84412629542
|
ActiveSetting
default profiling startTime duration stackTrace 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ActiveSettingEvent.java
Category: Flight Recorder
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/ActiveSettingEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.StackTrace;
import jdk.jfr.internal.RemoveFields;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "ActiveSetting")
@Label("Recording Setting")
@Category("Flight Recorder")
@RemoveFields({"duration", "eventThread", "stackTrace"})
public final class ActiveSettingEvent extends AbstractJDKEvent {
// The order of these fields must be the same as the parameters in
// commit(... , long, String, String)
@Label("Event Id")
public long id;
@Label("Setting Name")
public String name;
@Label("Setting Value")
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
public final class JDKEvents {
private static final Class<?>[] eventClasses = {
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
// jdk.internal.event.* classes need their mirror
// event class to be listed in the MirrorEvents class.
jdk.internal.event.DeserializationEvent.class,
jdk.internal.event.ErrorThrownEvent.class,
jdk.internal.event.ExceptionStatisticsEvent.class,
jdk.internal.event.ExceptionThrownEvent.class,
jdk.internal.event.FileForceEvent.class,
jdk.internal.event.FileReadEvent.class,
jdk.internal.event.FileWriteEvent.class,
jdk.internal.event.ProcessStartEvent.class,
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java:
r.getId(),
r.getName(),
path == null ? null : path.getRealPathText(),
r.isToDisk(),
age == null ? Long.MAX_VALUE : age.toMillis(),
flush == null ? Long.MAX_VALUE : flush.toMillis(),
size == null ? Long.MAX_VALUE : size,
rStart == null ? Long.MAX_VALUE : rStart.toEpochMilli(),
rDuration == null ? Long.MAX_VALUE : rDuration.toMillis()
);
}
}
}
if (ActiveSettingEvent.enabled()) {
for (EventControl ec : MetadataRepository.getInstance().getEventControls()) {
ec.writeActiveSettingEvent(timestamp);
}
}
}
private void periodicTask() {
if (!JVMSupport.hasJFR()) {
return;
}
while (true) {
src/jdk.jfr/share/classes/jdk/jfr/internal/EventControl.java:
void writeActiveSettingEvent(long timestamp) {
if (!type.isRegistered()) {
return;
}
for (NamedControl nc : namedControls) {
if (nc.control.isVisible(type.hasEventHook()) && type.isVisible()) {
String value = nc.control.getLastValue();
if (value == null) {
value = nc.control.getDefaultValue();
}
if (ActiveSettingEvent.enabled()) {
ActiveSettingEvent.commit(timestamp, type.getId(), nc.name(), value);
}
}
}
}
public ArrayList<NamedControl> getNamedControls() {
return namedControls;
}
public PlatformEventType getEventType() {
return type;
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
id | long | Event Id |
name | string | Setting Name |
value | string | Setting Value |
Examples 3
JVM
JVMInformation
default profiling startTime duration end of every chunk 11 17 21 23 24 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:
PeriodicType JfrPeriodicEventSet::type(void) {
return _type;
}
TRACE_REQUEST_FUNC(ResidentSetSize) {
os::jfr_report_memory_info();
}
TRACE_REQUEST_FUNC(JVMInformation) {
ResourceMark rm;
EventJVMInformation event;
event.set_jvmName(VM_Version::vm_name());
event.set_jvmVersion(VM_Version::internal_vm_info_string());
event.set_javaArguments(Arguments::java_command());
event.set_jvmArguments(Arguments::jvm_args());
event.set_jvmFlags(Arguments::jvm_flags());
event.set_jvmStartTime(Management::vm_init_done_time());
event.set_pid(os::current_process_id());
event.commit();
}
TRACE_REQUEST_FUNC(OSInformation) {
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
jvmName | string | JVM Name |
jvmVersion | string | JVM Version |
jvmArguments | string | JVM Command Line Arguments |
jvmFlags | string | JVM Settings File Arguments |
javaArguments | string | Java Application Arguments |
jvmStartTime | long: epochmillis | JVM Start Time |
pid | long | Process Identifier |
Examples 3
javaArguments | string | [...]/code/experiments/jfreventcollector/.cache/renaissance.jar -t 5 -r 1 all
|
---|---|---|
jvmArguments | string | -XX:StartFlightRecording=filename=[...]/code/experiments/jfreventcollector/jfr/sample_UseG1GC.jfr,settings=[...]/code/experiments/jfreventcollector/.cache/jfc.jfc -XX:+UseG1GC
|
jvmFlags | string | null
|
jvmName | string | OpenJDK 64-Bit Server VM
|
jvmStartTime | long: epochmillis | 1727266202802
|
jvmVersion | string | OpenJDK 64-Bit Server VM (22+36) for bsd-aarch64 JRE (22+36), built on 2024-03-13T13:18:01Z by "sapmachine" with clang Apple LLVM 13.0.0 (clang-1300.0.29.3)
|
pid | long | 26284
|
startTime | long: millis | 910402342000
|
javaArguments | string | [...]/code/experiments/jfreventcollector/.cache/renaissance.jar -t 5 -r 1 all
|
---|---|---|
jvmArguments | string | -XX:StartFlightRecording=filename=[...]/code/experiments/jfreventcollector/jfr/sample_UseSerialGC.jfr,settings=[...]/code/experiments/jfreventcollector/.cache/jfc.jfc -XX:+UseSerialGC
|
jvmFlags | string | null
|
jvmName | string | OpenJDK 64-Bit Server VM
|
jvmStartTime | long: epochmillis | 1702899981604
|
jvmVersion | string | OpenJDK 64-Bit Server VM (21.0.1+12-LTS) for bsd-aarch64 JRE (21.0.1+12-LTS), built on 2023-10-17T00:00:00Z by "admin" with clang Apple LLVM 12.0.0 (clang-1200.0.32.29)
|
pid | long | 14273
|
startTime | long: millis | 40019876917
|
javaArguments | string | [...]/code/experiments/jfreventcollector/.cache/renaissance.jar -t 5 -r 1 all
|
---|---|---|
jvmArguments | string | -XX:StartFlightRecording=filename=[...]/code/experiments/jfreventcollector/jfr/sample_UseParallelGC.jfr,settings=[...]/code/experiments/jfreventcollector/.cache/jfc.jfc -XX:+UseParallelGC
|
jvmFlags | string | null
|
jvmName | string | OpenJDK 64-Bit Server VM
|
jvmStartTime | long: epochmillis | 1702899886436
|
jvmVersion | string | OpenJDK 64-Bit Server VM (21.0.1+12-LTS) for bsd-aarch64 JRE (21.0.1+12-LTS), built on 2023-10-17T00:00:00Z by "admin" with clang Apple LLVM 12.0.0 (clang-1200.0.32.29)
|
pid | long | 13981
|
startTime | long: millis | 75084757333
|
InitialSystemProperty
default profiling startTime end of every chunk 11 17 21 23 24 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(static_cast<unsigned int>(conf.new_ratio()));
event.commit();
}
TRACE_REQUEST_FUNC(InitialSystemProperty) {
SystemProperty* p = Arguments::system_properties();
JfrTicks time_stamp = JfrTicks::now();
while (p != nullptr) {
if (!p->internal()) {
EventInitialSystemProperty event(UNTIMED);
event.set_key(p->key());
event.set_value(p->value());
event.set_starttime(time_stamp);
event.set_endtime(time_stamp);
event.commit();
}
p = p->next();
}
}
TRACE_REQUEST_FUNC(ThreadAllocationStatistics) {
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
key | string | Key |
value | string | Value |
JVM: Class Loading
ClassLoad
startTime duration eventThread stackTrace 11 17 21 23 24
Category: Java Virtual Machine / Class Loading
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/classfile/systemDictionary.hpp:
// 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:
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 == nullptr) {
return nullptr;
}
// Ensures the nest host is the same as the lambda proxy's
// nest host recorded at dump time.
InstanceKlass* nest_host = caller_ik->nest_host(THREAD);
assert(nest_host == shared_nest_host, "mismatched nest host");
EventClassLoad class_load_start_event;
// Add to class hierarchy, and do possible deoptimizations.
loaded_lambda->add_to_hierarchy(THREAD);
// 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);
}
if (class_load_start_event.should_commit()) {
src/hotspot/share/classfile/systemDictionary.cpp:
InstanceKlass* check = loader_data->dictionary()->find_class(current, name);
if (check != nullptr) {
// Klass is already loaded, so just return it
return check;
}
// check if other thread failed to load and cleaned up
oldprobe = PlaceholderTable::get_entry(name, loader_data);
}
}
}
return nullptr;
}
void SystemDictionary::post_class_load_event(EventClassLoad* event, const InstanceKlass* k, const ClassLoaderData* init_cld) {
assert(event != nullptr, "invariant");
assert(k != nullptr, "invariant");
event->set_loadedClass(k);
event->set_definingClassLoader(k->class_loader_data());
event->set_initiatingClassLoader(init_cld);
event->commit();
}
// SystemDictionary::resolve_instance_class_or_null is the main function for class name resolution.
// After checking if the InstanceKlass already exists, it checks for ClassCircularityError and
// whether the thread must wait for loading in parallel. It eventually calls load_instance_class,
// which will load the class via the bootstrap loader or call ClassLoader.loadClass().
// This can return null, an exception or an InstanceKlass.
InstanceKlass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
Handle class_loader,
Handle protection_domain,
TRAPS) {
// name must be in the form of "java/lang/Object" -- cannot be "Ljava/lang/Object;"
assert(name != nullptr && !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 != nullptr, "invariant");
assert(st->need_verify(), "invariant");
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | false | true | 0 ms |
profiling | false | true | 0 ms |
Field | Type | Description |
---|---|---|
loadedClass | Class | Loaded Class Consider contributing a description to jfreventcollector. |
definingClassLoader | ClassLoader | Defining Class Loader Consider contributing a description to jfreventcollector. |
initiatingClassLoader | ClassLoader | Initiating Class Loader Consider contributing a description to jfreventcollector. |
Examples 3
definingClassLoader | ClassLoader | |
---|---|---|
name | string | bootstrap
|
type | Class | null
|
initiatingClassLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
loadedClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | jdk/internal/misc/MainMethodFinder
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | jdk/internal/misc
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 3
|
lineNumber | int | 874
|
method | Method | |
descriptor | string | (Ljava/lang/Class;)V
|
hidden | boolean | false
|
modifiers | int | 8
|
name | string | validateMainClass
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | sun/launcher/LauncherHelper
|
package | Package | |
exported | boolean | false
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | sun/launcher
|
type | FrameType | Interpreted
|
truncated | boolean | false
|
startTime | long: millis | 389713125
|
definingClassLoader | ClassLoader | |
---|---|---|
name | string | bootstrap
|
type | Class | null
|
initiatingClassLoader | ClassLoader | |
name | string | app
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | jdk/internal/loader
|
loadedClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/io/IOException
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/io
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Z)[Ljava/lang/reflect/Method;
|
hidden | boolean | false
|
modifiers | int | 258
|
name | string | getDeclaredMethods0
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | java/lang/Class
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 448819333
|
definingClassLoader | ClassLoader | |
---|---|---|
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
initiatingClassLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
loadedClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | true
|
modifiers | int | 4112
|
name | string | org.apache.spark.storage.BlockManagerMasterEndpoint$$Lambda+0x000007f806380790/1391384952
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/storage
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/String;[BIILjava/security/ProtectionDomain;ZILjava/lang/Object;)Ljava/lang/Class;
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | defineClass0
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1025
|
name | string | java/lang/ClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 840681200458
|
ClassDefine
startTime eventThread stackTrace 11 17 21 23 24
Category: Java Virtual Machine / Class Loading
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/classfile/systemDictionary.cpp:
// before references to the initiating class loader.
loader_data->record_dependency(loaded_class);
update_dictionary(THREAD, loaded_class, loader_data);
if (JvmtiExport::should_post_class_load()) {
JvmtiExport::post_class_load(THREAD, loaded_class);
}
}
return loaded_class;
}
static void post_class_define_event(InstanceKlass* k, const ClassLoaderData* def_cld) {
EventClassDefine event;
if (event.should_commit()) {
event.set_definedClass(k);
event.set_definingClassLoader(def_cld);
event.commit();
}
}
void SystemDictionary::define_instance_class(InstanceKlass* k, Handle class_loader, TRAPS) {
ClassLoaderData* loader_data = k->class_loader_data();
assert(loader_data->class_loader() == class_loader(), "they must be the same");
Configuration | enabled | stackTrace |
---|---|---|
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 | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/text/DecimalFormatSymbols
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/text
|
definingClassLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 22
|
lineNumber | int | 2032
|
method | Method | |
descriptor | string | (Ljava/util/Locale;)Ljava/text/DecimalFormatSymbols;
|
hidden | boolean | false
|
modifiers | int | 10
|
name | string | getDecimalFormatSymbols
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | java/util/Formatter
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 461199042
|
definedClass | Class | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/util/ServiceLoader$ProviderImpl
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
definingClassLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 377
|
lineNumber | int | 907
|
method | Method | |
descriptor | string | (Ljdk/internal/module/ServicesCatalog$ServiceProvider;)Ljava/util/ServiceLoader$Provider;
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | loadProvider
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | java/util/ServiceLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 402240792
|
definedClass | Class | |
---|---|---|
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1537
|
name | string | scala/reflect/runtime/TwoWayCaches
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/reflect/runtime
|
definingClassLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class;
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | defineClass1
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1025
|
name | string | java/lang/ClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | true
|
startTime | long: millis | 843444286125
|
ClassRedefinition
default profiling startTime 15 17 21 23 24
Category: Java Virtual Machine / Class Loading
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/prims/jvmtiRedefineClasses.cpp:
_timer_rsc_phase1.stop();
if (log_is_enabled(Info, redefine, class, timer)) {
_timer_rsc_phase2.start();
}
if (the_class->oop_map_cache() != nullptr) {
// Flush references to any obsolete methods from the oop map cache
// so that obsolete methods are not pinned.
the_class->oop_map_cache()->flush_obsolete_entries();
}
increment_class_counter(the_class);
if (EventClassRedefinition::is_enabled()) {
EventClassRedefinition event;
event.set_classModificationCount(java_lang_Class::classRedefinedCount(the_class->java_mirror()));
event.set_redefinedClass(the_class);
event.set_redefinitionId(_id);
event.commit();
}
{
ResourceMark rm(current);
// increment the classRedefinedCount field in the_class and in any
// direct and indirect subclasses of the_class
log_info(redefine, class, load)
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
redefinedClass | Class | Redefined Class Consider contributing a description to jfreventcollector. |
classModificationCount | int | Class Modification Count The number of times the class has changed |
redefinitionId | ulong | Class Redefinition Id |
RedefineClasses
default profiling startTime duration eventThread stackTrace 15 17 21 23 24
Category: Java Virtual Machine / Class Loading
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/prims/jvmtiEnv.cpp:
event.set_classCount(class_count);
event.set_redefinitionId(op.id());
event.commit();
}
return error;
} /* end RetransformClasses */
// class_count - pre-checked to be greater than or equal to 0
// class_definitions - pre-checked for null
jvmtiError
JvmtiEnv::RedefineClasses(jint class_count, const jvmtiClassDefinition* class_definitions) {
//TODO: add locking
EventRedefineClasses event;
VM_RedefineClasses op(class_count, class_definitions, jvmti_class_load_kind_redefine);
VMThread::execute(&op);
jvmtiError error = op.check_error();
if (error == JVMTI_ERROR_NONE) {
event.set_classCount(class_count);
event.set_redefinitionId(op.id());
event.commit();
}
return error;
} /* end RedefineClasses */
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
classCount | int | Class Count |
redefinitionId | ulong | Class Redefinition Id |
RetransformClasses
default profiling startTime duration eventThread stackTrace 15 17 21 23 24
Category: Java Virtual Machine / Class Loading
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/prims/jvmtiEnv.cpp:
class_definitions[index].class_byte_count = (jint)reconstituter.class_file_size();
class_definitions[index].class_bytes = (unsigned char*)
reconstituter.class_file_bytes();
} else {
// it is cached, get it from the cache
class_definitions[index].class_byte_count = ik->get_cached_class_file_len();
class_definitions[index].class_bytes = ik->get_cached_class_file_bytes();
}
class_definitions[index].klass = jcls;
}
EventRetransformClasses event;
VM_RedefineClasses op(class_count, class_definitions, jvmti_class_load_kind_retransform);
VMThread::execute(&op);
jvmtiError error = op.check_error();
if (error == JVMTI_ERROR_NONE) {
event.set_classCount(class_count);
event.set_redefinitionId(op.id());
event.commit();
}
return error;
} /* end RetransformClasses */
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
classCount | int | Class Count |
redefinitionId | ulong | Class Redefinition Id |
ClassUnload
startTime eventThread 11 17 21 23 24
Category: Java Virtual Machine / Class Loading
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/oops/instanceKlass.cpp:
ClassLoadingService::notify_class_unloaded(ik);
SystemDictionaryShared::handle_class_unloading(ik);
if (log_is_enabled(Info, class, unload)) {
ResourceMark rm;
log_info(class, unload)("unloading class %s " PTR_FORMAT, ik->external_name(), p2i(ik));
}
Events::log_class_unloading(Thread::current(), ik);
#if INCLUDE_JFR
assert(ik != nullptr, "invariant");
EventClassUnload event;
event.set_unloadedClass(ik);
event.set_definingClassLoader(ik->class_loader_data());
event.commit();
#endif
}
static void method_release_C_heap_structures(Method* m) {
m->release_C_heap_structures();
}
// Called also by InstanceKlass::deallocate_contents, with false for release_sub_metadata.
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
unloadedClass | Class | Unloaded Class Consider contributing a description to jfreventcollector. |
definingClassLoader | ClassLoader | Defining Class Loader Consider contributing a description to jfreventcollector. |
Examples 3
definingClassLoader | ClassLoader | |
---|---|---|
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
startTime | long: millis | 3889525250
|
unloadedClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1057
|
name | string | org/sparkproject/guava/collect/ImmutableList
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/sparkproject/guava/collect
|
definingClassLoader | ClassLoader | |
---|---|---|
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
startTime | long: millis | 852482745125
|
unloadedClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 25
|
name | string | scala/reflect/ManifestFactory$UnitManifest
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/reflect
|
definingClassLoader | ClassLoader | |
---|---|---|
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
startTime | long: millis | 4558890958
|
unloadedClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1537
|
name | string | org/slf4j/Logger
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/slf4j
|
JVM: Code Cache
CodeCacheFull
default profiling startTime eventThread 11 17 21 23 24
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 23 24
Category: Java Virtual Machine / Code Cache
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(CompilerConfiguration) {
EventCompilerConfiguration event;
event.set_threadCount(static_cast<s4>(CICompilerCount));
event.set_tieredCompilation(TieredCompilation);
event.set_dynamicCompilerThreadCount(UseDynamicNumberOfCompilerThreads);
event.commit();
}
TRACE_REQUEST_FUNC(CodeCacheStatistics) {
// Emit stats for all available code heaps
for (int bt_index = 0; bt_index < static_cast<int>(CodeBlobType::NumTypes); ++bt_index) {
const CodeBlobType bt = static_cast<CodeBlobType>(bt_index);
if (CodeCache::heap_available(bt)) {
EventCodeCacheStatistics event;
event.set_codeBlobType((u1)bt);
event.set_startAddress((u8)CodeCache::low_bound(bt));
event.set_reservedTopAddress((u8)CodeCache::high_bound(bt));
event.set_entryCount(CodeCache::blob_count(bt));
event.set_methodCount(CodeCache::nmethod_count(bt));
event.set_adaptorCount(CodeCache::adapter_count(bt));
event.set_unallocatedCapacity(CodeCache::unallocated_capacity(bt));
event.set_fullCount(CodeCache::get_codemem_full_count(bt));
event.commit();
}
}
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
codeBlobType | CodeBlobType | Code Heap Consider contributing a description to jfreventcollector. |
startAddress | ulong: address | Start Address |
reservedTopAddress | ulong: address | Reserved Top |
entryCount | int | Entries |
methodCount | int | Methods |
adaptorCount | int | Adaptors |
unallocatedCapacity | ulong: bytes | Unallocated |
fullCount | int | Full Count |
Examples 3
CodeCacheConfiguration
default profiling startTime end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Code Cache
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_startAddress((u8)CodeCache::low_bound(bt));
event.set_reservedTopAddress((u8)CodeCache::high_bound(bt));
event.set_entryCount(CodeCache::blob_count(bt));
event.set_methodCount(CodeCache::nmethod_count(bt));
event.set_adaptorCount(CodeCache::adapter_count(bt));
event.set_unallocatedCapacity(CodeCache::unallocated_capacity(bt));
event.set_fullCount(CodeCache::get_codemem_full_count(bt));
event.commit();
}
}
}
TRACE_REQUEST_FUNC(CodeCacheConfiguration) {
EventCodeCacheConfiguration event;
event.set_initialSize(InitialCodeCacheSize);
event.set_reservedSize(ReservedCodeCacheSize);
event.set_nonNMethodSize(NonNMethodCodeHeapSize);
event.set_profiledSize(ProfiledCodeHeapSize);
event.set_nonProfiledSize(NonProfiledCodeHeapSize);
event.set_expansionSize(CodeCacheExpansionSize);
event.set_minBlockLength(CodeCacheMinBlockLength);
event.set_startAddress((u8)CodeCache::low_bound());
event.set_reservedTopAddress((u8)CodeCache::high_bound());
event.commit();
}
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
initialSize | ulong: bytes | Initial Size |
reservedSize | ulong: bytes | Reserved Size |
nonNMethodSize | ulong: bytes | Non-nmethod Size |
profiledSize | ulong: bytes | Profiled Size |
nonProfiledSize | ulong: bytes | Non-profiled Size |
expansionSize | ulong: bytes | Expansion size |
minBlockLength | ulong: bytes | Minimum Block Length |
startAddress | ulong: address | Start Address |
reservedTopAddress | ulong: address | Reserved Top |
Examples 3
expansionSize | ulong: bytes | 65536
|
---|---|---|
initialSize | ulong: bytes | 2555904
|
minBlockLength | ulong: bytes | 6
|
nonNMethodSize | ulong: bytes | 5839564
|
nonProfiledSize | ulong: bytes | 122909338
|
profiledSize | ulong: bytes | 122909338
|
reservedSize | ulong: bytes | 251658240
|
reservedTopAddress | ulong: address | 4797415424
|
startAddress | ulong: address | 4545757184
|
startTime | long: millis | 791773024708
|
expansionSize | ulong: bytes | 65536
|
---|---|---|
initialSize | ulong: bytes | 2555904
|
minBlockLength | ulong: bytes | 6
|
nonNMethodSize | ulong: bytes | 5839564
|
nonProfiledSize | ulong: bytes | 122909338
|
profiledSize | ulong: bytes | 122909338
|
reservedSize | ulong: bytes | 251658240
|
reservedTopAddress | ulong: address | 4733009920
|
startAddress | ulong: address | 4481351680
|
startTime | long: millis | 96717754667
|
expansionSize | ulong: bytes | 65536
|
---|---|---|
initialSize | ulong: bytes | 2555904
|
minBlockLength | ulong: bytes | 6
|
nonNMethodSize | ulong: bytes | 5839564
|
nonProfiledSize | ulong: bytes | 122909338
|
profiledSize | ulong: bytes | 122909338
|
reservedSize | ulong: bytes | 251658240
|
reservedTopAddress | ulong: address | 5217714176
|
startAddress | ulong: address | 4966055936
|
startTime | long: millis | 423298667
|
JVM: Compiler
JITRestart
default profiling startTime eventThread 17 21 23 24
Category: Java Virtual Machine / Compiler
Restart of the JIT compilers after they were stopped
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/code/codeCache.cpp:
delete curr;
curr = next;
}
_exception_cache_purge_list = nullptr;
}
// Restart compiler if possible and required..
void CodeCache::maybe_restart_compiler(size_t freed_memory) {
// Try to start the compiler again if we freed any memory
if (!CompileBroker::should_compile_new_jobs() && freed_memory != 0) {
CompileBroker::set_should_compile_new_jobs(CompileBroker::run_compilation);
log_info(codecache)("Restarting compiler");
EventJITRestart event;
event.set_freedMemory(freed_memory);
event.set_codeCacheMaxCapacity(CodeCache::max_capacity());
event.commit();
}
}
uint8_t CodeCache::_unloading_cycle = 1;
void CodeCache::increment_unloading_cycle() {
// 2-bit value (see IsUnloadingState in nmethod.cpp for details)
// 0 is reserved for new methods.
Configuration | enabled |
---|---|
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 23 24
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, size_t arenaBytes) NOT_JFR_RETURN();
};
class CompilationFailureEvent : AllStatic {
public:
static void post(EventCompilationFailure& event, int compile_id, const char* reason) NOT_JFR_RETURN();
};
class PhaseEvent : AllStatic {
friend class CompilerPhaseTypeConstant;
src/hotspot/share/compiler/compileBroker.cpp:
void CompileBroker::handle_compile_error(CompilerThread* thread, CompileTask* task, ciEnv* ci_env,
int compilable, const char* failure_reason) {
if (!AbortVMOnCompilationFailure) {
return;
}
if (compilable == ciEnv::MethodCompilable_not_at_tier) {
fatal("Not compilable at tier %d: %s", task->comp_level(), failure_reason);
}
if (compilable == ciEnv::MethodCompilable_never) {
fatal("Never compilable: %s", failure_reason);
}
}
static void post_compilation_event(EventCompilation& event, CompileTask* task) {
assert(task != nullptr, "invariant");
CompilerEvent::CompilationEvent::post(event,
task->compile_id(),
task->compiler()->type(),
task->method(),
task->comp_level(),
task->is_success(),
task->osr_bci() != CompileBroker::standard_entry_bci,
task->nm_total_size(),
task->num_inlined_bytecodes(),
task->arena_bytes());
}
src/hotspot/share/compiler/compileBroker.cpp:
// Allocate a new set of JNI handles.
JNIHandleMark jhm(thread);
Method* target_handle = task->method();
int compilable = ciEnv::MethodCompilable;
const char* failure_reason = nullptr;
bool failure_reason_on_C_heap = false;
const char* retry_message = nullptr;
#if INCLUDE_JVMCI
if (UseJVMCICompiler && comp != nullptr && comp->is_jvmci()) {
JVMCICompiler* jvmci = (JVMCICompiler*) comp;
TraceTime t1("compilation", &time);
EventCompilation event;
JVMCICompileState compile_state(task, jvmci);
JVMCIRuntime *runtime = nullptr;
if (JVMCI::in_shutdown()) {
failure_reason = "in JVMCI shutdown";
retry_message = "not retryable";
compilable = ciEnv::MethodCompilable_never;
} else if (compile_state.target_method_is_old()) {
// Skip redefined methods
failure_reason = "redefined method";
retry_message = "not retryable";
src/hotspot/share/compiler/compileBroker.cpp:
bool method_is_old = ci_env.cache_jvmti_state();
// Skip redefined methods
if (method_is_old) {
ci_env.record_method_not_compilable("redefined method", true);
}
// Cache DTrace flags
ci_env.cache_dtrace_flags();
ciMethod* target = ci_env.get_method_from_handle(target_handle);
TraceTime t1("compilation", &time);
EventCompilation event;
if (comp == nullptr) {
ci_env.record_method_not_compilable("no compiler");
} else if (!ci_env.failing()) {
if (WhiteBoxAPI && WhiteBox::compilation_locked) {
whitebox_lock_compilation();
}
comp->compile_method(&ci_env, target, osr_bci, true, directive);
/* Repeat compilation without installing code for profiling purposes */
int repeat_compilation_count = directive->RepeatCompilationOption;
src/hotspot/share/compiler/compilerEvent.cpp:
template <typename EventType>
static inline void commit(EventType& event) {
JavaThread* thread = JavaThread::current();
JavaThreadState state = thread->thread_state();
if (state == _thread_in_native) {
ThreadInVMfromNative transition(thread);
event.commit();
} else {
assert(state == _thread_in_vm, "coming from wrong thread state %d", state);
event.commit();
}
}
void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_id, CompilerType compiler_type, Method* method,
int compile_level, bool success, bool is_osr, int code_size,
int inlined_bytecodes, size_t arenaBytes) {
event.set_compileId(compile_id);
event.set_compiler(compiler_type);
event.set_method(method);
event.set_compileLevel((short)compile_level);
event.set_succeded(success);
event.set_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
event.set_arenaBytes(arenaBytes);
src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/EventProvider.java:
* Creates and returns an empty implementation for {@link EventProvider}. This implementation
* can be used when no logging is requested.
*/
static EventProvider createEmptyEventProvider() {
return new EmptyEventProvider();
}
/**
* Creates and returns an empty implementation for {@link CompilationEvent}.
*/
static CompilationEvent createEmptyCompilationEvent() {
return new EmptyCompilationEvent();
}
/**
* Creates and returns an empty implementation for {@link CompilationEvent}.
*/
static CompilerFailureEvent createEmptyCompilerFailureEvent() {
return new EmptyCompilerFailureEvent();
}
/**
* An instant event is an event that is not considered to have taken any time.
src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/EventProvider.java:
/**
* Ends the timing period for this event.
*/
void end();
}
/**
* Creates a new {@link CompilationEvent}.
*
* @return a compilation event
*/
CompilationEvent newCompilationEvent();
/**
* A compilation event.
*/
public interface CompilationEvent extends TimedEvent {
void setMethod(String method);
void setCompileId(int compileId);
void setCompileLevel(int compileLevel);
void setSucceeded(boolean succeeded);
src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/EmptyEventProvider.java:
package jdk.vm.ci.hotspot;
/**
* An empty implementation for {@link EventProvider}. This implementation is used when no logging is
* requested.
*/
final class EmptyEventProvider implements EventProvider {
static InternalError shouldNotReachHere() {
throw new InternalError("should not reach here");
}
@Override
public CompilationEvent newCompilationEvent() {
return new EmptyCompilationEvent();
}
static class EmptyCompilationEvent implements CompilationEvent {
@Override
public void commit() {
throw shouldNotReachHere();
}
@Override
public boolean shouldWrite() {
// Events of this class should never been written.
return false;
}
Configuration | enabled | threshold |
---|---|---|
default | true | 1000 ms |
profiling | true | 100 ms |
Field | Type | Description |
---|---|---|
compileId | int | 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 |
arenaBytes | ulong: bytes 23+ | Arena Usage |
Examples 3
codeSize | ulong: bytes | 176
|
---|---|---|
compileId | int | 86260
|
compileLevel | ushort | 4
|
compiler | CompilerType | c2
|
inlinedBytes | ulong: bytes | 0
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Ljava/lang/Object;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | apply
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | scala/collection/Iterator$$anon$7
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/collection
|
startTime | long: millis | 837128279542
|
succeded | boolean | true
|
codeSize | ulong: bytes | 26696
|
---|---|---|
compileId | int | 6693
|
compileLevel | ushort | 4
|
compiler | CompilerType | c2
|
inlinedBytes | ulong: bytes | 3952
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Lscala/PartialFunction;Ljava/lang/Object;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | aroundReceive
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1537
|
name | string | akka/actor/Actor
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | akka/actor
|
startTime | long: millis | 10504563250
|
succeded | boolean | true
|
codeSize | ulong: bytes | 4672
|
---|---|---|
compileId | int | 16100
|
compileLevel | ushort | 4
|
compiler | CompilerType | c2
|
inlinedBytes | ulong: bytes | 351
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Lio/netty/channel/ChannelHandlerContext;)V
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | removeState
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1057
|
name | string | io/netty/channel/ChannelInitializer
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | io/netty/channel
|
startTime | long: millis | 49699764250
|
succeded | boolean | true
|
CompilerPhase
default profiling startTime duration eventThread 11 17 21 23 24
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/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_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
event.set_arenaBytes(arenaBytes);
commit(event);
}
void CompilerEvent::CompilationFailureEvent::post(EventCompilationFailure& event, int compile_id, const char* reason) {
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) {
event.set_compileId(compile_id);
event.set_caller(caller);
event.set_callee(callee);
src/hotspot/share/jvmci/jvmciCompilerToVM.cpp:
C2V_END
C2V_VMENTRY_0(jint, registerCompilerPhase, (JNIEnv* env, jobject, jstring jphase_name))
#if INCLUDE_JFR
JVMCIObject phase_name = JVMCIENV->wrap(jphase_name);
const char *name = JVMCIENV->as_utf8_string(phase_name);
return CompilerEvent::PhaseEvent::get_phase_id(name, true, true, true);
#else
return -1;
#endif // !INCLUDE_JFR
C2V_END
C2V_VMENTRY(void, notifyCompilerPhaseEvent, (JNIEnv* env, jobject, jlong startTime, jint phase, jint compileId, jint level))
EventCompilerPhase event(UNTIMED);
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, startTime, phase, compileId, level);
}
C2V_END
C2V_VMENTRY(void, notifyCompilerInliningEvent, (JNIEnv* env, jobject, jint compileId, ARGUMENT_PAIR(caller), ARGUMENT_PAIR(callee), jboolean succeeded, jstring jmessage, jint bci))
EventCompilerInlining event;
if (event.should_commit()) {
Method* caller = UNPACK_PAIR(Method, caller);
Method* callee = UNPACK_PAIR(Method, callee);
JVMCIObject message = JVMCIENV->wrap(jmessage);
src/hotspot/share/opto/compile.cpp:
if (n->is_Allocate()) {
if (i != allocates) {
Node* tmp = macro_node(allocates);
_macro_nodes.at_put(allocates, n);
_macro_nodes.at_put(i, tmp);
}
allocates++;
}
}
}
void Compile::print_method(CompilerPhaseType cpt, int level, Node* n) {
if (failing()) { return; }
EventCompilerPhase event(UNTIMED);
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, cpt, C->_compile_id, level);
}
#ifndef PRODUCT
ResourceMark rm;
stringStream ss;
ss.print_raw(CompilerPhaseTypeHelper::to_description(cpt));
int iter = ++_igv_phase_iter[cpt];
if (iter > 1) {
ss.print(" %d", iter);
}
src/hotspot/share/opto/compile.cpp:
// Only used from CompileWrapper
void Compile::begin_method() {
#ifndef PRODUCT
if (_method != nullptr && should_print_igv(1)) {
_igv_printer->begin_method();
}
#endif
C->_latest_stage_start_counter.stamp();
}
// Only used from CompileWrapper
void Compile::end_method() {
EventCompilerPhase event(UNTIMED);
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, PHASE_END, C->_compile_id, 1);
}
#ifndef PRODUCT
if (_method != nullptr && should_print_igv(1)) {
_igv_printer->end_method();
}
#endif
}
src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/JFR.java:
/**
* @return current JFR time stamp
*/
public static long now() {
return compilerToVM().ticksNow();
}
}
/**
* Helper methods for managing JFR CompilerPhase events. The events are defined in {@code
* src/share/jfr/metadata/metadata.xml}.
*/
public static final class CompilerPhaseEvent {
private static final ConcurrentHashMap<String, Integer> phaseToId = new ConcurrentHashMap<>();
private static int getPhaseToId(String phaseName) {
return phaseToId.computeIfAbsent(phaseName, k -> compilerToVM().registerCompilerPhase(phaseName));
}
/**
* Commits a CompilerPhase event.
*
* @param startTime time captured at the start of compiler phase
Configuration | enabled | threshold |
---|---|---|
default | true | 60 s |
profiling | true | 10 s |
Field | Type | Description |
---|---|---|
phase | CompilerPhaseType | Compile Phase |
compileId | int | Compilation Identifier |
phaseLevel | ushort | Phase Level |
CompilationFailure
profiling startTime eventThread 11 17 21 23 24
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/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
class CompilationEvent : AllStatic {
public:
static void post(EventCompilation& event, int compile_id, CompilerType type, Method* method,
int compile_level, bool success, bool is_osr, int code_size,
int inlined_bytecodes, size_t arenaBytes) NOT_JFR_RETURN();
};
class CompilationFailureEvent : AllStatic {
public:
static void post(EventCompilationFailure& event, int compile_id, const char* reason) NOT_JFR_RETURN();
};
class PhaseEvent : AllStatic {
friend class CompilerPhaseTypeConstant;
public:
// Gets a unique identifier for `phase_name`, computing and registering it first if necessary.
// If `may_exist` is true, then current registrations are searched first. If false, then
// there must not be an existing registration for `phase_name`.
// If `use_strdup` is true, then `phase_name` is strdup'ed before registration.
// If `sync` is true, then access to the registration table is synchronized.
src/hotspot/share/compiler/compilerEvent.cpp:
int inlined_bytecodes, size_t arenaBytes) {
event.set_compileId(compile_id);
event.set_compiler(compiler_type);
event.set_method(method);
event.set_compileLevel((short)compile_level);
event.set_succeded(success);
event.set_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
event.set_arenaBytes(arenaBytes);
commit(event);
}
void CompilerEvent::CompilationFailureEvent::post(EventCompilationFailure& event, int compile_id, const char* reason) {
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
src/hotspot/share/ci/ciEnv.cpp:
// ------------------------------------------------------------------
// ciEnv::record_failure()
void ciEnv::record_failure(const char* reason) {
if (_failure_reason.get() == nullptr) {
// Record the first failure reason.
_failure_reason.set(reason);
}
}
void ciEnv::report_failure(const char* reason) {
EventCompilationFailure event;
if (event.should_commit()) {
CompilerEvent::CompilationFailureEvent::post(event, compile_id(), reason);
}
}
// ------------------------------------------------------------------
// ciEnv::record_method_not_compilable()
void ciEnv::record_method_not_compilable(const char* reason, bool all_tiers) {
int new_compilable =
all_tiers ? MethodCompilable_never : MethodCompilable_not_at_tier ;
// Only note transitions to a worse state
if (new_compilable > _compilable) {
Configuration | enabled |
---|---|
default | false |
profiling | true |
Field | Type | Description |
---|---|---|
failureMessage | string | Failure Message |
compileId | int | Compilation Identifier |
Examples 3
CompilerInlining
startTime eventThread 11 17 21 23 24
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/opto/bytecodeInfo.cpp:
CompileTask::print_inlining_ul(callee_method, inline_level(),
caller_bci, inlining_result_of(success), inline_msg);
if (C->print_inlining()) {
C->print_inlining(callee_method, inline_level(), caller_bci, inlining_result_of(success), inline_msg);
guarantee(callee_method != nullptr, "would crash in CompilerEvent::InlineEvent::post");
if (Verbose) {
const InlineTree *top = this;
while (top->caller_tree() != nullptr) { 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 != nullptr, "caller checks for optimized virtual!");
// Make sure the incoming jvms has the same information content as me.
src/hotspot/share/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
src/hotspot/share/compiler/compilerEvent.hpp:
// there must not be an existing registration for `phase_name`.
// If `use_strdup` is true, then `phase_name` is strdup'ed before registration.
// If `sync` is true, then access to the registration table is synchronized.
static int get_phase_id(const char* phase_name, bool may_exist, bool use_strdup, bool sync) NOT_JFR_RETURN_(-1);
static void post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) NOT_JFR_RETURN();
static void post(EventCompilerPhase& event, jlong start_time, int phase, int compile_id, int level) {
JFR_ONLY(post(event, Ticks(start_time), phase, compile_id, level);)
}
};
class InlineEvent : AllStatic {
static void post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
public:
static void post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
static void post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
};
};
#endif // SHARE_COMPILER_COMPILEREVENT_HPP
src/hotspot/share/compiler/compilerEvent.cpp:
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) {
event.set_compileId(compile_id);
event.set_caller(caller);
event.set_callee(callee);
event.set_succeeded(success);
event.set_message(msg);
event.set_bci(bci);
commit(event);
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) {
JfrStructCalleeMethod callee_struct;
callee_struct.set_type(callee->klass_name()->as_utf8());
callee_struct.set_name(callee->name()->as_utf8());
callee_struct.set_descriptor(callee->signature()->as_utf8());
post(event, compile_id, caller, callee_struct, success, msg, bci);
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) {
JfrStructCalleeMethod callee_struct;
callee_struct.set_type(callee->holder()->name()->as_utf8());
callee_struct.set_name(callee->name()->as_utf8());
callee_struct.set_descriptor(callee->signature()->as_symbol()->as_utf8());
post(event, compile_id, caller, callee_struct, success, msg, bci);
}
src/hotspot/share/jvmci/jvmciCompilerToVM.cpp:
#else
return -1;
#endif // !INCLUDE_JFR
C2V_END
C2V_VMENTRY(void, notifyCompilerPhaseEvent, (JNIEnv* env, jobject, jlong startTime, jint phase, jint compileId, jint level))
EventCompilerPhase event(UNTIMED);
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, startTime, phase, compileId, level);
}
C2V_END
C2V_VMENTRY(void, notifyCompilerInliningEvent, (JNIEnv* env, jobject, jint compileId, ARGUMENT_PAIR(caller), ARGUMENT_PAIR(callee), jboolean succeeded, jstring jmessage, jint bci))
EventCompilerInlining event;
if (event.should_commit()) {
Method* caller = UNPACK_PAIR(Method, caller);
Method* callee = UNPACK_PAIR(Method, callee);
JVMCIObject message = JVMCIENV->wrap(jmessage);
CompilerEvent::InlineEvent::post(event, compileId, caller, callee, succeeded, JVMCIENV->as_utf8_string(message), bci);
}
C2V_END
C2V_VMENTRY(void, setThreadLocalObject, (JNIEnv* env, jobject, jint id, jobject value))
requireInHotSpot("setThreadLocalObject", JVMCI_CHECK);
if (id == 0) {
src/hotspot/share/c1/c1_GraphBuilder.cpp:
append(new MemBar(lir_membar_storestore));
}
void GraphBuilder::print_inlining(ciMethod* callee, const char* msg, bool success) {
CompileLog* log = compilation()->log();
if (log != nullptr) {
assert(msg != nullptr, "inlining msg should not be null!");
if (success) {
log->inline_success(msg);
} else {
log->inline_fail(msg);
}
}
EventCompilerInlining event;
if (event.should_commit()) {
CompilerEvent::InlineEvent::post(event, compilation()->env()->task()->compile_id(), method()->get_Method(), callee, success, msg, bci());
}
CompileTask::print_inlining_ul(callee, scope()->level(), bci(), inlining_result_of(success), msg);
if (!compilation()->directive()->PrintInliningOption) {
return;
}
CompileTask::print_inlining_tty(callee, scope()->level(), bci(), inlining_result_of(success), msg);
if (success && CIPrintMethodCodes) {
src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/JFR.java:
* @param phaseName compiler phase name
* @param compileId current compilation unit id
* @param phaseLevel compiler phase nesting level
*/
public static void write(long startTime, String phaseName, int compileId, int phaseLevel) {
compilerToVM().notifyCompilerPhaseEvent(startTime, getPhaseToId(phaseName), compileId, phaseLevel);
}
}
/**
* Helper methods for managing JFR CompilerInlining events. The events are defined in {@code
* src/share/jfr/metadata/metadata.xml}.
*/
public static final class CompilerInliningEvent {
/**
* Commits a CompilerInlining event.
*
* @param compileId current compilation unit id
* @param caller caller method
* @param callee callee method
* @param succeeded inlining succeeded or not
* @param message extra information on inlining
* @param bci invocation byte code index
*/
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
compileId | int | Compilation Identifier |
caller | Method | Caller Method |
callee | CalleeMethod struct | Callee Method |
succeeded | boolean | Succeeded |
message | string | Message |
bci | int | Bytecode Index |
Examples 3
bci | int | 16
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | ([BII)[B
|
name | string | copyOfRange
|
type | string | java/util/Arrays
|
caller | Method | |
descriptor | string | ([BII)Ljava/lang/String;
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | newString
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 48
|
name | string | java/lang/StringLatin1
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
compileId | int | 1413
|
message | string | inline
|
startTime | long: millis | 359572833
|
succeeded | boolean | true
|
bci | int | 4
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | ()B
|
name | string | readByte
|
type | string | java/io/ObjectInputStream$BlockDataInputStream
|
caller | Method | |
descriptor | string | ()B
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | readByte
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/io/ObjectInputStream
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/io
|
compileId | int | 85796
|
message | string | inline (hot)
|
startTime | long: millis | 792281442042
|
succeeded | boolean | true
|
bci | int | 1
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | ()V
|
name | string | <init>
|
type | string | java/lang/Object
|
caller | Method | |
descriptor | string | ([BB)V
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
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.1
|
name | string | java/lang
|
compileId | int | 1448
|
message | string | inline
|
startTime | long: millis | 415615042
|
succeeded | boolean | true
|
Deoptimization
default profiling startTime eventThread stackTrace 14 17 21 23 24
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(nmethod* nm,
const Method* method,
int trap_bci,
int instruction,
Deoptimization::DeoptReason reason,
Deoptimization::DeoptAction action) {
assert(nm != nullptr, "invariant");
assert(method != nullptr, "invariant");
if (EventDeoptimization::is_enabled()) {
static bool serializers_registered = false;
if (!serializers_registered) {
register_serializers();
serializers_registered = true;
}
EventDeoptimization event;
event.set_compileId(nm->compile_id());
event.set_compiler(nm->compiler_type());
event.set_method(method);
event.set_lineNumber(method->line_number_from_bci(trap_bci));
event.set_bci(trap_bci);
event.set_instruction(instruction);
event.set_reason(reason);
event.set_action(action);
event.commit();
}
}
Configuration | enabled | stackTrace |
---|---|---|
default | true | false |
profiling | true | true |
Field | Type | Description |
---|---|---|
compileId | int | 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 | 242
|
compileId | int | 2132
|
compiler | CompilerType | c2
|
instruction | Bytecode | invokevirtual
|
lineNumber | int | 1039
|
method | Method | |
descriptor | string | (Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 16
|
name | string | putVal
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
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.1
|
name | string | java/util/concurrent
|
reason | DeoptimizationReason | class_check
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 242
|
lineNumber | int | 1039
|
method | Method | |
descriptor | string | (Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 16
|
name | string | putVal
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
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.1
|
name | string | java/util/concurrent
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 1424738958
|
action | DeoptimizationAction | reinterpret
|
---|---|---|
bci | int | 24
|
compileId | int | 89106
|
compiler | CompilerType | c2
|
instruction | Bytecode | if_icmpne
|
lineNumber | int | 159
|
method | Method | |
descriptor | string | (Lscala/Function1;)V
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | foreach$mVc$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 | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | scala/collection/immutable/Range
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/collection/immutable
|
reason | DeoptimizationReason | unstable_if
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 24
|
lineNumber | int | 159
|
method | Method | |
descriptor | string | (Lscala/Function1;)V
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | foreach$mVc$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 | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | scala/collection/immutable/Range
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/collection/immutable
|
type | FrameType | JIT compiled
|
truncated | boolean | false
|
startTime | long: millis | 854783569333
|
action | DeoptimizationAction | maybe_recompile
|
---|---|---|
bci | int | 12
|
compileId | int | 2620
|
compiler | CompilerType | c2
|
instruction | Bytecode | invokeinterface
|
lineNumber | int | 197
|
method | Method | |
descriptor | string | (Ljava/lang/Object;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | accept
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/util/stream/ReferencePipeline$3$1
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util/stream
|
reason | DeoptimizationReason | class_check
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 12
|
lineNumber | int | 197
|
method | Method | |
descriptor | string | (Ljava/lang/Object;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | accept
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/util/stream/ReferencePipeline$3$1
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util/stream
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 1505610375
|
CompilerQueueUtilization
default profiling startTime duration every chunk 22 23 24
Category: Java Virtual Machine / Compiler
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/jfr/periodic/jfrCompilerQueueUtilization.cpp:
{CompileBroker::c2_compile_queue(), c2_compiler_queue_id, &CompileBroker::get_c2_thread_count, 0, 0}};
const JfrTicks cur_time = JfrTicks::now();
static JfrTicks last_sample_instant;
const JfrTickspan interval = cur_time - last_sample_instant;
for (int i = 0; i < num_compiler_queues; i ++) {
CompilerQueueEntry* entry = &compilerQueueEntries[i];
if (entry->compilerQueue != nullptr) {
const uint64_t current_added = entry->compilerQueue->get_total_added();
const uint64_t current_removed = entry->compilerQueue->get_total_removed();
const uint64_t addedRate = rate_per_second(current_added, entry->added, interval);
const uint64_t removedRate = rate_per_second(current_removed, entry->removed, interval);
EventCompilerQueueUtilization event;
event.set_compiler(entry->compiler_queue_id);
event.set_addedRate(addedRate);
event.set_removedRate(removedRate);
event.set_queueSize(entry->compilerQueue->size());
event.set_peakQueueSize(entry->compilerQueue->get_peak_size());
event.set_addedCount(current_added - entry->added);
event.set_removedCount(current_removed - entry->removed);
event.set_totalAddedCount(current_added);
event.set_totalRemovedCount(current_removed);
event.set_compilerThreadCount(entry->get_compiler_thread_count());
event.commit();
Configuration | enabled | period |
---|---|---|
default | true | 10 s |
profiling | true | 5 s |
Field | Type | Description |
---|---|---|
compiler | CompilerType | Compiler Consider contributing a description to jfreventcollector. |
addedRate | long: hertz | Requets Added Rate Requests added per second |
removedRate | long: hertz | Requests Removed Rate Requests removed per second |
queueSize | long | Queue Size |
peakQueueSize | long | Peak Queue Size |
addedCount | long | Requests Added |
removedCount | long | Requests Removed |
totalAddedCount | long | Total Requests Added |
totalRemovedCount | long | Total Requests Removed |
compilerThreadCount | int | Compiler Thread Count |
CompilerStatistics
default profiling startTime every chunk 11 17 21 23 24
Category: Java Virtual Machine / Compiler
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(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 | 11
|
---|---|---|
compileCount | int | 116511
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 162317392
|
nmethodsSize | ulong: bytes | 246819296
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 1181
|
peakTimeSpent | long: millis | 10885
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 115330
|
startTime | long: millis | 930421751208
|
totalTimeSpent | long: millis | 460365
|
bailoutCount | int | 4
|
---|---|---|
compileCount | int | 33966
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 44434376
|
nmethodsSize | ulong: bytes | 68239672
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 239
|
peakTimeSpent | long: millis | 1169
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 33727
|
startTime | long: millis | 90184513125
|
totalTimeSpent | long: millis | 74969
|
bailoutCount | int | 3
|
---|---|---|
compileCount | int | 33784
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 43125488
|
nmethodsSize | ulong: bytes | 66272936
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 228
|
peakTimeSpent | long: millis | 1360
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 33556
|
startTime | long: millis | 92412597333
|
totalTimeSpent | long: millis | 78329
|
CompilerConfiguration
default profiling startTime end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Compiler
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_invalidatedCount(CompileBroker::get_total_invalidated_count());
event.set_osrCompileCount(CompileBroker::get_total_osr_compile_count());
event.set_standardCompileCount(CompileBroker::get_total_standard_compile_count());
event.set_osrBytesCompiled(CompileBroker::get_sum_osr_bytes_compiled());
event.set_standardBytesCompiled(CompileBroker::get_sum_standard_bytes_compiled());
event.set_nmethodsSize(CompileBroker::get_sum_nmethod_size());
event.set_nmethodCodeSize(CompileBroker::get_sum_nmethod_code_size());
event.set_peakTimeSpent(CompileBroker::get_peak_compilation_time());
event.set_totalTimeSpent(CompileBroker::get_total_compilation_time());
event.commit();
}
TRACE_REQUEST_FUNC(CompilerConfiguration) {
EventCompilerConfiguration event;
event.set_threadCount(static_cast<s4>(CICompilerCount));
event.set_tieredCompilation(TieredCompilation);
event.set_dynamicCompilerThreadCount(UseDynamicNumberOfCompilerThreads);
event.commit();
}
TRACE_REQUEST_FUNC(CodeCacheStatistics) {
// Emit stats for all available code heaps
for (int bt_index = 0; bt_index < static_cast<int>(CodeBlobType::NumTypes); ++bt_index) {
const CodeBlobType bt = static_cast<CodeBlobType>(bt_index);
if (CodeCache::heap_available(bt)) {
Configuration | enabled | period |
---|---|---|
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 23 24
Category: Java Virtual Machine / Diagnostics
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/synchronizer.cpp:
} else {
assert(DiagnoseSyncOnValueBasedClasses == LOG_WARNING, "invalid value for DiagnoseSyncOnValueBasedClasses");
ResourceMark rm;
Log(valuebasedclasses) vblog;
vblog.info("Synchronizing on object " INTPTR_FORMAT " of klass %s", p2i(obj()), obj->klass()->external_name());
if (locking_thread->has_last_Java_frame()) {
LogStream info_stream(vblog.info());
locking_thread->print_active_stack_on(&info_stream);
} else {
vblog.info("Cannot find the last Java frame");
}
EventSyncOnValueBasedClass event;
if (event.should_commit()) {
event.set_valueBasedClass(obj->klass());
event.commit();
}
}
if (bcp_was_adjusted) {
last_frame.interpreter_frame_set_bcp(last_frame.interpreter_frame_bcp() + 1);
}
}
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
valueBasedClass | Class | Value Based Class Consider contributing a description to jfreventcollector. |
HeapDump
default profiling startTime duration eventThread stackTrace 15 17 21 23 24
Category: Java Virtual Machine / Diagnostics
Information about a successfully written Java heap dump
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/services/heapDumper.cpp:
if (_oome && num_dump_threads > 1) {
// Each additional parallel writer requires several MB of internal memory
// (DumpWriter buffer, DumperClassCacheTable, GZipCompressor buffers).
// For the OOM handling we may already be limited in memory.
// Lets ensure we have at least 20MB per thread.
julong max_threads = os::free_memory() / (20 * M);
if (num_dump_threads > max_threads) {
num_dump_threads = MAX2<uint>(1, (uint)max_threads);
}
}
// create JFR event
EventHeapDump event;
AbstractCompressor* compressor = nullptr;
if (compression > 0) {
compressor = new (std::nothrow) GZipCompressor(compression);
if (compressor == nullptr) {
set_error("Could not allocate gzip compressor");
return -1;
}
}
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ns |
profiling | true | true | 0 ns |
Field | Type | Description |
---|---|---|
destination | string | Destination Path of the Dump |
size | long | Size |
gcBeforeDump | boolean | GC Before Dump |
onOutOfMemoryError | boolean | Heap Dump on Out of Memory Error |
overwrite | boolean 21+ | Overwrite Heap dump overwrites previous file location if it exists |
compression | int 21+ | Compression Level Compression level of the dump, if larger than 0 we use gzip compression with this level |
JavaAgent
default profiling startTime end of every chunk 21 23 24
Category: Java Virtual Machine / Diagnostics
A Java programming language agent making use of the java.lang.instrument package for instrumenting programs running on the JVM
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_name(agent->name());
event.set_options(agent->options());
event.set_dynamic(agent->is_dynamic());
event.set_initializationTime(agent->initialization_time());
event.set_initializationDuration(agent->initialization_duration());
event.commit();
}
TRACE_REQUEST_FUNC(JavaAgent) {
const JvmtiAgentList::Iterator it =JvmtiAgentList::java_agents();
while (it.has_next()) {
const JvmtiAgent* agent = it.next();
assert(agent->is_jplis(), "invariant");
EventJavaAgent event;
send_agent_event(event, agent);
}
}
static void send_native_agent_events(const JvmtiAgentList::Iterator& it) {
while (it.has_next()) {
const JvmtiAgent* agent = it.next();
assert(!agent->is_jplis(), "invariant");
EventNativeAgent event;
event.set_path(agent->os_lib_path());
send_agent_event(event, agent);
Configuration | enabled | period |
---|---|---|
default | true | endChunk |
profiling | true | endChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
options | string | Options |
dynamic | boolean | Dynamic If the agent attached to the JVM dynamically during runtime, i.e. not at startup |
initializationTime | Ticks | Initialization Time The time the JVM initialized the agent |
initializationDuration | Tickspan | Initialization Duration The duration of executing the initialization method, either premain or agentmain |
NativeAgent
default profiling startTime end of every chunk 21 23 24
Category: Java Virtual Machine / Diagnostics
A native programming language agent making use of the JVMTI interface used by development, profiling and monitoring tools
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
const JvmtiAgentList::Iterator it =JvmtiAgentList::java_agents();
while (it.has_next()) {
const JvmtiAgent* agent = it.next();
assert(agent->is_jplis(), "invariant");
EventJavaAgent event;
send_agent_event(event, agent);
}
}
static void send_native_agent_events(const JvmtiAgentList::Iterator& it) {
while (it.has_next()) {
const JvmtiAgent* agent = it.next();
assert(!agent->is_jplis(), "invariant");
EventNativeAgent event;
event.set_path(agent->os_lib_path());
send_agent_event(event, agent);
}
}
TRACE_REQUEST_FUNC(NativeAgent) {
const JvmtiAgentList::Iterator native_agents_it = JvmtiAgentList::native_agents();
send_native_agent_events(native_agents_it);
const JvmtiAgentList::Iterator xrun_agents_it = JvmtiAgentList::xrun_agents();
send_native_agent_events(xrun_agents_it);
}
Configuration | enabled | period |
---|---|---|
default | true | endChunk |
profiling | true | endChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
options | string | Options |
dynamic | boolean | Dynamic If the library attached to the JVM dynamically during runtime, i.e. not at startup |
initializationTime | Ticks | Initialization Time The time the JVM initialized the agent |
initializationDuration | Tickspan | Initialization Duration The duration of executing the JVMTI VMInit event callback. If no VMInit callback is specified, the duration is 0. For a dynamically loaded agent, it is the duration of executing the call to Agent_OnAttach. |
path | string | Path The path of the library |
JVM: Flag
IntFlagChanged
default profiling startTime 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlagAccess.cpp:
virtual void print_range(outputStream* st, const JVMFlagLimit* range) const {
const JVMTypedFlagLimit<T>* r = (const JVMTypedFlagLimit<T>*)range;
print_range_impl(st, r->min(), r->max());
}
virtual void range_error(const char* name, T value, T min, T max, bool verbose) const = 0;
virtual void print_range_impl(outputStream* st, T min, T max) const = 0;
};
class FlagAccessImpl_int : public RangedFlagAccessImpl<int, EventIntFlagChanged> {
public:
void range_error(const char* name, int value, int min, int max, bool verbose) const {
JVMFlag::printError(verbose,
"int %s=%d is outside the allowed range "
"[ %d ... %d ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, int value, bool verbose) const {
return ((JVMFlagConstraintFunc_int)func)(value, verbose);
}
void print_range_impl(outputStream* st, int min, int max) const {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | int | Old Value |
newValue | int | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
UnsignedIntFlagChanged
default profiling startTime 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlagAccess.cpp:
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, int value, bool verbose) const {
return ((JVMFlagConstraintFunc_int)func)(value, verbose);
}
void print_range_impl(outputStream* st, int min, int max) const {
st->print("[ %-25d ... %25d ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " INT32_FORMAT_W(-25) " ... " INT32_FORMAT_W(25) " ]", INT_MIN, INT_MAX);
}
};
class FlagAccessImpl_uint : public RangedFlagAccessImpl<uint, EventUnsignedIntFlagChanged> {
public:
void range_error(const char* name, uint value, uint min, uint max, bool verbose) const {
JVMFlag::printError(verbose,
"uint %s=%u is outside the allowed range "
"[ %u ... %u ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, uint value, bool verbose) const {
return ((JVMFlagConstraintFunc_uint)func)(value, verbose);
}
void print_range_impl(outputStream* st, uint min, uint max) const {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | uint | Old Value |
newValue | uint | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
LongFlagChanged
default profiling startTime 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlagAccess.cpp:
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, uint value, bool verbose) const {
return ((JVMFlagConstraintFunc_uint)func)(value, verbose);
}
void print_range_impl(outputStream* st, uint min, uint max) const {
st->print("[ %-25u ... %25u ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " UINT32_FORMAT_W(-25) " ... " UINT32_FORMAT_W(25) " ]", 0, UINT_MAX);
}
};
class FlagAccessImpl_intx : public RangedFlagAccessImpl<intx, EventLongFlagChanged> {
public:
void range_error(const char* name, intx value, intx min, intx max, bool verbose) const {
JVMFlag::printError(verbose,
"intx %s=" INTX_FORMAT " is outside the allowed range "
"[ " INTX_FORMAT " ... " INTX_FORMAT " ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, intx value, bool verbose) const {
return ((JVMFlagConstraintFunc_intx)func)(value, verbose);
}
void print_range_impl(outputStream* st, intx min, intx max) const {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | long | Old Value |
newValue | long | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
UnsignedLongFlagChanged
default profiling startTime 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlagAccess.cpp:
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, intx value, bool verbose) const {
return ((JVMFlagConstraintFunc_intx)func)(value, verbose);
}
void print_range_impl(outputStream* st, intx min, intx max) const {
st->print("[ " INTX_FORMAT_W(-25) " ... " INTX_FORMAT_W(25) " ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " INTX_FORMAT_W(-25) " ... " INTX_FORMAT_W(25) " ]", min_intx, max_intx);
}
};
class FlagAccessImpl_uintx : public RangedFlagAccessImpl<uintx, EventUnsignedLongFlagChanged> {
public:
void range_error(const char* name, uintx value, uintx min, uintx max, bool verbose) const {
JVMFlag::printError(verbose,
"uintx %s=" UINTX_FORMAT " is outside the allowed range "
"[ " UINTX_FORMAT " ... " UINTX_FORMAT " ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, uintx value, bool verbose) const {
return ((JVMFlagConstraintFunc_uintx)func)(value, verbose);
}
void print_range_impl(outputStream* st, uintx min, uintx max) const {
st->print("[ " UINTX_FORMAT_W(-25) " ... " UINTX_FORMAT_W(25) " ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " UINTX_FORMAT_W(-25) " ... " UINTX_FORMAT_W(25) " ]", uintx(0), max_uintx);
}
};
class FlagAccessImpl_uint64_t : public RangedFlagAccessImpl<uint64_t, EventUnsignedLongFlagChanged> {
public:
void range_error(const char* name, uint64_t value, uint64_t min, uint64_t max, bool verbose) const {
JVMFlag::printError(verbose,
"uint64_t %s=" UINT64_FORMAT " is outside the allowed range "
"[ " UINT64_FORMAT " ... " UINT64_FORMAT " ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, uint64_t value, bool verbose) const {
return ((JVMFlagConstraintFunc_uint64_t)func)(value, verbose);
}
void print_range_impl(outputStream* st, uint64_t min, uint64_t max) const {
st->print("[ " UINT64_FORMAT_W(-25) " ... " UINT64_FORMAT_W(25) " ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " UINT64_FORMAT_W(-25) " ... " UINT64_FORMAT_W(25) " ]", uint64_t(0), uint64_t(max_juint));
}
};
class FlagAccessImpl_size_t : public RangedFlagAccessImpl<size_t, EventUnsignedLongFlagChanged> {
public:
void range_error(const char* name, size_t value, size_t min, size_t max, bool verbose) const {
JVMFlag::printError(verbose,
"size_t %s=" SIZE_FORMAT " is outside the allowed range "
"[ " SIZE_FORMAT " ... " SIZE_FORMAT " ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, size_t value, bool verbose) const {
return ((JVMFlagConstraintFunc_size_t)func)(value, verbose);
}
void print_range_impl(outputStream* st, size_t min, size_t max) const {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | ulong | Old Value |
newValue | ulong | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
DoubleFlagChanged
default profiling startTime 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlagAccess.cpp:
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, size_t value, bool verbose) const {
return ((JVMFlagConstraintFunc_size_t)func)(value, verbose);
}
void print_range_impl(outputStream* st, size_t min, size_t max) const {
st->print("[ " SIZE_FORMAT_W(-25) " ... " SIZE_FORMAT_W(25) " ]", min, max);
}
void print_default_range(outputStream* st) const {
st->print("[ " SIZE_FORMAT_W(-25) " ... " SIZE_FORMAT_W(25) " ]", size_t(0), size_t(SIZE_MAX));
}
};
class FlagAccessImpl_double : public RangedFlagAccessImpl<double, EventDoubleFlagChanged> {
public:
void range_error(const char* name, double value, double min, double max, bool verbose) const {
JVMFlag::printError(verbose,
"double %s=%f is outside the allowed range "
"[ %f ... %f ]\n",
name, value, min, max);
}
JVMFlag::Error typed_check_constraint(void* func, double value, bool verbose) const {
return ((JVMFlagConstraintFunc_double)func)(value, verbose);
}
void print_range_impl(outputStream* st, double min, double max) const {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | double | Old Value |
newValue | double | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
BooleanFlagChanged
default profiling startTime 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlagAccess.cpp:
*((T*)value_addr) = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error check_constraint(const JVMFlag* flag, void * func, bool verbose) const {
return typed_check_constraint(func, flag->read<T>(), verbose);
}
virtual JVMFlag::Error typed_check_constraint(void * func, T value, bool verbose) const = 0;
};
class FlagAccessImpl_bool : public TypedFlagAccessImpl<bool, EventBooleanFlagChanged> {
public:
JVMFlag::Error set_impl(JVMFlag* flag, void* value_addr, JVMFlagOrigin origin) const {
bool verbose = JVMFlagLimit::verbose_checks_needed();
return TypedFlagAccessImpl<bool, EventBooleanFlagChanged>
::check_constraint_and_set(flag, value_addr, origin, verbose);
}
JVMFlag::Error typed_check_constraint(void* func, bool value, bool verbose) const {
return ((JVMFlagConstraintFunc_bool)func)(value, verbose);
}
};
template <typename T, typename EVENT>
class RangedFlagAccessImpl : public TypedFlagAccessImpl<T, EVENT> {
public:
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | boolean | Old Value |
newValue | boolean | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
StringFlagChanged
default profiling startTime 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlagAccess.cpp:
JVMFlag::Error JVMFlagAccess::set_impl(JVMFlag* flag, void* value, JVMFlagOrigin origin) {
if (flag->is_ccstr()) {
return set_ccstr(flag, (ccstr*)value, origin);
} else {
return access_impl(flag)->set(flag, value, origin);
}
}
JVMFlag::Error JVMFlagAccess::set_ccstr(JVMFlag* flag, ccstr* value, JVMFlagOrigin origin) {
if (flag == nullptr) 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 = nullptr;
if (*value != nullptr) {
new_value = os::strdup_check_oom(*value);
}
flag->set_ccstr(new_value);
if (!flag->is_default() && old_value != nullptr) {
// Old value is heap allocated so free it.
FREE_C_HEAP_ARRAY(char, old_value);
}
// Unlike the other APIs, the old value is NOT returned, so the caller won't need to free it.
// The callers typically don't care what the old value is.
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | string | Old Value |
newValue | string | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
IntFlag
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
value | int | Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
Examples 3
name | string | LockingMode
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773031042
|
value | int | 1
|
name | string | JavaPriority4_To_OSPriority
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 17899849625
|
value | int | -1
|
name | string | ThreadPriorityPolicy
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 364795708
|
value | int | 0
|
UnsignedIntFlag
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
value | uint | Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
Examples 3
name | string | ParallelGCBufferWastePct
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773035625
|
value | uint | 10
|
name | string | TypeProfileLevel
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 52082154500
|
value | uint | 111
|
name | string | GCCardSizeInBytes
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 78960122708
|
value | uint | 512
|
LongFlag
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
value | long | Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
Examples 3
name | string | Tier4MinInvocationThreshold
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773048042
|
value | long | 600
|
name | string | TraceLinearScanLevel
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 423468375
|
value | long | 0
|
name | string | ValueSearchLimit
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 364808667
|
value | long | 1000
|
UnsignedLongFlag
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
value | ulong | Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
Examples 3
name | string | TLABAllocationWeight
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 364826875
|
value | ulong | 35
|
name | string | TLABWasteIncrement
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 423583875
|
value | ulong | 4
|
name | string | G1MaxVerifyFailures
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773065958
|
value | ulong | -1
|
DoubleFlag
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
value | double | Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
Examples 3
name | string | ZCollectionInterval
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 75962783833
|
value | double | 0.0
|
name | string | InitialRAMPercentage
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 30586858625
|
value | double | 1.5625
|
name | string | G1PeriodicGCSystemLoadThreshold
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773069958
|
value | double | 0.0
|
BooleanFlag
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
value | boolean | Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
Examples 3
name | string | PrintOptoInlining
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 364843667
|
value | boolean | false
|
name | string | PinAllInstructions
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773076375
|
value | boolean | false
|
name | string | UseGlobalValueNumbering
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 423597500
|
value | boolean | true
|
StringFlag
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
value | string | Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
Examples 3
name | string | PerfDataSaveFile
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 40031309000
|
value | string | null
|
name | string | PerfDataSaveFile
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 17899931333
|
value | string | null
|
name | string | VitalsFile
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773199083
|
value | string | null
|
JVM: GC: Collector
GarbageCollection
default profiling startTime duration eventThread 11 17 21 23 24 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 23 24 graal vm
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 | 33
|
name | string | java/lang/Runtime
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 38514425792
|
invokedConcurrent | boolean | false
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 257
|
name | string | gc
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/Runtime
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 31427419583
|
invokedConcurrent | boolean | false
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 257
|
name | string | gc
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/Runtime
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 901201336000
|
ParallelOldGarbageCollection
default profiling startTime duration 11 17 21 23 24
Category: Java Virtual Machine / GC / Collector
Appearing in: ParallelGC
Missing in: G1GC, SerialGC, ShenandoahGC, ZGC
Extra information specific to Parallel Old Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_smallChunksTotalSize(summary.small_chunks_size_in_bytes());
e.set_mediumChunks(summary.num_medium_chunks());
e.set_mediumChunksTotalSize(summary.medium_chunks_size_in_bytes());
e.set_humongousChunks(summary.num_humongous_chunks());
e.set_humongousChunksTotalSize(summary.humongous_chunks_size_in_bytes());
e.commit();
}
}
void ParallelOldTracer::send_parallel_old_event() const {
EventParallelOldGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_densePrefix((TraceAddress)_parallel_old_gc_info.dense_prefix());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void YoungGCTracer::send_young_gc_event() const {
EventYoungGarbageCollection e(UNTIMED);
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
densePrefix | ulong: address | Dense Prefix The address of the dense prefix, used when compacting |
YoungGarbageCollection
default profiling startTime duration 11 17 21 23 24
Category: Java Virtual Machine / GC / Collector
Appearing in: G1GC, ParallelGC, SerialGC
Missing in: ShenandoahGC, ZGC
Extra information specific to Young Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
void ParallelOldTracer::send_parallel_old_event() const {
EventParallelOldGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_densePrefix((TraceAddress)_parallel_old_gc_info.dense_prefix());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void YoungGCTracer::send_young_gc_event() const {
EventYoungGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_tenuringThreshold(_tenuring_threshold);
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
bool YoungGCTracer::should_send_promotion_in_new_plab_event() const {
return EventPromoteObjectInNewPLAB::is_enabled();
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
tenuringThreshold | uint | Tenuring Threshold |
OldGarbageCollection
default profiling startTime duration 11 17 21 23 24
Category: Java Virtual Machine / GC / Collector
Appearing in: G1GC, ParallelGC, SerialGC
Missing in: ShenandoahGC, ZGC
Extra information specific to Old Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
EventPromoteObjectOutsidePLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.commit();
}
}
void OldGCTracer::send_old_gc_event() const {
EventOldGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
static JfrStructCopyFailed to_struct(const CopyFailedInfo& cf_info) {
JfrStructCopyFailed failed_info;
failed_info.set_objectCount(cf_info.failed_count());
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
G1GarbageCollection
default profiling startTime duration 11 17 21 23 24
Category: Java Virtual Machine / GC / Collector
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Extra information specific to G1 Young Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
send_adaptive_ihop_statistics(threshold,
internal_target_occupancy,
current_occupancy,
additional_buffer_size,
predicted_allocation_rate,
predicted_marking_length,
prediction_active);
}
void G1NewTracer::send_g1_young_gc_event() {
// Check that the pause type has been updated to something valid for this event.
G1GCPauseTypeHelper::assert_is_young_pause(_pause);
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type(static_cast<uint>(_pause));
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void G1NewTracer::send_evacuation_info_event(G1EvacInfo* info) {
EventEvacuationInformation e;
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
type | G1YCType | Type Consider contributing a description to jfreventcollector. |
ZYoungGarbageCollection
default profiling startTime duration eventThread 21 23 24
Category: Java Virtual Machine / GC / Collector
Extra information specific to ZGC Young Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zTracer.cpp:
ZMinorTracer::ZMinorTracer()
: GCTracer(ZMinor) {}
ZMajorTracer::ZMajorTracer()
: GCTracer(ZMajor) {}
void ZGenerationTracer::report_start(const Ticks& timestamp) {
_start = timestamp;
}
void ZYoungTracer::report_end(const Ticks& timestamp) {
NoSafepointVerifier nsv;
EventZYoungGarbageCollection e(UNTIMED);
e.set_gcId(GCId::current());
e.set_tenuringThreshold(ZGeneration::young()->tenuring_threshold());
e.set_starttime(_start);
e.set_endtime(timestamp);
e.commit();
}
void ZOldTracer::report_end(const Ticks& timestamp) {
NoSafepointVerifier nsv;
EventZOldGarbageCollection e(UNTIMED);
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
tenuringThreshold | uint | Tenuring Threshold |
ZOldGarbageCollection
default profiling startTime duration eventThread 21 23 24
Category: Java Virtual Machine / GC / Collector
Extra information specific to ZGC Old Garbage Collections
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zTracer.cpp:
NoSafepointVerifier nsv;
EventZYoungGarbageCollection e(UNTIMED);
e.set_gcId(GCId::current());
e.set_tenuringThreshold(ZGeneration::young()->tenuring_threshold());
e.set_starttime(_start);
e.set_endtime(timestamp);
e.commit();
}
void ZOldTracer::report_end(const Ticks& timestamp) {
NoSafepointVerifier nsv;
EventZOldGarbageCollection e(UNTIMED);
e.set_gcId(GCId::current());
e.set_starttime(_start);
e.set_endtime(timestamp);
e.commit();
}
void ZTracer::initialize() {
JFR_ONLY(register_jfr_type_serializers();)
}
void ZTracer::send_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
JVM: GC: Configuration
GCConfiguration
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / GC / Configuration
The configuration of the garbage collector
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(G1HeapRegionInformation) {
G1GC_ONLY(G1HeapRegionEventSender::send_events());
}
// Java Mission Control (JMC) uses (Java) Long.MIN_VALUE to describe that a
// long value is undefined.
static jlong jmc_undefined_long = min_jlong;
TRACE_REQUEST_FUNC(GCConfiguration) {
GCConfiguration conf;
jlong pause_target = conf.has_pause_target_default_value() ? jmc_undefined_long : conf.pause_target();
EventGCConfiguration event;
event.set_youngCollector(conf.young_collector());
event.set_oldCollector(conf.old_collector());
event.set_parallelGCThreads(conf.num_parallel_gc_threads());
event.set_concurrentGCThreads(conf.num_concurrent_gc_threads());
event.set_usesDynamicGCThreads(conf.uses_dynamic_gc_threads());
event.set_isExplicitGCConcurrent(conf.is_explicit_gc_concurrent());
event.set_isExplicitGCDisabled(conf.is_explicit_gc_disabled());
event.set_gcTimeRatio(static_cast<unsigned int>(conf.gc_time_ratio()));
event.set_pauseTarget((s8)pause_target);
event.commit();
}
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
youngCollector | GCName | Young Garbage Collector The garbage collector used for the young generation |
oldCollector | GCName | Old Garbage Collector The garbage collector used for the old generation |
parallelGCThreads | uint | Parallel GC Threads Number of parallel threads to use for garbage collection |
concurrentGCThreads | uint | Concurrent GC Threads Number of concurrent threads to use for garbage collection |
usesDynamicGCThreads | boolean | Uses Dynamic GC Threads Whether a dynamic number of GC threads are used or not |
isExplicitGCConcurrent | boolean | Concurrent Explicit GC Whether System.gc() is concurrent or not |
isExplicitGCDisabled | boolean | Disabled Explicit GC Whether System.gc() will cause a garbage collection or not |
pauseTarget | long: millis | Pause Target Target for GC pauses |
gcTimeRatio | uint | GC Time Ratio Target for runtime vs garbage collection time |
Examples 3
concurrentGCThreads | uint | 0
|
---|---|---|
gcTimeRatio | uint | 99
|
isExplicitGCConcurrent | boolean | false
|
isExplicitGCDisabled | boolean | false
|
oldCollector | GCName | SerialOld
|
parallelGCThreads | uint | 0
|
pauseTarget | long: millis | -9223372036854775808
|
startTime | long: millis | 15621221667
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | DefNew
|
concurrentGCThreads | uint | 0
|
---|---|---|
gcTimeRatio | uint | 99
|
isExplicitGCConcurrent | boolean | false
|
isExplicitGCDisabled | boolean | false
|
oldCollector | GCName | ParallelOld
|
parallelGCThreads | uint | 8
|
pauseTarget | long: millis | -9223372036854775808
|
startTime | long: millis | 60476331583
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | ParallelScavenge
|
concurrentGCThreads | uint | 2
|
---|---|---|
gcTimeRatio | uint | 12
|
isExplicitGCConcurrent | boolean | false
|
isExplicitGCDisabled | boolean | false
|
oldCollector | GCName | G1Old
|
parallelGCThreads | uint | 8
|
pauseTarget | long: millis | -9223372036854775808
|
startTime | long: millis | 914473073667
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | G1New
|
GCSurvivorConfiguration
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / GC / Configuration
The configuration of the survivors of garbage collection
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(GCTLABConfiguration) {
GCTLABConfiguration conf;
EventGCTLABConfiguration event;
event.set_usesTLABs(conf.uses_tlabs());
event.set_minTLABSize(conf.min_tlab_size());
event.set_tlabRefillWasteLimit(conf.tlab_refill_waste_limit());
event.commit();
}
TRACE_REQUEST_FUNC(GCSurvivorConfiguration) {
GCSurvivorConfiguration conf;
EventGCSurvivorConfiguration event;
event.set_maxTenuringThreshold(static_cast<u1>(conf.max_tenuring_threshold()));
event.set_initialTenuringThreshold(static_cast<u1>(conf.initial_tenuring_threshold()));
event.commit();
}
TRACE_REQUEST_FUNC(GCHeapConfiguration) {
GCHeapConfiguration conf;
EventGCHeapConfiguration event;
event.set_minSize(conf.min_size());
event.set_maxSize(conf.max_size());
event.set_initialSize(conf.initial_size());
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
maxTenuringThreshold | ubyte | Maximum Tenuring Threshold Upper limit for the age of how old objects to keep in the survivor area |
initialTenuringThreshold | ubyte | Initial Tenuring Threshold Initial age limit for how old objects to keep in survivor area |
Examples 3
GCTLABConfiguration
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / GC / Configuration
The configuration of the Thread Local Allocation Buffers (TLABs)
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_oldCollector(conf.old_collector());
event.set_parallelGCThreads(conf.num_parallel_gc_threads());
event.set_concurrentGCThreads(conf.num_concurrent_gc_threads());
event.set_usesDynamicGCThreads(conf.uses_dynamic_gc_threads());
event.set_isExplicitGCConcurrent(conf.is_explicit_gc_concurrent());
event.set_isExplicitGCDisabled(conf.is_explicit_gc_disabled());
event.set_gcTimeRatio(static_cast<unsigned int>(conf.gc_time_ratio()));
event.set_pauseTarget((s8)pause_target);
event.commit();
}
TRACE_REQUEST_FUNC(GCTLABConfiguration) {
GCTLABConfiguration conf;
EventGCTLABConfiguration event;
event.set_usesTLABs(conf.uses_tlabs());
event.set_minTLABSize(conf.min_tlab_size());
event.set_tlabRefillWasteLimit(conf.tlab_refill_waste_limit());
event.commit();
}
TRACE_REQUEST_FUNC(GCSurvivorConfiguration) {
GCSurvivorConfiguration conf;
EventGCSurvivorConfiguration event;
event.set_maxTenuringThreshold(static_cast<u1>(conf.max_tenuring_threshold()));
event.set_initialTenuringThreshold(static_cast<u1>(conf.initial_tenuring_threshold()));
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
usesTLABs | boolean | TLABs Used If Thread Local Allocation Buffers (TLABs) are in use |
minTLABSize | ulong: bytes | Minimum TLAB Size |
tlabRefillWasteLimit | ulong: bytes | TLAB Refill Waste Limit |
Examples 3
GCHeapConfiguration
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / GC / Configuration
The configuration of the garbage collected heap
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.commit();
}
TRACE_REQUEST_FUNC(GCSurvivorConfiguration) {
GCSurvivorConfiguration conf;
EventGCSurvivorConfiguration event;
event.set_maxTenuringThreshold(static_cast<u1>(conf.max_tenuring_threshold()));
event.set_initialTenuringThreshold(static_cast<u1>(conf.initial_tenuring_threshold()));
event.commit();
}
TRACE_REQUEST_FUNC(GCHeapConfiguration) {
GCHeapConfiguration conf;
EventGCHeapConfiguration event;
event.set_minSize(conf.min_size());
event.set_maxSize(conf.max_size());
event.set_initialSize(conf.initial_size());
event.set_usesCompressedOops(conf.uses_compressed_oops());
event.set_compressedOopsMode(conf.narrow_oop_mode());
event.set_objectAlignment(conf.object_alignment_in_bytes());
event.set_heapAddressBits(static_cast<u1>(conf.heap_address_size_in_bits()));
event.commit();
}
TRACE_REQUEST_FUNC(YoungGenerationConfiguration) {
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
minSize | ulong: bytes | Minimum Heap Size |
maxSize | ulong: bytes | Maximum Heap Size |
initialSize | ulong: bytes | Initial Heap Size |
usesCompressedOops | boolean | If Compressed Oops Are Used If compressed Oops (Ordinary Object Pointers) are enabled |
compressedOopsMode | NarrowOopMode | Compressed Oops Mode The kind of compressed oops being used |
objectAlignment | ulong: bytes | Object Alignment Object alignment (in bytes) on the heap |
heapAddressBits | ubyte | Heap Address Size Heap Address Size (in bits) |
Examples 3
YoungGenerationConfiguration
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / GC / Configuration
The configuration of the young generation of the garbage collected heap
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_minSize(conf.min_size());
event.set_maxSize(conf.max_size());
event.set_initialSize(conf.initial_size());
event.set_usesCompressedOops(conf.uses_compressed_oops());
event.set_compressedOopsMode(conf.narrow_oop_mode());
event.set_objectAlignment(conf.object_alignment_in_bytes());
event.set_heapAddressBits(static_cast<u1>(conf.heap_address_size_in_bits()));
event.commit();
}
TRACE_REQUEST_FUNC(YoungGenerationConfiguration) {
GCYoungGenerationConfiguration conf;
jlong max_size = conf.has_max_size_default_value() ? jmc_undefined_long : conf.max_size();
EventYoungGenerationConfiguration event;
event.set_maxSize((u8)max_size);
event.set_minSize(conf.min_size());
event.set_newRatio(static_cast<unsigned int>(conf.new_ratio()));
event.commit();
}
TRACE_REQUEST_FUNC(InitialSystemProperty) {
SystemProperty* p = Arguments::system_properties();
JfrTicks time_stamp = JfrTicks::now();
while (p != nullptr) {
if (!p->internal()) {
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
minSize | ulong: bytes | Minimum Young Generation Size |
maxSize | ulong: bytes | Maximum Young Generation Size |
newRatio | uint | New Ratio The size of the young generation relative to the tenured generation |
Examples 3
JVM: GC: Detailed
ZThreadDebug
internal startTime duration eventThread 18 21 23 24
Category: Java Virtual Machine / GC / Detailed
Temporary latency measurements used during development and debugging of ZGC
Only valid for the ZGC.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/x/xTracer.inline.hpp:
inline void XTracer::report_stat_sampler(const XStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void XTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadPhase::is_enabled()) {
send_thread_phase(name, start, end);
}
}
inline void XTracer::report_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadDebug::is_enabled()) {
send_thread_debug(name, start, end);
}
}
inline XTraceThreadDebug::XTraceThreadDebug(const char* name) :
_start(Ticks::now()),
_name(name) {}
inline XTraceThreadDebug::~XTraceThreadDebug() {
XTracer::tracer()->report_thread_debug(_name, _start, Ticks::now());
}
src/hotspot/share/gc/x/xTracer.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 XTracer::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::report_thread_debug(_name, _start, Ticks::now());
}
src/hotspot/share/gc/z/zTracer.cpp:
NoSafepointVerifier nsv;
EventZThreadPhase e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current_or_undefined());
e.set_name(name);
e.set_starttime(start);
e.set_endtime(end);
e.commit();
}
}
void ZTracer::send_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
NoSafepointVerifier nsv;
EventZThreadDebug e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current_or_undefined());
e.set_name(name);
e.set_starttime(start);
e.set_endtime(end);
e.commit();
}
}
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name The name of the GC runner |
G1MMU
default profiling startTime 11 17 21 23 24
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
void G1OldTracer::report_gc_start_impl(GCCause::Cause cause, const Ticks& timestamp) {
_shared_gc_info.set_start_timestamp(timestamp);
}
void G1OldTracer::set_gc_cause(GCCause::Cause cause) {
_shared_gc_info.set_cause(cause);
}
void G1MMUTracer::report_mmu(double time_slice_sec, double gc_time_sec, double max_time_sec) {
send_g1_mmu_event(time_slice_sec * MILLIUNITS,
gc_time_sec * MILLIUNITS,
max_time_sec * MILLIUNITS);
}
void G1MMUTracer::send_g1_mmu_event(double time_slice_ms, double gc_time_ms, double max_time_ms) {
EventG1MMU e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_timeSlice(time_slice_ms);
e.set_gcTime(gc_time_ms);
e.set_pauseTarget(max_time_ms);
e.commit();
}
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
timeSlice | long: millis | Time Slice Time slice used to calculate MMU |
gcTime | long: millis | GC Time Time stopped because of GC during last time slice |
pauseTarget | long: millis | Pause Target Max time allowed to be spent on GC during last time slice |
EvacuationInformation
default profiling startTime 11 17 21 23 24
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
G1GCPauseTypeHelper::assert_is_young_pause(_pause);
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type(static_cast<uint>(_pause));
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void G1NewTracer::send_evacuation_info_event(G1EvacInfo* info) {
EventEvacuationInformation e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_cSetRegions(info->collection_set_regions());
e.set_cSetUsedBefore(info->collection_set_used_before());
e.set_cSetUsedAfter(info->collection_set_used_after());
e.set_allocationRegions(info->allocation_regions());
e.set_allocationRegionsUsedBefore(info->alloc_regions_used_before());
e.set_allocationRegionsUsedAfter(info->alloc_regions_used_before() + info->bytes_used());
e.set_bytesCopied(info->bytes_used());
e.set_regionsFreed(info->regions_freed());
e.commit();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
cSetRegions | uint | Collection Set Regions |
cSetUsedBefore | ulong: bytes | Collection Set Before Memory usage before GC in the collection set regions |
cSetUsedAfter | ulong: bytes | Collection Set After Memory usage after GC in the collection set regions |
allocationRegions | uint | Allocation Regions Regions chosen as allocation regions during evacuation (includes survivors and old space regions) |
allocationRegionsUsedBefore | ulong: bytes | Allocation Regions Before Memory usage before GC in allocation regions |
allocationRegionsUsedAfter | ulong: bytes | Allocation Regions After Memory usage after GC in allocation regions |
bytesCopied | ulong: bytes | Bytes Copied |
regionsFreed | uint | Regions Freed |
Examples 1
allocationRegions | uint | 2
|
---|---|---|
allocationRegionsUsedAfter | ulong: bytes | 3012768
|
allocationRegionsUsedBefore | ulong: bytes | 0
|
bytesCopied | ulong: bytes | 3012768
|
cSetRegions | uint | 222
|
cSetUsedAfter | ulong: bytes | 0
|
cSetUsedBefore | ulong: bytes | 465117072
|
gcId | uint | 906
|
regionsFreed | uint | 222
|
startTime | long: millis | 847094417833
|
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 | 82683
|
---|---|---|
gcId | uint | 872
|
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 | 22
|
name | string | java/util
|
startTime | long: millis | 800281069667
|
totalSize | ulong: bytes | 2645856
|
count | long | 538
|
---|---|---|
gcId | uint | 0
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | [Ljava/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.1
|
name | string | java/lang
|
startTime | long: millis | 372286000
|
totalSize | ulong: bytes | 24560
|
G1EvacuationYoungStatistics
default profiling startTime 11 17 21 23 24
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 | 890834819792
|
---|---|---|
statistics | G1EvacuationStatistics | |
allocated | ulong: bytes | 966048
|
directAllocated | ulong: bytes | 105808
|
failureUsed | ulong: bytes | 0
|
failureWaste | ulong: bytes | 0
|
gcId | uint | 962
|
numDirectAllocated | ulong | 5
|
numPlabsFilled | ulong | 6652858312
|
regionEndWaste | ulong: bytes | 0
|
regionsRefilled | uint | 1
|
undoWaste | ulong: bytes | 0
|
used | ulong: bytes | 895552
|
wasted | ulong: bytes | 4848
|
G1EvacuationOldStatistics
default profiling startTime 11 17 21 23 24
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 | 879104354208
|
---|---|---|
statistics | G1EvacuationStatistics | |
allocated | ulong: bytes | 0
|
directAllocated | ulong: bytes | 0
|
failureUsed | ulong: bytes | 0
|
failureWaste | ulong: bytes | 0
|
gcId | uint | 939
|
numDirectAllocated | ulong | 6115354792
|
numPlabsFilled | ulong | 0
|
regionEndWaste | ulong: bytes | 0
|
regionsRefilled | uint | 0
|
undoWaste | ulong: bytes | 0
|
used | ulong: bytes | 0
|
wasted | ulong: bytes | 0
|
G1BasicIHOP
default profiling startTime 11 17 21 23 24
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 | 287825736
|
---|---|---|
gcId | uint | 887
|
lastMarkingDuration | long: millis | 3252
|
recentAllocationRate | double: bytes-per-second | 0.0
|
recentMutatorAllocationSize | ulong: bytes | 0
|
recentMutatorDuration | long: millis | 13
|
startTime | long: millis | 833419018167
|
targetOccupancy | ulong: bytes | 979369984
|
threshold | ulong: bytes | 0
|
thresholdPercentage | float: percentage | 0.0
|
G1AdaptiveIHOP
default profiling startTime 11 17 21 23 24
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 | 536870912
|
---|---|---|
currentOccupancy | ulong: bytes | 284603544
|
gcId | uint | 994
|
ihopTargetOccupancy | ulong: bytes | 850709708
|
predictedAllocationRate | double: bytes-per-second | 9.015273664295086E7
|
predictedMarkingDuration | long: millis | 3705
|
predictionActive | boolean | true
|
startTime | long: millis | 933507158708
|
threshold | ulong: bytes | 0
|
thresholdPercentage | float: percentage | 0.0
|
PromoteObjectInNewPLAB
profiling startTime eventThread 11 17 21 23 24
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 | 865
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1041
|
name | string | [F
|
package | Package | null
|
objectSize | ulong: bytes | 56
|
plabSize | ulong: bytes | 16512
|
startTime | long: millis | 792216016292
|
tenured | boolean | false
|
tenuringAge | uint | 0
|
PromoteObjectOutsidePLAB
profiling startTime eventThread 11 17 21 23 24
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
gcId | uint | 4
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | [Ljava/lang/Object;
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
objectSize | ulong: bytes | 524304
|
startTime | long: millis | 1106122708
|
tenured | boolean | false
|
tenuringAge | uint | 0
|
gcId | uint | 898
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1041
|
name | string | [Ljava/lang/Object;
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/lang
|
objectSize | ulong: bytes | 11280
|
startTime | long: millis | 842426532792
|
tenured | boolean | false
|
tenuringAge | uint | 0
|
PromotionFailed
default profiling startTime 11 17 21 23 24
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 23 24
Category: Java Virtual Machine / GC / Detailed
Evacuation of an object failed
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/g1/g1Trace.cpp:
e.set_cSetRegions(info->collection_set_regions());
e.set_cSetUsedBefore(info->collection_set_used_before());
e.set_cSetUsedAfter(info->collection_set_used_after());
e.set_allocationRegions(info->allocation_regions());
e.set_allocationRegionsUsedBefore(info->alloc_regions_used_before());
e.set_allocationRegionsUsedAfter(info->alloc_regions_used_before() + info->bytes_used());
e.set_bytesCopied(info->bytes_used());
e.set_regionsFreed(info->regions_freed());
e.commit();
}
}
void G1NewTracer::send_evacuation_failed_event(const EvacuationFailedInfo& ef_info) const {
EventEvacuationFailed e;
if (e.should_commit()) {
// Create JFR structured failure data
JfrStructCopyFailed evac_failed;
evac_failed.set_objectCount(ef_info.failed_count());
evac_failed.set_firstSize(ef_info.first_size() * HeapWordSize);
evac_failed.set_smallestSize(ef_info.smallest_size() * HeapWordSize);
evac_failed.set_totalSize(ef_info.total_size() * HeapWordSize);
// Add to the event
e.set_gcId(GCId::current());
e.set_evacuationFailed(evac_failed);
e.commit();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
evacuationFailed | CopyFailed struct | Evacuation Failed Data |
ConcurrentModeFailure
default profiling startTime 11 17 21 23 24
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 |
GCCPUTime
default profiling startTime 17 21 23 24
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 23 24 graal vm
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 | 4
|
---|---|---|
size | ulong: bytes | 88
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | 1101
|
method | Method | |
descriptor | string | (Ljava/lang/String;)Ljava/util/regex/Pattern;
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | compile
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | java/util/regex/Pattern
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util/regex
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 1128403708
|
gcId | uint | 63
|
---|---|---|
size | ulong: bytes | 24
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 5
|
lineNumber | int | 483
|
method | Method | |
descriptor | string | (Lcom/twitter/util/Future;)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 | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | com/twitter/util/Promise
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | com/twitter/util
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 42081410875
|
gcId | uint | 916
|
---|---|---|
size | ulong: bytes | 1048576
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 33
|
lineNumber | int | 16
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | scala/concurrent/stm/ccstm/RetrySetBuilder
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/concurrent/stm/ccstm
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 854442596750
|
TenuringDistribution
default profiling startTime 11 17 21 23 24
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 |
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/g1HeapRegionTracer.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 | 201
|
start | ulong: address | 30486298624
|
startTime | long: millis | 791919068875
|
to | G1HeapRegionType | Free
|
used | ulong: bytes | 0
|
ObjectCount
startTime every chunk 11 17 21 23 24
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC, ParallelGC, SerialGC
Missing in: ShenandoahGC, ZGC
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/objectCountEventSender.cpp:
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 | 2191
|
---|---|---|
gcId | uint | 1
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 48
|
name | string | java/util/ImmutableCollections$List12
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
startTime | long: millis | 431274583
|
totalSize | ulong: bytes | 52584
|
count | long | 1691
|
---|---|---|
gcId | uint | 37
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | [Ljava/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.1
|
name | string | java/util
|
startTime | long: millis | 3927158333
|
totalSize | ulong: bytes | 2292568
|
G1HeapRegionInformation
startTime duration every chunk 11 17 21 23 24
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(G1HeapRegion* r) {
EventG1HeapRegionInformation evt;
evt.set_index(r->hrm_index());
evt.set_type(r->get_trace_type());
evt.set_start((uintptr_t)r->bottom());
evt.set_used(r->used());
evt.commit();
return false;
}
};
class VM_G1SendHeapRegionInfoEvents : public VM_Operation {
virtual void doit() {
DumpEventInfoClosure c;
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 |
ZAllocationStall
default profiling startTime duration eventThread stackTrace 15 17 21 23 24
Category: Java Virtual Machine / GC / Detailed
Appearing in: ZGC
Missing in: G1GC, ParallelGC, SerialGC, ShenandoahGC
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/x/xPageAllocator.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 XPageAllocator::alloc_page_stall(XPageAllocation* allocation) {
XStatTimer timer(XCriticalPhaseAllocationStall);
EventZAllocationStall event;
XPageAllocationStall 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
XCollectedHeap::heap()->collect(GCCause::_z_allocation_stall);
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;
// We can only block if the VM is fully initialized
check_out_of_memory_during_initialization();
// Start asynchronous minor GC
const ZDriverRequest request(GCCause::_z_allocation_stall, ZYoungGCThreads, 0);
ZDriver::minor()->collect(request);
// Wait for allocation to complete or fail
const bool result = allocation->wait();
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true 17+ | 0 ms |
profiling | true | true 17+ | 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 23 24
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/x/xPageAllocator.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();
}
XPage* XPageAllocator::alloc_page(uint8_t type, size_t size, XAllocationFlags flags) {
EventZPageAllocation event;
retry:
XPageAllocation 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
src/hotspot/share/gc/z/zPageAllocator.cpp:
// so that it will be re-inserted into the page cache.
ZPage* const committed_page = page->split_committed();
destroy_page(page);
if (committed_page != nullptr) {
map_page(committed_page);
allocation->pages()->insert_last(committed_page);
}
return nullptr;
}
ZPage* ZPageAllocator::alloc_page(ZPageType type, size_t size, ZAllocationFlags flags, ZPageAge age) {
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 15+ | Flushed |
committed | ulong: bytes 15+ | Committed |
segments | uint 15+ | 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 | 51
|
lineNumber | int | 691
|
method | Method | |
descriptor | string | (Lscala/collection/immutable/RedBlackTree$Tree;)Lscala/collection/immutable/RedBlackTree$Tree;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | withRight
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | scala/collection/immutable/RedBlackTree$Tree
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/collection/immutable
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 14958867166
|
type | ZPageTypeType | Small
|
ZRelocationSet
default profiling startTime duration eventThread 15 17 21 23 24
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(double fragmentation_limit)
: _small("Small", ZPageType::small, ZPageSizeSmall, ZObjectSizeLimitSmall, fragmentation_limit),
_medium("Medium", ZPageType::medium, ZPageSizeMedium, ZObjectSizeLimitMedium, fragmentation_limit),
_large("Large", ZPageType::large, 0 /* page_size */, 0 /* object_size_limit */, fragmentation_limit),
_empty_pages() {}
void ZRelocationSetSelector::select() {
// Select pages to relocate. The resulting relocation set will be
// sorted such that medium pages comes first, followed by small
// pages. Pages within each page group will be semi-sorted by live
// bytes in ascending order. Relocating pages in this order allows
// us to start reclaiming memory more quickly.
EventZRelocationSet event;
// Select pages from each group
_large.select();
_medium.select();
_small.select();
// Send event
event.commit(total(), empty(), relocate());
}
ZRelocationSetSelectorStats ZRelocationSetSelector::stats() const {
src/hotspot/share/gc/x/xRelocationSetSelector.cpp:
XRelocationSetSelector::XRelocationSetSelector() :
_small("Small", XPageTypeSmall, XPageSizeSmall, XObjectSizeLimitSmall),
_medium("Medium", XPageTypeMedium, XPageSizeMedium, XObjectSizeLimitMedium),
_large("Large", XPageTypeLarge, 0 /* page_size */, 0 /* object_size_limit */),
_empty_pages() {}
void XRelocationSetSelector::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());
}
XRelocationSetSelectorStats XRelocationSetSelector::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 |
ZRelocationSetGroup
default profiling startTime duration eventThread 15 17 21 23 24
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:
_stats[i]._relocate = selected_live_bytes[i];
_stats[i]._npages_selected = npages_selected[i];
}
log_debug(gc, reloc)("Relocation Set (%s Pages): %d->%d, %d skipped, " 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();
} else {
// Mark pages as not selected
const int npages = _live_pages.length();
for (int from = 1; from <= npages; from++) {
ZPage* const page = _live_pages.at(from - 1);
_not_selected_pages.append(page);
}
}
src/hotspot/share/gc/x/xRelocationSetSelector.cpp:
// Update statistics
_stats._relocate = selected_live_bytes;
_stats._npages_selected = npages_selected;
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 XRelocationSetSelectorGroup::select() {
if (is_disabled()) {
return;
}
EventZRelocationSetGroup event;
if (is_selectable()) {
select_inner();
}
// Send event
event.commit(_page_type, _stats.npages_candidates(), _stats.total(), _stats.empty(), _stats.npages_selected(), _stats.relocate());
}
XRelocationSetSelector::XRelocationSetSelector() :
_small("Small", XPageTypeSmall, XPageSizeSmall, XObjectSizeLimitSmall),
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
type | ZPageTypeType | Type Consider contributing a description to jfreventcollector. |
candidatePages | ulong 21+ | Candidate Pages |
total | ulong: bytes | Total |
empty | ulong: bytes | Empty |
selectedPages | ulong 21+ | Selected Pages |
relocate | ulong: bytes 16+ | Relocate |
ZStatisticsCounter
experimental startTime duration eventThread 11 17 21 23 24
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/x/xTracer.inline.hpp:
#ifndef SHARE_GC_X_XTRACER_INLINE_HPP
#define SHARE_GC_X_XTRACER_INLINE_HPP
#include "gc/x/xTracer.hpp"
#include "jfr/jfrEvents.hpp"
inline XTracer* XTracer::tracer() {
return _tracer;
}
inline void XTracer::report_stat_counter(const XStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void XTracer::report_stat_sampler(const XStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void XTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
src/hotspot/share/gc/x/xTracer.cpp:
XTracer::XTracer() :
GCTracer(Z) {}
void XTracer::initialize() {
assert(_tracer == nullptr, "Already initialized");
_tracer = new XTracer();
JFR_ONLY(register_jfr_type_serializers();)
}
void XTracer::send_stat_counter(const XStatCounter& 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 XTracer::send_stat_sampler(const XStatSampler& 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 void ZTracer::report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void ZTracer::report_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadPhase::is_enabled()) {
send_thread_phase(name, start, end);
}
}
src/hotspot/share/gc/z/zTracer.cpp:
e.set_gcId(GCId::current());
e.set_starttime(_start);
e.set_endtime(timestamp);
e.commit();
}
void ZTracer::initialize() {
JFR_ONLY(register_jfr_type_serializers();)
}
void ZTracer::send_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
NoSafepointVerifier nsv;
EventZStatisticsCounter e;
if (e.should_commit()) {
e.set_id(counter.id());
e.set_increment(increment);
e.set_value(value);
e.commit();
}
}
void ZTracer::send_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
NoSafepointVerifier nsv;
Configuration | enabled | threshold |
---|---|---|
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 |
ZStatisticsSampler
experimental startTime duration eventThread 11 17 21 23 24
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/x/xTracer.inline.hpp:
inline XTracer* XTracer::tracer() {
return _tracer;
}
inline void XTracer::report_stat_counter(const XStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void XTracer::report_stat_sampler(const XStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void XTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadPhase::is_enabled()) {
send_thread_phase(name, start, end);
}
}
inline void XTracer::report_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
src/hotspot/share/gc/x/xTracer.cpp:
EventZStatisticsCounter e;
if (e.should_commit()) {
e.set_id(counter.id());
e.set_increment(increment);
e.set_value(value);
e.commit();
}
}
void XTracer::send_stat_sampler(const XStatSampler& sampler, uint64_t value) {
NoSafepointVerifier nsv;
EventZStatisticsSampler e;
if (e.should_commit()) {
e.set_id(sampler.id());
e.set_value(value);
e.commit();
}
}
void XTracer::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:
#define SHARE_GC_Z_ZTRACER_INLINE_HPP
#include "gc/z/zTracer.hpp"
#include "jfr/jfrEvents.hpp"
inline void ZTracer::report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void ZTracer::report_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadPhase::is_enabled()) {
send_thread_phase(name, start, end);
}
}
inline void ZTracer::report_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
src/hotspot/share/gc/z/zTracer.cpp:
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);
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 Roots ClassLoaderDataGraph
|
---|---|---|
startTime | long: millis | 331553375
|
value | ulong | 68208
|
ZThreadPhase
experimental startTime duration eventThread 11 17 21 23 24
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/x/xTracer.inline.hpp:
inline void XTracer::report_stat_counter(const XStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void XTracer::report_stat_sampler(const XStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void XTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadPhase::is_enabled()) {
send_thread_phase(name, start, end);
}
}
inline void XTracer::report_thread_debug(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadDebug::is_enabled()) {
send_thread_debug(name, start, end);
}
}
inline XTraceThreadDebug::XTraceThreadDebug(const char* name) :
src/hotspot/share/gc/x/xTracer.cpp:
NoSafepointVerifier nsv;
EventZStatisticsSampler e;
if (e.should_commit()) {
e.set_id(sampler.id());
e.set_value(value);
e.commit();
}
}
void XTracer::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 XTracer::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)
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;
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
ZUncommit
default profiling startTime duration eventThread 15 17 21 23 24
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/x/xUncommitter.cpp:
bool XUncommitter::should_continue() const {
XLocker<XConditionLock> locker(&_lock);
return !_stop;
}
void XUncommitter::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;
src/hotspot/share/gc/z/zUncommitter.cpp:
bool ZUncommitter::should_continue() const {
ZLocker<ZConditionLock> locker(&_lock);
return !_stop;
}
void ZUncommitter::run_thread() {
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 15 17 21 23 24
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/x/xUnmapper.cpp:
size_t XUnmapper::queue_capacity() const {
return align_up<size_t>(_page_allocator->max_capacity() * ZAsyncUnmappingLimit / 100.0, XGranuleSize);
}
bool XUnmapper::is_saturated() const {
return _enqueued_bytes >= queue_capacity();
}
void XUnmapper::do_unmap_and_destroy_page(XPage* 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 XUnmapper::unmap_and_destroy_page(XPage* page) {
src/hotspot/share/gc/z/zUnmapper.cpp:
size_t ZUnmapper::queue_capacity() const {
return align_up<size_t>(_page_allocator->max_capacity() * ZAsyncUnmappingLimit / 100.0, ZGranuleSize);
}
bool ZUnmapper::is_saturated() const {
return _enqueued_bytes >= queue_capacity();
}
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 |
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 | Empty Committed
|
---|---|---|
index | uint | 17
|
start | ulong: address | 30100422656
|
startTime | long: millis | 393123292
|
to | ShenandoahHeapRegionState | Regular
|
used | ulong: bytes | 0
|
ShenandoahHeapRegionInformation
startTime duration every chunk 11 17 21 23 24
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 23 24
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 23 24 graal vm
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 | 867
|
---|---|---|
heapSpace | VirtualSpace | |
committedEnd | ulong: address | 31037849600
|
committedSize | ulong: bytes | 973078528
|
reservedEnd | ulong: address | 34359738368
|
reservedSize | ulong: bytes | 4294967296
|
start | ulong: address | 30064771072
|
heapUsed | ulong: bytes | 437090872
|
startTime | long: millis | 795762300792
|
when | GCWhen | Before GC
|
gcId | uint | 46
|
---|---|---|
heapSpace | VirtualSpace | |
committedEnd | ulong: address | 30324359168
|
committedSize | ulong: bytes | 259588096
|
reservedEnd | ulong: address | 34359738368
|
reservedSize | ulong: bytes | 4294967296
|
start | ulong: address | 30064771072
|
heapUsed | ulong: bytes | 165044240
|
startTime | long: millis | 4936093042
|
when | GCWhen | Before GC
|
gcId | uint | 1
|
---|---|---|
heapSpace | VirtualSpace | |
committedEnd | ulong: address | 30322196480
|
committedSize | ulong: bytes | 257425408
|
reservedEnd | ulong: address | 34359738368
|
reservedSize | ulong: bytes | 4294967296
|
start | ulong: address | 30064771072
|
heapUsed | ulong: bytes | 2699392
|
startTime | long: millis | 436366667
|
when | GCWhen | After GC
|
MetaspaceSummary
default profiling startTime 11 17 21 23 24
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 | 2359296
|
reserved | ulong: bytes | 1073741824
|
used | ulong: bytes | 2291744
|
dataSpace | MetaspaceSizes | |
committed | ulong: bytes | 19660800
|
reserved | ulong: bytes | 67108864
|
used | ulong: bytes | 19568280
|
gcId | uint | 2
|
gcThreshold | ulong: bytes | 22020096
|
metaspace | MetaspaceSizes | |
committed | ulong: bytes | 22020096
|
reserved | ulong: bytes | 1140850688
|
used | ulong: bytes | 21860024
|
startTime | long: millis | 970097042
|
when | GCWhen | After GC
|
classSpace | MetaspaceSizes | |
---|---|---|
committed | ulong: bytes | 3080192
|
reserved | ulong: bytes | 1073741824
|
used | ulong: bytes | 2799096
|
dataSpace | MetaspaceSizes | |
committed | ulong: bytes | 23265280
|
reserved | ulong: bytes | 67108864
|
used | ulong: bytes | 23159720
|
gcId | uint | 40
|
gcThreshold | ulong: bytes | 42860544
|
metaspace | MetaspaceSizes | |
committed | ulong: bytes | 26345472
|
reserved | ulong: bytes | 1140850688
|
used | ulong: bytes | 25958816
|
startTime | long: millis | 4459803417
|
when | GCWhen | After GC
|
classSpace | MetaspaceSizes | |
---|---|---|
committed | ulong: bytes | 87490560
|
reserved | ulong: bytes | 1073741824
|
used | ulong: bytes | 86004336
|
dataSpace | MetaspaceSizes | |
committed | ulong: bytes | 553058304
|
reserved | ulong: bytes | 603979776
|
used | ulong: bytes | 551302592
|
gcId | uint | 889
|
gcThreshold | ulong: bytes | 1067515904
|
metaspace | MetaspaceSizes | |
committed | ulong: bytes | 640548864
|
reserved | ulong: bytes | 1677721600
|
used | ulong: bytes | 637306928
|
startTime | long: millis | 836939816417
|
when | GCWhen | Before GC
|
PSHeapSummary
default profiling startTime 11 17 21 23 24
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 | 33062649856
|
size | ulong: bytes | 134217728
|
start | ulong: address | 32928432128
|
used | ulong: bytes | 134217728
|
fromSpace | ObjectSpace | |
end | ulong: address | 33073659904
|
size | ulong: bytes | 11010048
|
start | ulong: address | 33062649856
|
used | ulong: bytes | 10994584
|
gcId | uint | 7
|
oldObjectSpace | ObjectSpace | |
end | ulong: address | 30244077568
|
size | ulong: bytes | 179306496
|
start | ulong: address | 30064771072
|
used | ulong: bytes | 48515176
|
oldSpace | VirtualSpace | |
committedEnd | ulong: address | 30244077568
|
committedSize | ulong: bytes | 179306496
|
reservedEnd | ulong: address | 32928432128
|
reservedSize | ulong: bytes | 2863661056
|
start | ulong: address | 30064771072
|
startTime | long: millis | 1289868208
|
toSpace | ObjectSpace | |
end | ulong: address | 33274462208
|
size | ulong: bytes | 38797312
|
start | ulong: address | 33235664896
|
used | ulong: bytes | 0
|
when | GCWhen | Before GC
|
youngSpace | VirtualSpace | |
committedEnd | ulong: address | 33274462208
|
committedSize | ulong: bytes | 346030080
|
reservedEnd | ulong: address | 34359738368
|
reservedSize | ulong: bytes | 1431306240
|
start | ulong: address | 32928432128
|
G1HeapSummary
default profiling startTime 11 17 21 23 24
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_oldGenUsedSize(g1_heap_summary->oldGenUsed());
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 |
oldGenUsedSize | ulong: bytes 21+ | Old Generation Used Size |
numberOfRegions | uint | Number of Regions |
JVM: GC: Metaspace
MetaspaceGCThreshold
default profiling startTime 11 17 21 23 24
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 23 24
Category: Java Virtual Machine / GC / Metaspace
Appearing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Missing in: G1GC
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. |
Examples 3
classLoader | ClassLoader | |
---|---|---|
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hiddenClassLoader | boolean | false
|
metadataType | MetadataType | Metadata
|
metaspaceObjectType | MetaspaceObjectType | Method
|
size | ulong: bytes | 88
|
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 | 1057
|
name | string | java/lang/ClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 858453667
|
classLoader | ClassLoader | |
---|---|---|
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hiddenClassLoader | boolean | false
|
metadataType | MetadataType | Metadata
|
metaspaceObjectType | MetaspaceObjectType | ConstMethod
|
size | ulong: bytes | 104
|
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 | 1057
|
name | string | java/lang/ClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 817189417
|
classLoader | ClassLoader | |
---|---|---|
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hiddenClassLoader | boolean | false
|
metadataType | MetadataType | Metadata
|
metaspaceObjectType | MetaspaceObjectType | ConstantPool
|
size | ulong: bytes | 2440
|
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 | 1057
|
name | string | java/lang/ClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 967526042
|
MetaspaceOOM
default profiling startTime stackTrace 11 17 21 23 24
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 23 24
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 | 879
|
---|---|---|
humongousChunks | ulong | 0
|
humongousChunksTotalSize | ulong: bytes | 0
|
mediumChunks | ulong | 0
|
mediumChunksTotalSize | ulong: bytes | 0
|
metadataType | MetadataType | Class
|
smallChunks | ulong | 0
|
smallChunksTotalSize | ulong: bytes | 0
|
specializedChunks | ulong | 0
|
specializedChunksTotalSize | ulong: bytes | 0
|
startTime | long: millis | 811024307125
|
when | GCWhen | After GC
|
gcId | uint | 32
|
---|---|---|
humongousChunks | ulong | 0
|
humongousChunksTotalSize | ulong: bytes | 0
|
mediumChunks | ulong | 0
|
mediumChunksTotalSize | ulong: bytes | 0
|
metadataType | MetadataType | Class
|
smallChunks | ulong | 0
|
smallChunksTotalSize | ulong: bytes | 0
|
specializedChunks | ulong | 0
|
specializedChunksTotalSize | ulong: bytes | 0
|
startTime | long: millis | 1983875958
|
when | GCWhen | Before GC
|
gcId | uint | 21
|
---|---|---|
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 | 8919891083
|
when | GCWhen | Before GC
|
JVM: GC: Phases
GCPhasePause
default profiling startTime duration eventThread 11 17 21 23 24 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() < 3, "There are only three levels for ConcurrentPhase");
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
GCPhasePauseLevel1
default profiling startTime duration eventThread 11 17 21 23 24 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() < 3, "There are only three 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 |
GCPhasePauseLevel2
default profiling startTime duration eventThread 11 17 21 23 24 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() < 3, "There are only three 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 |
GCPhasePauseLevel3
startTime duration eventThread 11 17 21 23 24 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() < 3, "There are only three levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
GCPhasePauseLevel4
startTime duration eventThread 11 17 21 23 24 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() < 3, "There are only three levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
case 2: send_phase<EventGCPhaseConcurrentLevel2>(phase); break;
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
GCPhaseConcurrent
default profiling startTime duration eventThread 11 17 21 23 24
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/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:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 3, "There are only three levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
case 2: send_phase<EventGCPhaseConcurrentLevel2>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
public:
template<typename T>
void send_phase(GCPhase* phase) {
T event(UNTIMED);
if (event.should_commit()) {
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
GCPhaseConcurrentLevel1
default profiling startTime duration eventThread 15 17 21 23 24
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() < 3, "There are only three levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
case 2: send_phase<EventGCPhaseConcurrentLevel2>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
public:
template<typename T>
void send_phase(GCPhase* phase) {
T event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
GCPhaseConcurrentLevel2
default profiling startTime duration eventThread 21 23 24
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:
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 3, "There are only three levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
case 2: send_phase<EventGCPhaseConcurrentLevel2>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
public:
template<typename T>
void send_phase(GCPhase* phase) {
T event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_name(phase->name());
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
GCPhaseParallel
default profiling startTime duration eventThread 12 17 21 23 24
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/g1HeapRegionManager.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/g1GCParPhaseTimesTracker.hpp:
#ifndef SHARE_GC_G1_G1GCPARPHASETIMESTRACKER_HPP
#define SHARE_GC_G1_G1GCPARPHASETIMESTRACKER_HPP
#include "gc/g1/g1GCPhaseTimes.hpp"
#include "jfr/jfrEvents.hpp"
#include "utilities/ticks.hpp"
class G1GCParPhaseTimesTracker : public CHeapObj<mtGC> {
protected:
Ticks _start_time;
G1GCPhaseTimes::GCParPhases _phase;
G1GCPhaseTimes* _phase_times;
uint _worker_id;
EventGCPhaseParallel _event;
bool _allow_multiple_record;
public:
G1GCParPhaseTimesTracker(G1GCPhaseTimes* phase_times, G1GCPhaseTimes::GCParPhases phase, uint worker_id, bool allow_multiple_record = false);
virtual ~G1GCParPhaseTimesTracker();
};
class G1EvacPhaseTimesTracker : public G1GCParPhaseTimesTracker {
Tickspan _total_time;
Tickspan _trim_time;
src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.cpp:
_before_used_bytes += used;
_regions_freed += 1;
}
void account_card_rs_length(G1HeapRegion* r) {
_card_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(G1HeapRegion* region, uint worker_id) : _event() {
_event.set_gcId(GCId::current());
_event.set_gcWorkerId(worker_id);
if (region->is_young()) {
_event.set_name(G1GCPhaseTimes::phase_name(G1GCPhaseTimes::YoungFreeCSet));
} else {
_event.set_name(G1GCPhaseTimes::phase_name(G1GCPhaseTimes::NonYoungFreeCSet));
}
}
src/hotspot/share/gc/g1/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_roots_scanned(0),
_opt_refs_scanned(0),
_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(G1HeapRegion* r) {
// 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));
}
// Scan code root remembered sets.
{
EventGCPhaseParallel event;
G1EvacPhaseWithTrimTimeTracker timer(_pss, _code_root_scan_time, _code_trim_partially_time);
G1ScanAndCountNMethodClosure cl(_pss->closures()->weak_nmethods());
// Scan the code root list attached to the current region
r->code_roots_do(&cl);
_code_roots_scanned += cl.count();
event.commit(GCId::current(), _worker_id, G1GCPhaseTimes::phase_name(_code_roots_phase));
}
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 |
JVM: GC: Reference
GCReferenceStatistics
default profiling startTime 11 17 21 23 24
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 | 4
|
startTime | long: millis | 1119187708
|
type | ReferenceType | Final reference
|
count | ulong | 0
|
---|---|---|
gcId | uint | 877
|
startTime | long: millis | 808697995000
|
type | ReferenceType | Soft reference
|
count | ulong | 0
|
---|---|---|
gcId | uint | 4
|
startTime | long: millis | 1155093250
|
type | ReferenceType | Final reference
|
JVM: Heap
GCHeapMemoryUsage
default profiling startTime every chunk 21 23 24
Category: Java Virtual Machine / 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/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(JavaThreadStatistics) {
EventJavaThreadStatistics event;
event.set_activeCount(ThreadService::get_live_thread_count());
event.set_daemonCount(ThreadService::get_daemon_thread_count());
event.set_accumulatedCount(ThreadService::get_total_thread_count());
event.set_peakCount(ThreadService::get_peak_thread_count());
event.commit();
}
TRACE_REQUEST_FUNC(GCHeapMemoryUsage) {
MemoryUsage usage = Universe::heap()->memory_usage();
EventGCHeapMemoryUsage event(UNTIMED);
event.set_used(usage.used());
event.set_committed(usage.committed());
event.set_max(usage.max_size());
event.set_starttime(timestamp());
event.set_endtime(timestamp());
event.commit();
}
TRACE_REQUEST_FUNC(GCHeapMemoryPoolUsage) {
ResourceMark mark;
GrowableArray<MemoryPool*> pools = Universe::heap()->memory_pools();
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
used | ulong: bytes | Heap Used Bytes allocated for storing objects on the heap |
committed | ulong: bytes | Heap Committed Bytes committed for storing objects on the heap |
max | ulong: bytes | Heap Max Max size for the heap |
Examples 3
GCHeapMemoryPoolUsage
default profiling startTime every chunk 21 23 24
Category: Java Virtual Machine / 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/jfr/periodic/jfrPeriodic.cpp:
event.set_max(usage.max_size());
event.set_starttime(timestamp());
event.set_endtime(timestamp());
event.commit();
}
TRACE_REQUEST_FUNC(GCHeapMemoryPoolUsage) {
ResourceMark mark;
GrowableArray<MemoryPool*> pools = Universe::heap()->memory_pools();
for (int i = 0; i < pools.length(); i++) {
MemoryPool* pool = pools.at(i);
if (pool->is_heap()) {
MemoryUsage usage = pool->get_memory_usage();
EventGCHeapMemoryPoolUsage event(UNTIMED);
event.set_name(pool->name());
event.set_used(usage.used());
event.set_committed(usage.committed());
event.set_max(usage.max_size());
event.set_starttime(timestamp());
event.set_endtime(timestamp());
event.commit();
}
}
}
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
name | string | Name GC Heap Memory Pool Name |
used | ulong: bytes | GC Heap Memory Pool Used Bytes used for storing objects in this memory pool |
committed | ulong: bytes | GC Heap Memory Pool Committed Bytes committed for storing objects in this memory pool |
max | ulong: bytes | GC Heap Memory Pool Max Max size for storing objects in this memory pool |
Examples 3
JVM: Internal
Duration
internal startTime duration eventThread 18 21 23 24
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 23 24
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/EventProvider.java:
/**
* Creates and returns an empty implementation for {@link CompilationEvent}.
*/
static CompilerFailureEvent createEmptyCompilerFailureEvent() {
return new EmptyCompilerFailureEvent();
}
/**
* An instant event is an event that is not considered to have taken any time.
*/
public interface InstantEvent {
/**
* Commits the event.
*/
void commit();
/**
* Determines if this particular event instance would be committed to the data stream right
* now if application called {@link #commit()}. This in turn depends on whether the event is
* enabled and possible other factors.
*
* @return if this event would be committed on a call to {@link #commit()}.
*/
boolean shouldWrite();
}
/**
* Timed events describe an operation that somehow consumes time.
*/
public interface TimedEvent extends InstantEvent {
/**
* Starts the timing for this event.
*/
void begin();
/**
* Ends the timing period for this event.
*/
void end();
}
src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/EventProvider.java:
void setIsOsr(boolean isOsr);
void setCodeSize(int codeSize);
void setInlinedBytes(int inlinedBytes);
}
/**
* Creates a new {@link CompilerFailureEvent}.
*
* @return a compiler failure event
*/
CompilerFailureEvent newCompilerFailureEvent();
/**
* A compiler failure event.
*/
public interface CompilerFailureEvent extends InstantEvent {
void setCompileId(int compileId);
void setMessage(String message);
}
}
Value
internal startTime eventThread 18 21 23 24
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 23 24
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
ResidentSetSize
default profiling startTime duration every chunk 21 23 24
Category: Java Virtual Machine / Memory
Resident set size of the process
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/os/bsd/os_bsd.cpp:
void os::print_memory_mappings(char* addr, size_t bytes, outputStream* st) {}
#if INCLUDE_JFR
void os::jfr_report_memory_info() {
#ifdef __APPLE__
mach_task_basic_info info;
mach_msg_type_number_t count = MACH_TASK_BASIC_INFO_COUNT;
kern_return_t ret = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&info, &count);
if (ret == KERN_SUCCESS) {
// Send the RSS JFR event
EventResidentSetSize event;
event.set_size(info.resident_size);
// We've seen that resident_size_max sometimes trails resident_size with one page.
// Make sure we always report size <= peak
event.set_peak(MAX2(info.resident_size_max, info.resident_size));
event.commit();
} else {
// Log a warning
static bool first_warning = true;
if (first_warning) {
log_warning(jfr)("Error fetching RSS values: task_info failed");
first_warning = false;
src/hotspot/os/linux/os_linux.cpp:
if (!print_model_name_and_flags(st, buf, buflen)) {
_print_ascii_file_h("/proc/cpuinfo", "/proc/cpuinfo", st, false);
}
st->cr();
print_sys_devices_cpu_info(st);
}
#if INCLUDE_JFR
void os::jfr_report_memory_info() {
os::Linux::meminfo_t info;
if (os::Linux::query_process_memory_info(&info)) {
// Send the RSS JFR event
EventResidentSetSize event;
event.set_size(info.vmrss * K);
event.set_peak(info.vmhwm * K);
event.commit();
} else {
// Log a warning
static bool first_warning = true;
if (first_warning) {
log_warning(jfr)("Error fetching RSS values: query_process_memory_info failed");
first_warning = false;
}
}
src/hotspot/os/windows/os_windows.cpp:
#if INCLUDE_JFR
void os::jfr_report_memory_info() {
PROCESS_MEMORY_COUNTERS_EX pmex;
ZeroMemory(&pmex, sizeof(PROCESS_MEMORY_COUNTERS_EX));
pmex.cb = sizeof(pmex);
BOOL ret = GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*) &pmex, sizeof(pmex));
if (ret != 0) {
// Send the RSS JFR event
EventResidentSetSize event;
event.set_size(pmex.WorkingSetSize);
event.set_peak(pmex.PeakWorkingSetSize);
event.commit();
} else {
// Log a warning
static bool first_warning = true;
if (first_warning) {
log_warning(jfr)("Error fetching RSS values: GetProcessMemoryInfo failed");
first_warning = false;
}
}
Configuration | enabled | period |
---|---|---|
default | true | 1000 ms |
profiling | true | 1000 ms |
Field | Type | Description |
---|---|---|
size | ulong: bytes | Resident Set Size Resident set size of the process |
peak | ulong: bytes | Resident Set Size Peak Value Resident set size peak value of the process |
Examples 3
NativeMemoryUsage
default profiling startTime duration every chunk 20 21 23 24 graal vm
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/jfr/periodic/jfrNativeMemoryEvent.cpp:
return;
}
NMTUsage* usage = get_usage(timestamp);
EventNativeMemoryUsageTotal event(UNTIMED);
event.set_starttime(timestamp);
event.set_reserved(usage->total_reserved());
event.set_committed(usage->total_committed());
event.commit();
}
void JfrNativeMemoryEvent::send_type_event(const Ticks& starttime, MEMFLAGS flag, size_t reserved, size_t committed) {
EventNativeMemoryUsage event(UNTIMED);
event.set_starttime(starttime);
event.set_type(NMTUtil::flag_to_index(flag));
event.set_reserved(reserved);
event.set_committed(committed);
event.commit();
}
void JfrNativeMemoryEvent::send_type_events(const Ticks& timestamp) {
if (!MemTracker::enabled()) {
return;
}
Configuration | enabled | period |
---|---|---|
default | true | 1000 ms |
profiling | true | 1000 ms |
Field | Type | Description |
---|---|---|
type | NMTType | Memory Type Type used for the native memory allocation |
reserved | ulong: bytes | Reserved Memory Reserved bytes for this type |
committed | ulong: bytes | Committed Memory Committed bytes for this type |
NativeMemoryUsageTotal
default profiling startTime duration every chunk 20 21 23 24 graal vm
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/jfr/periodic/jfrNativeMemoryEvent.cpp:
usage->refresh();
last_timestamp = timestamp;
}
return usage;
}
void JfrNativeMemoryEvent::send_total_event(const Ticks& timestamp) {
if (!MemTracker::enabled()) {
return;
}
NMTUsage* usage = get_usage(timestamp);
EventNativeMemoryUsageTotal event(UNTIMED);
event.set_starttime(timestamp);
event.set_reserved(usage->total_reserved());
event.set_committed(usage->total_committed());
event.commit();
}
void JfrNativeMemoryEvent::send_type_event(const Ticks& starttime, MEMFLAGS flag, size_t reserved, size_t committed) {
EventNativeMemoryUsage event(UNTIMED);
event.set_starttime(starttime);
event.set_type(NMTUtil::flag_to_index(flag));
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 |
NativeMemoryUsageTotalPeak
experimental startTime duration graal vm only
Category: Java Virtual Machine / Memory
Total native memory peak usage for the JVM (GraalVM Native Image only). Might not be the exact sum of the NativeMemoryUsagePeak events due to timing.
Field | Type | Description |
---|---|---|
peakReserved | long | Peak Reserved |
peakCommitted | long | Peak Committed |
countAtPeak | long | Count At Peak |
NativeMemoryUsagePeak
experimental startTime duration graal vm only
Category: Java Virtual Machine / Memory
Native memory peak usage for a given memory type in the JVM (GraalVM Native Image only).
Field | Type | Description |
---|---|---|
type | string | Memory Type |
peakReserved | long | Peak Reserved |
peakCommitted | long | Peak Committed |
countAtPeak | long | Count At Peak |
JVM: Profiling
OldObjectSample
cutoff default profiling startTime eventThread stackTrace 11 17 21 23 24 graal vm
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/sampling/objectSampler.cpp:
// for regular threads, the blob is cached in the thread local data structure
tl->set_thread_blob(JfrCheckpointManager::create_thread_blob(thread, tid));
assert(tl->has_thread_blob(), "invariant");
}
return tl->thread_blob();
}
class RecordStackTrace {
private:
JavaThread* _jt;
bool _enabled;
public:
RecordStackTrace(JavaThread* jt) : _jt(jt),
_enabled(JfrEventSetting::has_stacktrace(EventOldObjectSample::eventId)) {
if (_enabled) {
JfrStackTraceRepository::record_for_leak_profiler(jt);
}
}
~RecordStackTrace() {
if (_enabled) {
_jt->jfr_thread_local()->clear_cached_stack_trace();
}
}
};
src/hotspot/share/jfr/jni/jfrJniMethod.cpp:
NO_TRANSITION(jlong, jfr_elapsed_counter(JNIEnv* env, jclass jvm))
return JfrTicks::now();
NO_TRANSITION_END
NO_TRANSITION(void, jfr_retransform_classes(JNIEnv* env, jclass jvm, jobjectArray classes))
JfrJvmtiAgent::retransform_classes(env, classes, JavaThread::thread_from_jni_environment(env));
NO_TRANSITION_END
NO_TRANSITION(void, jfr_set_enabled(JNIEnv* env, jclass jvm, jlong event_type_id, jboolean enabled))
JfrEventSetting::set_enabled(event_type_id, JNI_TRUE == enabled);
if (EventOldObjectSample::eventId == event_type_id) {
JavaThread* thread = JavaThread::thread_from_jni_environment(env);
MACOS_AARCH64_ONLY(ThreadWXEnable __wx(WXWrite, thread));
ThreadInVMfromNative transition(thread);
if (JNI_TRUE == enabled) {
LeakProfiler::start(JfrOptionSet::old_object_queue_size());
} else {
LeakProfiler::stop();
}
}
NO_TRANSITION_END
src/hotspot/share/jfr/leakprofiler/checkpoint/eventEmitter.cpp:
assert(!sample->is_dead(), "invariant");
assert(edge_store != nullptr, "invariant");
assert(_jfr_thread_local != nullptr, "invariant");
const StoredEdge* const edge = edge_store->get(sample);
assert(edge != nullptr, "invariant");
assert(edge->pointee() == sample->object(), "invariant");
const traceid object_id = edge_store->get_id(edge);
assert(object_id != 0, "invariant");
const traceid gc_root_id = edge->gc_root_id();
Tickspan object_age = Ticks(_start_time.value()) - sample->allocation_time();
EventOldObjectSample e(UNTIMED);
e.set_starttime(_start_time);
e.set_endtime(_end_time);
e.set_allocationTime(sample->allocation_time());
e.set_objectSize(sample->allocated());
e.set_objectAge(object_age);
e.set_lastKnownHeapUsage(sample->heap_used_at_last_gc());
e.set_object(object_id);
e.set_arrayElements(array_size(edge->pointee()));
e.set_root(gc_root_id);
// Temporarily assigning both the stack trace id and thread id
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 minimum value for the type int if it is not an array |
root | OldObjectGcRoot | GC Root Consider contributing a description to jfreventcollector. |
Examples 3
allocationTime | Ticks | 688623224875
|
---|---|---|
arrayElements | int | -2147483648
|
lastKnownHeapUsage | ulong: bytes | 203805432
|
object | OldObject | |
address | ulong: address | 30125742528
|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | org/antlr/v4/runtime/atn/BasicState
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/antlr/v4/runtime/atn
|
objectAge | Tickspan | 252242457542
|
objectSize | ulong: bytes | 40
|
root | OldObjectGcRoot | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 70
|
lineNumber | int | 744
|
method | Method | |
descriptor | string | (II)Lorg/antlr/v4/runtime/atn/ATNState;
|
hidden | boolean | false
|
modifiers | int | 4
|
name | string | stateFactory
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | org/antlr/v4/runtime/atn/ATNDeserializer
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/antlr/v4/runtime/atn
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 940865682417
|
allocationTime | Ticks | 1110293083
|
---|---|---|
arrayElements | int | 901325
|
lastKnownHeapUsage | ulong: bytes | 6460624
|
object | OldObject | |
address | ulong: address | 31547857072
|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | [Ljava/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.1
|
name | string | java/lang
|
objectAge | Tickspan | 97857704625
|
objectSize | ulong: bytes | 3605320
|
root | OldObjectGcRoot | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 1
|
lineNumber | int | 79
|
method | Method | |
descriptor | string | (I)[Ljava/lang/String;
|
hidden | boolean | false
|
modifiers | int | 4106
|
name | string | lambda$resourceAsWords$2
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | org/renaissance/jdk/streams/JavaScrabble
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/renaissance/jdk/streams
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 98967997708
|
allocationTime | Ticks | 78460499792
|
---|---|---|
arrayElements | int | 64
|
lastKnownHeapUsage | ulong: bytes | 121406312
|
object | OldObject | |
address | ulong: address | 30171712024
|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
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.1
|
name | string | java/util/concurrent
|
objectAge | Tickspan | 15606410458
|
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 | 33
|
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.1
|
name | string | java/util/concurrent
|
type | FrameType | Interpreted
|
truncated | boolean | false
|
startTime | long: millis | 94066910250
|
ExecutionSample
default profiling startTime every chunk 11 17 21 23 24 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, jclass jvm, jobject log_tag, jint id))
JfrJavaLog::subscribe_log_level(log_tag, id, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_set_output(JNIEnv* env, jclass jvm, jstring path))
JfrRepository::set_chunk_path(path, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_set_method_sampling_period(JNIEnv* env, jclass jvm, jlong type, jlong periodMillis))
if (periodMillis < 0) {
periodMillis = 0;
}
JfrEventId typed_event_id = (JfrEventId)type;
assert(EventExecutionSample::eventId == typed_event_id || EventNativeMethodSample::eventId == typed_event_id, "invariant");
JfrEventSetting::set_enabled(typed_event_id, periodMillis > 0);
if (EventExecutionSample::eventId == type) {
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, jclass 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>(JavaThreadStatus::RUNNABLE));
}
}
}
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 = nullptr;
{
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 | ForkJoinPool.commonPool-worker-4
|
javaThreadId | long | 34
|
osName | string | ForkJoinPool.commonPool-worker-4
|
osThreadId | long | 26115
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 166
|
lineNumber | int | 1219
|
method | Method | |
descriptor | string | (Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | computeIfAbsent
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/util/HashMap
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 2215538583
|
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 5.0 in stage 22.0 (TID 160)
|
javaThreadId | long | 1649
|
osName | string | Executor task launch worker for task 5.0 in stage 22.0 (TID 160)
|
osThreadId | long | 141839
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 23
|
lineNumber | int | 901
|
method | Method | |
descriptor | string | ([F)V
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | copyToDouble
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | org/apache/spark/ml/recommendation/ALS$NormalEquation
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/ml/recommendation
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 809969934875
|
state | ThreadState | STATE_RUNNABLE
|
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | main
|
javaThreadId | long | 1
|
osName | string | main
|
osThreadId | long | 8707
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 53
|
lineNumber | int | 503
|
method | Method | |
descriptor | string | ()I
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | readLine
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/util/Properties$LineReader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 471795000
|
state | ThreadState | STATE_RUNNABLE
|
NativeMethodSample
default profiling startTime every chunk 11 17 21 23 24 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, jclass jvm, jobject log_tag, jint id))
JfrJavaLog::subscribe_log_level(log_tag, id, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_set_output(JNIEnv* env, jclass jvm, jstring path))
JfrRepository::set_chunk_path(path, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_set_method_sampling_period(JNIEnv* env, jclass jvm, jlong type, jlong periodMillis))
if (periodMillis < 0) {
periodMillis = 0;
}
JfrEventId typed_event_id = (JfrEventId)type;
assert(EventExecutionSample::eventId == typed_event_id || EventNativeMethodSample::eventId == typed_event_id, "invariant");
JfrEventSetting::set_enabled(typed_event_id, periodMillis > 0);
if (EventExecutionSample::eventId == type) {
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, jclass 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>(JavaThreadStatus::RUNNABLE));
}
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 = nullptr;
{
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 | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | main
|
javaThreadId | long | 1
|
osName | string | main
|
osThreadId | long | 10499
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (J[BII[BII)J
|
hidden | boolean | false
|
modifiers | int | 258
|
name | string | inflateBytesBytes
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/util/zip/Inflater
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util/zip
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 3804119708
|
state | ThreadState | STATE_RUNNABLE
|
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | main
|
javaThreadId | long | 1
|
osName | string | main
|
osThreadId | long | 8707
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (J[BII[BII)J
|
hidden | boolean | false
|
modifiers | int | 258
|
name | string | inflateBytesBytes
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/util/zip/Inflater
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util/zip
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 3367030208
|
state | ThreadState | STATE_RUNNABLE
|
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | rpc-boss-3-1
|
javaThreadId | long | 1596
|
osName | string | rpc-boss-3-1
|
osThreadId | long | 38415
|
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 | 22
|
name | string | sun/nio/ch
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 794943831667
|
state | ThreadState | STATE_RUNNABLE
|
JVM: Runtime
ContinuationFreeze
experimental startTime duration eventThread stackTrace 19 21 23 24
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 23 24
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 23 24
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 23 24
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 23 24
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 23 24
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 23 24
Category: Java Virtual Machine / Runtime
Activation of Reserved Stack Area caused by stack overflow with ReservedStackAccess annotated method in call stack
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/sharedRuntime.cpp:
for (ScopeDesc *sd = nm->scope_desc_near(fr.pc()); sd != nullptr; sd = sd->sender()) {
method = sd->method();
if (method != nullptr && method->has_reserved_stack_access()) {
found = true;
}
}
}
}
if (found) {
activation = fr;
warning("Potentially dangerous stack overflow in "
"ReservedStackAccess annotated method %s [%d]",
method->name_and_sig_as_C_string(), count++);
EventReservedStackActivation event;
if (event.should_commit()) {
event.set_method(method);
event.commit();
}
}
}
return activation;
}
void SharedRuntime::on_slowpath_allocation_exit(JavaThread* current) {
// After any safepoint, just before going back to compiled code,
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
method | Method | Java Method |
SafepointBegin
default profiling startTime duration eventThread 11 17 21 23 24 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 23 24
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:
static void post_safepoint_begin_event(EventSafepointBegin& event,
uint64_t safepoint_id,
int thread_count,
int critical_thread_count) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_totalThreadCount(thread_count);
event.set_jniCriticalThreadCount(critical_thread_count);
event.commit();
}
}
static void post_safepoint_synchronize_event(EventSafepointStateSynchronization& event,
uint64_t safepoint_id,
int initial_number_of_threads,
int threads_waiting_to_block,
int iterations) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_initialThreadCount(initial_number_of_threads);
event.set_runningThreadCount(threads_waiting_to_block);
event.set_iterations(checked_cast<u4>(iterations));
event.commit();
}
src/hotspot/share/runtime/safepoint.cpp:
_current_jni_active_count = 0;
// Set number of threads to wait for
_waiting_to_block = nof_threads;
jlong safepoint_limit_time = 0;
if (SafepointTimeout) {
// Set the limit time, so that it can be compared to see if this has taken
// too long to complete.
safepoint_limit_time = SafepointTracing::start_of_safepoint() + (jlong)(SafepointTimeoutDelay * NANOSECS_PER_MILLISEC);
timeout_error_printed = false;
}
EventSafepointStateSynchronization sync_event;
int initial_running = 0;
// Arms the safepoint, _current_jni_active_count and _waiting_to_block must be set before.
arm_safepoint();
// Will spin until all threads are safe.
int iterations = synchronize_threads(safepoint_limit_time, nof_threads, &initial_running);
assert(_waiting_to_block == 0, "No thread should be running");
#ifndef PRODUCT
// Mark all threads
Configuration | enabled | threshold |
---|---|---|
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
SafepointEnd
startTime duration eventThread 11 17 21 23 24 graal vm
Category: Java Virtual Machine / Runtime / Safepoint
Safepointing end
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/safepoint.cpp:
uint64_t safepoint_id,
int initial_number_of_threads,
int threads_waiting_to_block,
int iterations) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_initialThreadCount(initial_number_of_threads);
event.set_runningThreadCount(threads_waiting_to_block);
event.set_iterations(checked_cast<u4>(iterations));
event.commit();
}
}
static void post_safepoint_end_event(EventSafepointEnd& event, uint64_t safepoint_id) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.commit();
}
}
// SafepointCheck
SafepointStateTracker::SafepointStateTracker(uint64_t safepoint_id, bool at_safepoint)
: _safepoint_id(safepoint_id), _at_safepoint(at_safepoint) {}
bool SafepointStateTracker::safepoint_state_changed() {
src/hotspot/share/runtime/safepoint.cpp:
} // ~JavaThreadIteratorWithHandle
// Release threads lock, so threads can be created/destroyed again.
Threads_lock->unlock();
// Wake threads after local state is correctly set.
_wait_barrier->disarm();
}
// Wake up all threads, so they are ready to resume execution after the safepoint
// operation has been carried out
void SafepointSynchronize::end() {
assert(Threads_lock->owned_by_self(), "must hold Threads_lock");
EventSafepointEnd event;
assert(Thread::current()->is_VM_thread(), "Only VM thread can execute a safepoint");
disarm_safepoint();
Universe::heap()->safepoint_synchronize_end();
SafepointTracing::end();
post_safepoint_end_event(event, safepoint_id());
}
Configuration | enabled | threshold |
---|---|---|
default | false | 10 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | ulong | Safepoint Identifier |
ExecuteVMOperation
default profiling startTime duration eventThread 11 17 21 23 24 graal vm
Category: Java Virtual Machine / Runtime
Execution of a VM Operation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/vmThread.cpp:
// Wait until VM thread is terminated
// Note: it should be OK to use Terminator_lock here. But this is called
// at a very delicate time (VM shutdown) and we are operating in non- VM
// thread at Safepoint. It's safer to not share lock with other threads.
{
MonitorLocker ml(_terminate_lock, Mutex::_no_safepoint_check_flag);
while (!VMThread::is_terminated()) {
ml.wait();
}
}
}
static void post_vm_operation_event(EventExecuteVMOperation* event, VM_Operation* op) {
assert(event != nullptr, "invariant");
assert(op != nullptr, "invariant");
const bool evaluate_at_safepoint = op->evaluate_at_safepoint();
event->set_operation(op->type());
event->set_safepoint(evaluate_at_safepoint);
event->set_blocking(true);
event->set_caller(JFR_THREAD_ID(op->calling_thread()));
event->set_safepointId(evaluate_at_safepoint ? SafepointSynchronize::safepoint_id() : 0);
event->commit();
}
void VMThread::evaluate_operation(VM_Operation* op) {
ResourceMark rm;
{
PerfTraceTime vm_op_timer(perf_accumulated_vm_operation_time());
HOTSPOT_VMOPS_BEGIN(
(char *) op->name(), strlen(op->name()),
op->evaluate_at_safepoint() ? 0 : 1);
EventExecuteVMOperation event;
op->evaluate();
if (event.should_commit()) {
post_vm_operation_event(&event, op);
}
HOTSPOT_VMOPS_END(
(char *) op->name(), strlen(op->name()),
op->evaluate_at_safepoint() ? 0 : 1);
}
if (UsePerfData && os::is_thread_cpu_time_supported()) {
Configuration | enabled | threshold |
---|---|---|
default | true | 10 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
operation | VMOperationType | Operation Consider contributing a description to jfreventcollector. |
safepoint | boolean | At Safepoint If the operation occurred at a safepoint |
blocking | boolean | Caller Blocked If the calling thread was blocked until the operation was complete |
caller | Thread | Caller Thread requesting operation. If non-blocking, will be set to 0 indicating thread is unknown |
safepointId | ulong | Safepoint Identifier The safepoint (if any) under which this operation was completed |
Examples 3
blocking | boolean | true
|
---|---|---|
caller | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | ForkJoinPool.commonPool-worker-2
|
javaThreadId | long | 24
|
osName | string | ForkJoinPool.commonPool-worker-2
|
osThreadId | long | 25351
|
virtual | boolean | false
|
operation | VMOperationType | GenCollectForAllocation
|
safepoint | boolean | true
|
safepointId | ulong | 74
|
startTime | long: millis | 5422378500
|
blocking | boolean | true
|
---|---|---|
caller | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | ForkJoinPool-1-worker-1
|
javaThreadId | long | 39
|
osName | string | ForkJoinPool-1-worker-1
|
osThreadId | long | 42763
|
virtual | boolean | false
|
operation | VMOperationType | ICBufferFull
|
safepoint | boolean | true
|
safepointId | ulong | 38
|
startTime | long: millis | 4707365792
|
Shutdown
default profiling startTime eventThread stackTrace 11 17 21 23 24
Category: Java Virtual Machine / Runtime
JVM shutting down
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/threads.cpp:
// Wait until we are the last non-daemon thread to execute, or
// if we are a daemon then wait until the last non-daemon thread has
// executed.
bool daemon = java_lang_Thread::is_daemon(thread->threadObj());
int expected = daemon ? 0 : 1;
{
MonitorLocker nu(Threads_lock);
while (Threads::number_of_non_daemon_threads() > expected)
// This wait should make safepoint checks, wait without a timeout.
nu.wait(0);
}
EventShutdown e;
if (e.should_commit()) {
e.set_reason("No remaining non-daemon Java threads");
e.commit();
}
// Hang forever on exit if we are reporting an error.
if (ShowMessageBoxOnError && VMError::is_error_reported()) {
os::infinite_sleep();
}
os::wait_for_keypress_at_exit();
src/hotspot/share/prims/jvm.cpp:
JVM_ENTRY(jstring, JVM_GetTemporaryDirectory(JNIEnv *env))
HandleMark hm(THREAD);
const char* temp_dir = os::get_temp_directory();
Handle h = java_lang_String::create_from_platform_dependent_str(temp_dir, CHECK_NULL);
return (jstring) JNIHandles::make_local(THREAD, h());
JVM_END
// java.lang.Runtime /////////////////////////////////////////////////////////////////////////
extern volatile jint vm_created;
JVM_ENTRY_NO_ENV(void, JVM_BeforeHalt())
EventShutdown event;
if (event.should_commit()) {
event.set_reason("Shutdown requested from Java");
event.commit();
}
JVM_END
JVM_ENTRY_NO_ENV(void, JVM_Halt(jint code))
before_exit(thread, true);
vm_exit(code);
JVM_END
src/hotspot/share/jfr/recorder/repository/jfrEmergencyDump.cpp:
void transition_to_native() {
if (_jt != nullptr) {
assert(_jt->thread_state() == _thread_in_vm, "invariant");
_jt->set_thread_state(_thread_in_native);
}
}
};
static void post_events(bool exception_handler, 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();
}
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
reason | string | Reason Reason for JVM shutdown |
Examples 3
reason | string | Shutdown requested from Java
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | beforeHalt
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/lang/Shutdown
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 94066455250
|
reason | string | Shutdown requested from Java
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | beforeHalt
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/lang/Shutdown
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 98967385458
|
reason | string | No remaining non-daemon Java threads
|
---|---|---|
stackTrace | StackTrace | null
|
startTime | long: millis | 940851933500
|
SymbolTableStatistics
default profiling startTime duration every chunk 13 17 21 23 24
Category: Java Virtual Machine / Runtime / Tables
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_entryCount(statistics._number_of_entries);
event.set_totalFootprint(statistics._total_footprint);
event.set_bucketCountMaximum(statistics._maximum_bucket_size);
event.set_bucketCountAverage(statistics._average_bucket_size);
event.set_bucketCountVariance(statistics._variance_of_bucket_size);
event.set_bucketCountStandardDeviation(statistics._stddev_of_bucket_size);
event.set_insertionRate(statistics._add_rate);
event.set_removalRate(statistics._remove_rate);
event.commit();
}
TRACE_REQUEST_FUNC(SymbolTableStatistics) {
TableStatistics statistics = SymbolTable::get_table_statistics();
emit_table_statistics<EventSymbolTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(StringTableStatistics) {
TableStatistics statistics = StringTable::get_table_statistics();
emit_table_statistics<EventStringTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(CompilerStatistics) {
EventCompilerStatistics event;
event.set_compileCount(CompileBroker::get_total_compile_count());
event.set_bailoutCount(CompileBroker::get_total_bailout_count());
Configuration | enabled | period |
---|---|---|
default | true | 10 s |
profiling | true | 10 s |
Field | Type | Description |
---|---|---|
bucketCount | ulong | Bucket Count Number of buckets |
entryCount | ulong | Entry Count Number of all entries |
totalFootprint | ulong: bytes | Total Footprint Total memory footprint (the table itself plus all of the entries) |
bucketCountMaximum | ulong | Maximum Bucket Count The maximum bucket length (entries in a single bucket) |
bucketCountAverage | float | Average Bucket Count The average bucket length |
bucketCountVariance | float | Bucket Count Variance How far bucket lengths are spread out from their average value |
bucketCountStandardDeviation | float | Bucket Count Standard Deviation How far bucket lengths are spread out from their mean (expected) value |
insertionRate | float | Insertion Rate How many items were added since last event (per second) |
removalRate | float | Removal Rate How many items were removed since last event (per second) |
Examples 3
bucketCount | ulong | 32768
|
---|---|---|
bucketCountAverage | float | 4.3593445
|
bucketCountMaximum | ulong | 15
|
bucketCountStandardDeviation | float | 2.1059704
|
bucketCountVariance | float | 4.435111
|
entryCount | ulong | 142847
|
insertionRate | float | 6.1487455
|
removalRate | float | 35.00818
|
startTime | long: millis | 42452494875
|
totalFootprint | ulong: bytes | 11790928
|
bucketCount | ulong | 32768
|
---|---|---|
bucketCountAverage | float | 4.352051
|
bucketCountMaximum | ulong | 15
|
bucketCountStandardDeviation | float | 2.1034112
|
bucketCountVariance | float | 4.4243393
|
entryCount | ulong | 142608
|
insertionRate | float | 5909.958
|
removalRate | float | 88.15976
|
startTime | long: millis | 45308622083
|
totalFootprint | ulong: bytes | 11769968
|
bucketCount | ulong | 65536
|
---|---|---|
bucketCountAverage | float | 7.767639
|
bucketCountMaximum | ulong | 21
|
bucketCountStandardDeviation | float | 2.7926807
|
bucketCountVariance | float | 7.799066
|
entryCount | ulong | 509060
|
insertionRate | float | 0.09782524
|
removalRate | float | 0.0
|
startTime | long: millis | 839841975500
|
totalFootprint | ulong: bytes | 54764784
|
StringTableStatistics
default profiling startTime duration every chunk 13 17 21 23 24
Category: Java Virtual Machine / Runtime / Tables
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_bucketCountStandardDeviation(statistics._stddev_of_bucket_size);
event.set_insertionRate(statistics._add_rate);
event.set_removalRate(statistics._remove_rate);
event.commit();
}
TRACE_REQUEST_FUNC(SymbolTableStatistics) {
TableStatistics statistics = SymbolTable::get_table_statistics();
emit_table_statistics<EventSymbolTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(StringTableStatistics) {
TableStatistics statistics = StringTable::get_table_statistics();
emit_table_statistics<EventStringTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(CompilerStatistics) {
EventCompilerStatistics event;
event.set_compileCount(CompileBroker::get_total_compile_count());
event.set_bailoutCount(CompileBroker::get_total_bailout_count());
event.set_invalidatedCount(CompileBroker::get_total_invalidated_count());
event.set_osrCompileCount(CompileBroker::get_total_osr_compile_count());
event.set_standardCompileCount(CompileBroker::get_total_standard_compile_count());
event.set_osrBytesCompiled(CompileBroker::get_sum_osr_bytes_compiled());
event.set_standardBytesCompiled(CompileBroker::get_sum_standard_bytes_compiled());
Configuration | enabled | period |
---|---|---|
default | true | 10 s |
profiling | true | 10 s |
Field | Type | Description |
---|---|---|
bucketCount | ulong | Bucket Count Number of buckets |
entryCount | ulong | Entry Count Number of all entries |
totalFootprint | ulong: bytes | Total Footprint Total memory footprint (the table itself plus all of the entries) |
bucketCountMaximum | ulong | Maximum Bucket Count The maximum bucket length (entries in a single bucket) |
bucketCountAverage | float | Average Bucket Count The average bucket length |
bucketCountVariance | float | Bucket Count Variance How far bucket lengths are spread out from their average value |
bucketCountStandardDeviation | float | Bucket Count Standard Deviation How far bucket lengths are spread out from their mean (expected) value |
insertionRate | float | Insertion Rate How many items were added since last event (per second) |
removalRate | float | Removal Rate How many items were removed since last event (per second) |
Examples 3
bucketCount | ulong | 65536
|
---|---|---|
bucketCountAverage | float | 0.34371948
|
bucketCountMaximum | ulong | 6
|
bucketCountStandardDeviation | float | 0.5813279
|
bucketCountVariance | float | 0.33794212
|
entryCount | ulong | 22526
|
insertionRate | float | 1223.0361
|
removalRate | float | 193.10052
|
startTime | long: millis | 32373892667
|
totalFootprint | ulong: bytes | 2499552
|
bucketCount | ulong | 65536
|
---|---|---|
bucketCountAverage | float | 0.38897705
|
bucketCountMaximum | ulong | 6
|
bucketCountStandardDeviation | float | 0.62076443
|
bucketCountVariance | float | 0.38534847
|
entryCount | ulong | 25492
|
insertionRate | float | 298.51913
|
removalRate | float | 171.66574
|
startTime | long: millis | 77368439208
|
totalFootprint | ulong: bytes | 2791360
|
bucketCount | ulong | 65536
|
---|---|---|
bucketCountAverage | float | 1.4590607
|
bucketCountMaximum | ulong | 9
|
bucketCountStandardDeviation | float | 1.2104218
|
bucketCountVariance | float | 1.4651208
|
entryCount | ulong | 95621
|
insertionRate | float | 40.469875
|
removalRate | float | 2.3425677
|
startTime | long: millis | 852237570417
|
totalFootprint | ulong: bytes | 10676440
|
ThreadDump
default profiling startTime duration every chunk 11 17 21 23 24
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/jfr/periodic/jfrPeriodic.cpp:
/*
* This is left empty on purpose, having ExecutionSample as a requestable
* is a way of getting the period. The period is passed to ThreadSampling::update_period.
* Implementation in periodic/sampling/jfrThreadSampler.cpp.
*/
TRACE_REQUEST_FUNC(ExecutionSample) {
}
TRACE_REQUEST_FUNC(NativeMethodSample) {
}
TRACE_REQUEST_FUNC(ThreadDump) {
ResourceMark rm;
EventThreadDump event;
event.set_result(JfrDcmdEvent::thread_dump());
event.commit();
}
static int _native_library_callback(const char* name, address base, address top, void *param) {
EventNativeLibrary event(UNTIMED);
event.set_name(name);
event.set_baseAddress((u8)base);
event.set_topAddress((u8)top);
event.set_starttime(*(JfrTicks*)param);
event.set_endtime(*(JfrTicks*) param);
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | 60 s |
Field | Type | Description |
---|---|---|
result | string | Thread Dump |
Examples 3
result | string | 2024-09-25 14:24:36
Full thread dump OpenJDK 64-Bit Server VM (22+36 mixed mode, sharing):
Threads class SMR info:
_java_thread_list=0x0000600006146140, length=116, elements={
0x000000014c808c00, 0x000000013d835200, 0x000000014c863a00, 0x000000013c81ac00,
0x000000013d835a00, 0x000000013c812a00, 0x0…
|
---|---|---|
startTime | long: millis | 874049188417
|
result | string | 2023-12-18 12:45:49
Full thread dump OpenJDK 64-Bit Server VM (21.0.1+12-LTS mixed mode):
Threads class SMR info:
_java_thread_list=0x00006000003cd500, length=77, elements={
0x000000011f00f200, 0x000000010e038800, 0x000000010e03b200, 0x000000011f80ec00,
0x000000011f80c800, 0x000000011f811600, 0x000…
|
---|---|---|
startTime | long: millis | 63501309417
|
result | string | 2023-12-18 12:47:28
Full thread dump OpenJDK 64-Bit Server VM (21.0.1+12-LTS mixed mode):
Threads class SMR info:
_java_thread_list=0x000060000092cca0, length=77, elements={
0x0000000132812000, 0x0000000131017000, 0x0000000131014c00, 0x000000013203b200,
0x0000000132008200, 0x0000000132009600, 0x000…
|
---|---|---|
startTime | long: millis | 67214999000
|
NativeLibrary
default profiling startTime every chunk 11 17 21 23 24
Category: Java Virtual Machine / Runtime
Information about a dynamic library or other native image loaded by the JVM process
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(ExecutionSample) {
}
TRACE_REQUEST_FUNC(NativeMethodSample) {
}
TRACE_REQUEST_FUNC(ThreadDump) {
ResourceMark rm;
EventThreadDump event;
event.set_result(JfrDcmdEvent::thread_dump());
event.commit();
}
static int _native_library_callback(const char* name, address base, address top, void *param) {
EventNativeLibrary event(UNTIMED);
event.set_name(name);
event.set_baseAddress((u8)base);
event.set_topAddress((u8)top);
event.set_starttime(*(JfrTicks*)param);
event.set_endtime(*(JfrTicks*) param);
event.commit();
return 0;
}
TRACE_REQUEST_FUNC(NativeLibrary) {
JfrTicks ts= JfrTicks::now();
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
baseAddress | ulong: address | Base Address Starting address of the module |
topAddress | ulong: address | Top Address Ending address of the module, if available |
Examples 3
NativeLibraryLoad
default profiling startTime duration eventThread stackTrace 22 23 24
Category: Java Virtual Machine / Runtime
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Information about a dynamic library or other native image load operation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/support/jfrNativeLibraryLoadEvent.cpp:
/*
* The JfrTicks value is heap allocated inside an object of type JfrTicksWrapper.
* The reason is that a raw value object of type Ticks is not possible at this
* location because this code runs as part of early VM bootstrap, at a moment
* where Ticks support is not yet initialized.
*/
template <typename EventType>
static inline JfrTicksWrapper* allocate_start_time() {
return EventType::is_enabled() ? new JfrTicksWrapper() : nullptr;
}
NativeLibraryLoadEvent::NativeLibraryLoadEvent(const char* name, void** result) : JfrNativeLibraryEventBase(name), _result(result), _fp_env_correction_attempt(false), _fp_env_correction_success(false) {
assert(_result != nullptr, "invariant");
_start_time = allocate_start_time<EventNativeLibraryLoad>();
}
bool NativeLibraryLoadEvent::success() const {
return *_result != nullptr;
}
NativeLibraryUnloadEvent::NativeLibraryUnloadEvent(const char* name) : JfrNativeLibraryEventBase(name), _result(false) {
_start_time = allocate_start_time<EventNativeLibraryUnload>();
}
bool NativeLibraryUnloadEvent::success() const {
return _result;
}
void NativeLibraryUnloadEvent::set_result(bool result) {
_result = result;
}
static void set_additional_data(EventNativeLibraryLoad& event, const NativeLibraryLoadEvent& helper) {
event.set_fpuCorrectionAttempt(helper.get_fp_env_correction_attempt());
event.set_fpuCorrectionSuccess(helper.get_fp_env_correction_success());
}
static void set_additional_data(EventNativeLibraryUnload& event, const NativeLibraryUnloadEvent& helper) {
// no additional entries atm. for the unload event
}
template <typename EventType, typename HelperType>
static void commit(const HelperType& helper) {
if (!helper.has_start_time()) {
src/hotspot/share/jfr/support/jfrNativeLibraryLoadEvent.cpp:
Thread* thread = Thread::current();
assert(thread != nullptr, "invariant");
if (thread->is_Java_thread()) {
JavaThread* jt = JavaThread::cast(thread);
if (jt->thread_state() == _thread_in_native) {
// For a JavaThread to take a JFR stacktrace, it must be in _thread_in_vm. Can safepoint here.
ThreadInVMfromNative transition(jt);
event.commit();
return;
}
// If a thread comes here still _thread_in_Java, which can happen for example
// when loading the disassembler library in response to traps in JIT code - all is ok.
// Since there is no ljf, an event will be committed without a stacktrace.
}
event.commit();
}
NativeLibraryLoadEvent::~NativeLibraryLoadEvent() {
commit<EventNativeLibraryLoad>(*this);
}
NativeLibraryUnloadEvent::~NativeLibraryUnloadEvent() {
commit<EventNativeLibraryUnload>(*this);
}
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
name | string | Name |
success | boolean | Success Success or failure of the load operation |
errorMessage | string | Error Message In case of a load error, error description |
fpuCorrectionAttempt | boolean 23+ | FPU Environment Correction In case of IEEE conformance issues we might reset the FP environment |
fpuCorrectionSuccess | boolean 23+ | FPU Environment Correction Result Stores the result in the case of an FP environment correction |
Examples 1
errorMessage | string | dlopen(/Network/Library/Java/Extensions/libhadoop.dylib, 0x0001): tried: '/Network/Library/Java/Extensions/libhadoop.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Network/Library/Java/Extensions/libhadoop.dylib' (no such file), '/Network/Library/Java/Extensions/libhadoop.dylib' (no su…
|
---|---|---|
name | string | /Network/Library/Java/Extensions/libhadoop.dylib
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljdk/internal/loader/NativeLibraries$NativeLibraryImpl;Ljava/lang/String;ZZ)Z
|
hidden | boolean | false
|
modifiers | int | 266
|
name | string | load
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | jdk/internal/loader/NativeLibraries
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | jdk/internal/loader
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 858022085083
|
success | boolean | false
|
NativeLibraryUnload
default profiling startTime duration eventThread stackTrace 22 23 24
Category: Java Virtual Machine / Runtime
Information about a dynamic library or other native image unload operation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/support/jfrNativeLibraryLoadEvent.cpp:
static inline JfrTicksWrapper* allocate_start_time() {
return EventType::is_enabled() ? new JfrTicksWrapper() : nullptr;
}
NativeLibraryLoadEvent::NativeLibraryLoadEvent(const char* name, void** result) : JfrNativeLibraryEventBase(name), _result(result), _fp_env_correction_attempt(false), _fp_env_correction_success(false) {
assert(_result != nullptr, "invariant");
_start_time = allocate_start_time<EventNativeLibraryLoad>();
}
bool NativeLibraryLoadEvent::success() const {
return *_result != nullptr;
}
NativeLibraryUnloadEvent::NativeLibraryUnloadEvent(const char* name) : JfrNativeLibraryEventBase(name), _result(false) {
_start_time = allocate_start_time<EventNativeLibraryUnload>();
}
bool NativeLibraryUnloadEvent::success() const {
return _result;
}
void NativeLibraryUnloadEvent::set_result(bool result) {
_result = result;
}
static void set_additional_data(EventNativeLibraryLoad& event, const NativeLibraryLoadEvent& helper) {
event.set_fpuCorrectionAttempt(helper.get_fp_env_correction_attempt());
event.set_fpuCorrectionSuccess(helper.get_fp_env_correction_success());
}
static void set_additional_data(EventNativeLibraryUnload& event, const NativeLibraryUnloadEvent& helper) {
// no additional entries atm. for the unload event
}
template <typename EventType, typename HelperType>
static void commit(const HelperType& helper) {
if (!helper.has_start_time()) {
return;
}
EventType event(UNTIMED);
event.set_endtime(JfrTicks::now());
event.set_starttime(*helper.start_time());
src/hotspot/share/jfr/support/jfrNativeLibraryLoadEvent.cpp:
Thread* thread = Thread::current();
assert(thread != nullptr, "invariant");
if (thread->is_Java_thread()) {
JavaThread* jt = JavaThread::cast(thread);
if (jt->thread_state() == _thread_in_native) {
// For a JavaThread to take a JFR stacktrace, it must be in _thread_in_vm. Can safepoint here.
ThreadInVMfromNative transition(jt);
event.commit();
return;
}
// If a thread comes here still _thread_in_Java, which can happen for example
// when loading the disassembler library in response to traps in JIT code - all is ok.
// Since there is no ljf, an event will be committed without a stacktrace.
}
event.commit();
}
NativeLibraryLoadEvent::~NativeLibraryLoadEvent() {
commit<EventNativeLibraryLoad>(*this);
}
NativeLibraryUnloadEvent::~NativeLibraryUnloadEvent() {
commit<EventNativeLibraryUnload>(*this);
}
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
name | string | Name |
success | boolean | Success Success or failure of the unload operation |
errorMessage | string | Error Message In case of an unload error, error description |
ModuleRequire
default profiling startTime every chunk 11 17 21 23 24
Category: Java Virtual Machine / Runtime / Modules
A directed edge representing a dependency
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrModuleEvent.cpp:
ModuleDependencyClosure(const ModuleEntry* module, EventFunc ef) : ModuleEventCallbackClosure(ef), _module(module) {}
void do_module(ModuleEntry* entry);
};
class ModuleExportClosure : public ModuleEventCallbackClosure {
private:
const PackageEntry* const _package;
public:
ModuleExportClosure(const PackageEntry* pkg, EventFunc ef) : ModuleEventCallbackClosure(ef), _package(pkg) {}
void do_module(ModuleEntry* entry);
};
static void write_module_dependency_event(const void* from_module, const ModuleEntry* to_module) {
EventModuleRequire event(UNTIMED);
event.set_starttime(invocation_time);
event.set_endtime(invocation_time);
event.set_source((const ModuleEntry*)from_module);
event.set_requiredModule(to_module);
event.commit();
}
static void write_module_export_event(const void* package, const ModuleEntry* qualified_export) {
EventModuleExport event(UNTIMED);
event.set_starttime(invocation_time);
event.set_endtime(invocation_time);
Configuration | enabled | period |
---|---|---|
default | true | endChunk |
profiling | true | endChunk |
Field | Type | Description |
---|---|---|
source | Module | Source Module |
requiredModule | Module | Required Module Consider contributing a description to jfreventcollector. |
Examples 3
requiredModule | Module | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.desktop
|
name | string | java.desktop
|
version | string | 22
|
source | Module | |
classLoader | ClassLoader | |
name | string | app
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 10
|
name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | jdk/internal/loader
|
location | string | jrt:/jdk.unsupported.desktop
|
name | string | jdk.unsupported.desktop
|
version | string | 22
|
startTime | long: millis | 795760285625
|
requiredModule | Module | |
---|---|---|
classLoader | ClassLoader | |
name | string | app
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | jdk/internal/loader
|
location | string | jrt:/jdk.internal.ed
|
name | string | jdk.internal.ed
|
version | string | 21.0.1
|
source | Module | |
classLoader | ClassLoader | |
name | string | app
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | jdk/internal/loader
|
location | string | jrt:/jdk.jshell
|
name | string | jdk.jshell
|
version | string | 21.0.1
|
startTime | long: millis | 16763952708
|
requiredModule | Module | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.naming
|
name | string | java.naming
|
version | string | 21.0.1
|
source | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.management.rmi
|
name | string | java.management.rmi
|
version | string | 21.0.1
|
startTime | long: millis | 14998474333
|
ModuleExport
default profiling startTime every chunk 11 17 21 23 24
Category: Java Virtual Machine / Runtime / Modules
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrModuleEvent.cpp:
void do_module(ModuleEntry* entry);
};
static void write_module_dependency_event(const void* from_module, const ModuleEntry* to_module) {
EventModuleRequire event(UNTIMED);
event.set_starttime(invocation_time);
event.set_endtime(invocation_time);
event.set_source((const ModuleEntry*)from_module);
event.set_requiredModule(to_module);
event.commit();
}
static void write_module_export_event(const void* package, const ModuleEntry* qualified_export) {
EventModuleExport event(UNTIMED);
event.set_starttime(invocation_time);
event.set_endtime(invocation_time);
event.set_exportedPackage((const PackageEntry*)package);
event.set_targetModule(qualified_export);
event.commit();
}
void ModuleDependencyClosure::do_module(ModuleEntry* to_module) {
assert_locked_or_safepoint(Module_lock);
assert(to_module != nullptr, "invariant");
assert(_module != nullptr, "invariant");
Configuration | enabled | period |
---|---|---|
default | true | endChunk |
profiling | true | endChunk |
Field | Type | Description |
---|---|---|
exportedPackage | Package | Exported Package Consider contributing a description to jfreventcollector. |
targetModule | Module | Target Module Module to which the package is qualifiedly exported. If null or N/A, the package is unqualifiedly exported |
Examples 3
exportedPackage | Package | |
---|---|---|
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/math
|
startTime | long: millis | 16764024625
|
targetModule | Module | null
|
exportedPackage | Package | |
---|---|---|
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/jdk
|
startTime | long: millis | 14998523917
|
targetModule | Module | null
|
exportedPackage | Package | |
---|---|---|
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | com/fasterxml/jackson/databind/jsonFormatVisitors
|
startTime | long: millis | 795760593292
|
targetModule | Module | null
|
Java Application
ThreadStart
default profiling startTime eventThread stackTrace 11 17 21 23 24 graal vm
Category: Java Application
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/support/jfrThreadLocal.cpp:
const JfrBlobHandle& JfrThreadLocal::thread_blob() const {
return _thread;
}
static void send_java_thread_start_event(JavaThread* jt) {
assert(jt != nullptr, "invariant");
assert(Thread::current() == jt, "invariant");
if (!JfrJavaSupport::on_thread_start(jt)) {
// thread is excluded
return;
}
EventThreadStart event;
traceid thread_id = JfrThreadLocal::jvm_thread_id(jt);
assert(thread_id != 0, "invariant");
event.set_thread(thread_id);
event.set_parentThread(jt->jfr_thread_local()->parent_thread_id());
event.commit();
}
void JfrThreadLocal::on_start(Thread* t) {
assign_thread_id(t, t->jfr_thread_local());
if (JfrRecorder::is_recording()) {
JfrCheckpointManager::write_checkpoint(t);
src/hotspot/share/jfr/support/jfrThreadLocal.cpp:
// The starter thread ensures that the startee has a valid _vm_thread_id and _contextual_id.
// This is to avoid recursion in thread assignment since accessing the java threadObj can lead
// to events being fired, a situation the starter thread can handle but not the startee.
void JfrThreadLocal::on_java_thread_start(JavaThread* starter, JavaThread* startee) {
assert(starter != nullptr, "invariant");
assert(startee != nullptr, "invariant");
JfrThreadLocal* const tl = startee->jfr_thread_local();
assign_thread_id(startee, tl);
assert(vthread_id(startee) != 0, "invariant");
assert(jvm_thread_id(startee) == vthread_id(startee), "invariant");
if (JfrRecorder::is_recording() && EventThreadStart::is_enabled() && EventThreadStart::is_stacktrace_enabled()) {
// skip level 2 to skip frames Thread.start() and Thread.start0()
startee->jfr_thread_local()->set_cached_stack_trace_id(JfrStackTraceRepository::record(starter, 2));
}
}
void JfrThreadLocal::release(Thread* t) {
if (has_java_event_writer()) {
assert(t->is_Java_thread(), "invariant");
JfrJavaSupport::destroy_global_jni_handle(java_event_writer());
_java_event_writer = nullptr;
}
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
thread | Thread | New Java Thread |
parentThread | Thread | Parent Java Thread |
Examples 3
parentThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | main
|
javaThreadId | long | 1
|
osName | string | main
|
osThreadId | long | 5123
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 10
|
lineNumber | int | 32
|
method | Method | |
descriptor | string | (Ljava/lang/Runnable;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | execute
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | io/netty/util/concurrent/ThreadPerTaskExecutor
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | io/netty/util/concurrent
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 845395462375
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | shuffle-client-5-6
|
javaThreadId | long | 1847
|
osName | string | shuffle-client-5-6
|
osThreadId | long | 138523
|
virtual | boolean | false
|
parentThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.default-dispatcher-9
|
javaThreadId | long | 83
|
osName | string | UCT-akka.actor.default-dispatcher-9
|
osThreadId | long | 61955
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 2
|
lineNumber | int | 2573
|
method | Method | |
descriptor | string | (Ljava/lang/Thread;Ljdk/internal/vm/ThreadContainer;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | start
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/lang/System$2
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 8721782208
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.default-dispatcher-13
|
javaThreadId | long | 87
|
osName | string | UCT-akka.actor.default-dispatcher-13
|
osThreadId | long | 50179
|
virtual | boolean | false
|
parentThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | main
|
javaThreadId | long | 1
|
osName | string | main
|
osThreadId | long | 8707
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 2
|
lineNumber | int | 2573
|
method | Method | |
descriptor | string | (Ljava/lang/Thread;Ljdk/internal/vm/ThreadContainer;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | start
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/lang/System$2
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 6720543458
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.internal-dispatcher-2
|
javaThreadId | long | 41
|
osName | string | UCT-akka.actor.internal-dispatcher-2
|
osThreadId | long | 27403
|
virtual | boolean | false
|
ThreadEnd
default profiling startTime eventThread 11 17 21 23 24 graal vm
Category: Java Application
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/java.cpp:
// Actual shutdown logic begins here.
#if INCLUDE_JVMCI
if (EnableJVMCI) {
JVMCI::shutdown(thread);
}
#endif
// Hang forever on exit if we're reporting an error.
if (ShowMessageBoxOnError && VMError::is_error_reported()) {
os::infinite_sleep();
}
EventThreadEnd event;
if (event.should_commit()) {
event.set_thread(JFR_JVM_THREAD_ID(thread));
event.commit();
}
JFR_ONLY(Jfr::on_vm_shutdown(false, halt);)
// Stop the WatcherThread. We do this before disenrolling various
// PeriodicTasks to reduce the likelihood of races.
WatcherThread::stop();
src/hotspot/share/jfr/support/jfrThreadLocal.cpp:
assert(t != nullptr, "invariant");
assert(Thread::current() == t, "invariant");
assert(!tl->is_dead(), "invariant");
assert(tl->shelved_buffer() == nullptr, "invariant");
tl->_dead = true;
tl->release(t);
}
static void send_java_thread_end_event(JavaThread* jt, traceid tid) {
assert(jt != nullptr, "invariant");
assert(Thread::current() == jt, "invariant");
assert(tid != 0, "invariant");
if (JfrRecorder::is_recording()) {
EventThreadEnd event;
event.set_thread(tid);
event.commit();
ObjectSampleCheckpoint::on_thread_exit(tid);
}
}
void JfrThreadLocal::on_exit(Thread* t) {
assert(t != nullptr, "invariant");
JfrThreadLocal * const tl = t->jfr_thread_local();
assert(!tl->is_dead(), "invariant");
if (JfrRecorder::is_recording()) {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
thread | Thread | Java Thread |
Examples 3
startTime | long: millis | 6180517625
|
---|---|---|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | ForkJoinPool-1-worker-2
|
javaThreadId | long | 32
|
osName | string | ForkJoinPool-1-worker-2
|
osThreadId | long | 26891
|
virtual | boolean | false
|
startTime | long: millis | 845382293042
|
---|---|---|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | task-starvation-timer
|
javaThreadId | long | 1629
|
osName | string | task-starvation-timer
|
osThreadId | long | 80443
|
virtual | boolean | false
|
startTime | long: millis | 10752444167
|
---|---|---|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.default-dispatcher-9
|
javaThreadId | long | 56
|
osName | string | UCT-akka.actor.default-dispatcher-9
|
osThreadId | long | 36355
|
virtual | boolean | false
|
ThreadPark
default profiling startTime duration eventThread stackTrace 11 17 21 23 24 graal vm
Category: Java Application
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/prims/unsafe.cpp:
UNSAFE_ENTRY_SCOPED(jboolean, Unsafe_CompareAndSetInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) {
oop p = JNIHandles::resolve(obj);
volatile jint* addr = (volatile jint*)index_oop_from_field_offset_long(p, offset);
return Atomic::cmpxchg(addr, e, x) == e;
} UNSAFE_END
UNSAFE_ENTRY_SCOPED(jboolean, Unsafe_CompareAndSetLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) {
oop p = JNIHandles::resolve(obj);
volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset);
return Atomic::cmpxchg(addr, e, x) == e;
} UNSAFE_END
static void post_thread_park_event(EventThreadPark* event, const oop obj, jlong timeout_nanos, jlong until_epoch_millis) {
assert(event != nullptr, "invariant");
event->set_parkedClass((obj != nullptr) ? obj->klass() : nullptr);
event->set_timeout(timeout_nanos);
event->set_until(until_epoch_millis);
event->set_address((obj != nullptr) ? (u8)cast_from_oop<uintptr_t>(obj) : 0);
event->commit();
}
UNSAFE_ENTRY(void, Unsafe_Park(JNIEnv *env, jobject unsafe, jboolean isAbsolute, jlong time)) {
HOTSPOT_THREAD_PARK_BEGIN((uintptr_t) thread->parker(), (int) isAbsolute, time);
EventThreadPark event;
JavaThreadParkedState jtps(thread, time != 0);
thread->parker()->park(isAbsolute != 0, time);
if (event.should_commit()) {
const oop obj = thread->current_park_blocker();
if (time == 0) {
post_thread_park_event(&event, obj, min_jlong, min_jlong);
} else {
if (isAbsolute != 0) {
post_thread_park_event(&event, obj, min_jlong, time);
} else {
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 20 ms |
profiling | true | true | 10 ms |
Field | Type | Description |
---|---|---|
parkedClass | Class | Class Parked On |
timeout | long: nanos | Park Timeout |
until | long: epochmillis | Park Until |
address | ulong: address | Address of Object Parked |
Examples 3
address | ulong: address | 30143927872
|
---|---|---|
parkedClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
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.1
|
name | string | java/util/concurrent
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (ZJ)V
|
hidden | boolean | false
|
modifiers | int | 257
|
name | string | park
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | jdk/internal/misc/Unsafe
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | jdk/internal/misc
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 4645509542
|
timeout | long: nanos | -9223372036854775808
|
until | long: epochmillis | -9223372036854775808
|
address | ulong: address | 31586136128
|
---|---|---|
parkedClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
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.1
|
name | string | java/util/concurrent
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (ZJ)V
|
hidden | boolean | false
|
modifiers | int | 257
|
name | string | park
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | jdk/internal/misc/Unsafe
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | jdk/internal/misc
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 4846870167
|
timeout | long: nanos | -9223372036854775808
|
until | long: epochmillis | -9223372036854775808
|
address | ulong: address | 30121836664
|
---|---|---|
parkedClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/util/concurrent/locks
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (ZJ)V
|
hidden | boolean | false
|
modifiers | int | 257
|
name | string | park
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | jdk/internal/misc/Unsafe
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | jdk/internal/misc
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 791551448125
|
timeout | long: nanos | -9223372036854775808
|
until | long: epochmillis | -9223372036854775808
|
JavaMonitorEnter
default profiling startTime duration eventThread stackTrace 11 17 21 23 24 graal vm
Category: Java Application
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/objectMonitor.cpp:
// Async deflation is in progress and our contentions increment
// above lost the race to async deflation. Undo the work and
// force the caller to retry.
const oop l_object = object();
if (l_object != nullptr) {
// Attempt to restore the header/dmw to the object's header so that
// we only retry once if the deflater thread happens to be slow.
install_displaced_markword_in_object(l_object);
}
add_to_contentions(-1);
return false;
}
JFR_ONLY(JfrConditionalFlush<EventJavaMonitorEnter> flush(current);)
EventJavaMonitorEnter event;
if (event.is_started()) {
event.set_monitorClass(object()->klass());
// Set an address that is 'unique enough', such that events close in
// time and with the same address are likely (but not guaranteed) to
// belong to the same object.
event.set_address((uintptr_t)this);
}
{ // Change java thread status to indicate blocked on monitor enter.
JavaThreadBlockedOnMonitorEnterState jtbmes(current, this);
src/hotspot/share/runtime/objectMonitor.cpp:
if (_recursions != 0) {
_recursions--; // this is simple recursive enter
return;
}
// Invariant: after setting Responsible=null an thread must execute
// a MEMBAR or other serializing instruction before fetching EntryList|cxq.
_Responsible = nullptr;
#if INCLUDE_JFR
// get the owner's thread id for the MonitorEnter event
// if it is enabled and the thread isn't suspended
if (not_suspended && EventJavaMonitorEnter::is_enabled()) {
_previous_owner_tid = JFR_THREAD_ID(current);
}
#endif
for (;;) {
assert(current == owner_raw(), "invariant");
// Drop the lock.
// release semantics: prior loads and stores from within the critical section
// must not float (reorder) past the following store that drops the lock.
// Uses a storeload to separate release_store(owner) from the
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 20 ms |
profiling | true | true | 10 ms |
Field | Type | Description |
---|---|---|
monitorClass | Class | Monitor Class Consider contributing a description to jfreventcollector. |
previousOwner | Thread | Previous Monitor Owner |
address | ulong: address | Monitor Address |
Examples 3
address | ulong: address | 105553176308912
|
---|---|---|
monitorClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | edu/rice/habanero/actors/AkkaActorState$actorLatch$
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | edu/rice/habanero/actors
|
previousOwner | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.default-dispatcher-17
|
javaThreadId | long | 70
|
osName | string | UCT-akka.actor.default-dispatcher-17
|
osThreadId | long | 45571
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | -1
|
lineNumber | int | 109
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | countDown
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | edu/rice/habanero/actors/AkkaActorState$actorLatch$
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | edu/rice/habanero/actors
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 8188073875
|
address | ulong: address | 105553209950208
|
---|---|---|
monitorClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | org/apache/spark/shuffle/IndexShuffleBlockResolver
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/shuffle
|
previousOwner | 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 | 1678
|
osName | string | Executor task launch worker for task 8.0 in stage 22.0 (TID 163)
|
osThreadId | long | 162063
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 232
|
lineNumber | int | 365
|
method | Method | |
descriptor | string | (IJ[J[JLjava/io/File;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | writeMetadataFileAndCommit
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | org/apache/spark/shuffle/IndexShuffleBlockResolver
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/shuffle
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 836807966417
|
address | ulong: address | 105553170730032
|
---|---|---|
monitorClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | edu/rice/habanero/actors/AkkaActorState$actorLatch$
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | edu/rice/habanero/actors
|
previousOwner | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.default-dispatcher-9
|
javaThreadId | long | 51
|
osName | string | UCT-akka.actor.default-dispatcher-9
|
osThreadId | long | 42499
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | -1
|
lineNumber | int | 115
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | countUp
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | edu/rice/habanero/actors/AkkaActorState$actorLatch$
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | edu/rice/habanero/actors
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 7350944708
|
JavaMonitorWait
default profiling startTime duration eventThread stackTrace 11 17 21 23 24 graal vm
Category: Java Application
Waiting on a Java monitor
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/objectMonitor.cpp:
_recursions = 0;
return true;
}
THROW_MSG_(vmSymbols::java_lang_IllegalMonitorStateException(),
"current thread is not owner", false);
}
static inline bool is_excluded(const Klass* monitor_klass) {
assert(monitor_klass != nullptr, "invariant");
NOT_JFR_RETURN_(false);
JFR_ONLY(return vmSymbols::jdk_jfr_internal_HiddenWait() == monitor_klass->name();)
}
static void post_monitor_wait_event(EventJavaMonitorWait* event,
ObjectMonitor* monitor,
uint64_t notifier_tid,
jlong timeout,
bool timedout) {
assert(event != nullptr, "invariant");
assert(monitor != nullptr, "invariant");
const Klass* monitor_klass = monitor->object()->klass();
if (is_excluded(monitor_klass)) {
return;
}
event->set_monitorClass(monitor_klass);
src/hotspot/share/runtime/objectMonitor.cpp:
// -----------------------------------------------------------------------------
// Wait/Notify/NotifyAll
//
// Note: a subset of changes to ObjectMonitor::wait()
// will need to be replicated in complete_exit
void ObjectMonitor::wait(jlong millis, bool interruptible, TRAPS) {
JavaThread* current = THREAD;
assert(InitDone, "Unexpectedly not initialized");
CHECK_OWNER(); // Throws IMSE if not owner.
EventJavaMonitorWait event;
// check for a pending interrupt
if (interruptible && current->is_interrupted(true) && !HAS_PENDING_EXCEPTION) {
// post monitor waited event. Note that this is past-tense, we are done waiting.
if (JvmtiExport::should_post_monitor_waited()) {
// Note: 'false' parameter is passed here because the
// wait was not timed out due to thread interrupt.
JvmtiExport::post_monitor_waited(current, this, false);
// In this short circuit of the monitor wait protocol, the
// current thread never drops ownership of the monitor and
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 20 ms |
profiling | true | true | 10 ms |
Field | Type | Description |
---|---|---|
monitorClass | Class | Monitor Class Class of object waited on |
notifier | Thread | Notifier Thread Notifying Thread |
timeout | long: millis | Timeout Maximum wait time |
timedOut | boolean | Timed Out Wait has been timed out |
address | ulong: address | Monitor Address Address of object waited on |
Examples 3
address | ulong: address | 105553176672896
|
---|---|---|
monitorClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | scala/concurrent/stm/ccstm/TxnLevelImpl
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/concurrent/stm/ccstm
|
notifier | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | Thread-33
|
javaThreadId | long | 366
|
osName | string | Thread-33
|
osThreadId | long | 55047
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (J)V
|
hidden | boolean | false
|
modifiers | int | 274
|
name | string | wait0
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/Object
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 65148418917
|
timedOut | boolean | false
|
timeout | long: millis | 0
|
address | ulong: address | 105553169925344
|
---|---|---|
monitorClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | org/renaissance/twitter/finagle/FinagleHttp$WorkerThread
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/renaissance/twitter/finagle
|
notifier | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | finagle-http-worker-2
|
javaThreadId | long | 304
|
osName | string | finagle-http-worker-2
|
osThreadId | long | 42007
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (J)V
|
hidden | boolean | false
|
modifiers | int | 274
|
name | string | wait0
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/Object
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 51133649208
|
timedOut | boolean | false
|
timeout | long: millis | 0
|
address | ulong: address | 105553345147904
|
---|---|---|
monitorClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/Object
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/lang
|
notifier | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | Executor task launch worker-2
|
javaThreadId | long | 1939
|
osName | string | Executor task launch worker-2
|
osThreadId | long | 124183
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (J)V
|
hidden | boolean | false
|
modifiers | int | 274
|
name | string | wait0
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/Object
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 871688705750
|
timedOut | boolean | false
|
timeout | long: millis | 0
|
JavaMonitorInflate
profiling startTime duration eventThread stackTrace 11 17 21 23 24 graal vm
Category: Java Application
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/synchronizer.cpp:
if (!ret_code) {
log_info(monitorinflation)("Async Deflation DID NOT happen after %d checks.", N_CHECKS);
}
return ret_code;
}
jlong ObjectSynchronizer::time_since_last_async_deflation_ms() {
return (os::javaTimeNanos() - last_async_deflation_time_ns()) / (NANOUNITS / MILLIUNITS);
}
static void post_monitor_inflate_event(EventJavaMonitorInflate* event,
const oop obj,
ObjectSynchronizer::InflateCause cause) {
assert(event != nullptr, "invariant");
event->set_monitorClass(obj->klass());
event->set_address((uintptr_t)(void*)obj);
event->set_cause((u1)cause);
event->commit();
}
// Fast path code shared by multiple functions
void ObjectSynchronizer::inflate_helper(oop obj) {
src/hotspot/share/runtime/synchronizer.cpp:
assert(thread == Thread::current() || thread->is_obj_deopt_suspend(), "must be");
return inflate_impl(thread, obj, cause);
}
ObjectMonitor* ObjectSynchronizer::inflate_impl(JavaThread* inflating_thread, oop object, const InflateCause cause) {
// The JavaThread* inflating_thread parameter is only used by LM_LIGHTWEIGHT and requires
// that the inflating_thread == Thread::current() or is suspended throughout the call by
// some other mechanism.
// Even with LM_LIGHTWEIGHT the thread might be nullptr when called from a non
// JavaThread. (As may still be the case from FastHashCode). However it is only
// important for the correctness of the LM_LIGHTWEIGHT algorithm that the thread
// is set when called from ObjectSynchronizer::enter from the owning thread,
// ObjectSynchronizer::enter_for from any thread, or ObjectSynchronizer::exit.
EventJavaMonitorInflate event;
for (;;) {
const markWord mark = object->mark_acquire();
// The mark can be in one of the following states:
// * inflated - Just return if using stack-locking.
// If using fast-locking and the ObjectMonitor owner
// is anonymous and the inflating_thread owns the
// object lock, then we make the inflating_thread
// the ObjectMonitor owner and remove the lock from
// the inflating_thread's lock stack.
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | false | true | 20 ms |
profiling | true | true | 10 ms |
Field | Type | Description |
---|---|---|
monitorClass | Class | Monitor Class Consider contributing a description to jfreventcollector. |
address | ulong: address | Monitor Address |
cause | InflateCause | Monitor Inflation Cause Cause of inflation |
ObjectAllocationInNewTLAB
startTime eventThread stackTrace 11 17 21 23 24 graal vm
Category: Java Application
Allocation in new Thread Local Allocation Buffer
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/allocTracer.cpp:
void AllocTracer::send_allocation_outside_tlab(Klass* klass, HeapWord* obj, size_t alloc_size, JavaThread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, true, thread);)
EventObjectAllocationOutsideTLAB event;
if (event.should_commit()) {
event.set_objectClass(klass);
event.set_allocationSize(alloc_size);
event.commit();
}
}
void AllocTracer::send_allocation_in_new_tlab(Klass* klass, HeapWord* obj, size_t tlab_size, size_t alloc_size, JavaThread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, false, thread);)
EventObjectAllocationInNewTLAB event;
if (event.should_commit()) {
event.set_objectClass(klass);
event.set_allocationSize(alloc_size);
event.set_tlabSize(tlab_size);
event.commit();
}
}
void AllocTracer::send_allocation_requiring_gc_event(size_t size, uint gcId) {
EventAllocationRequiringGC event;
if (event.should_commit()) {
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
objectClass | Class | Object Class Class of allocated object |
allocationSize | ulong: bytes | Allocation Size |
tlabSize | ulong: bytes | TLAB Size |
Examples 3
allocationSize | ulong: bytes | 16
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/Object
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/lang
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | 62
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | run
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | org/apache/spark/scheduler/TaskResultGetter$$anon$3
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/scheduler
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 792227654208
|
tlabSize | ulong: bytes | 9992
|
allocationSize | ulong: bytes | 15376
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | [B
|
package | Package | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 15
|
lineNumber | int | 3541
|
method | Method | |
descriptor | string | ([BI)[B
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | copyOf
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | java/util/Arrays
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 666947542
|
tlabSize | ulong: bytes | 1357552
|
allocationSize | ulong: bytes | 144
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | [I
|
package | Package | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 143
|
lineNumber | int | 1934
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | compile
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | java/util/regex/Pattern
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util/regex
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 952121708
|
tlabSize | ulong: bytes | 1434064
|
ObjectAllocationOutsideTLAB
startTime eventThread stackTrace 11 17 21 23 24
Category: Java Application
Allocation outside Thread Local Allocation Buffers
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/allocTracer.cpp:
#if INCLUDE_JFR
#include "jfr/support/jfrAllocationTracer.hpp"
#endif
void AllocTracer::send_allocation_outside_tlab(Klass* klass, HeapWord* obj, size_t alloc_size, JavaThread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, true, thread);)
EventObjectAllocationOutsideTLAB event;
if (event.should_commit()) {
event.set_objectClass(klass);
event.set_allocationSize(alloc_size);
event.commit();
}
}
void AllocTracer::send_allocation_in_new_tlab(Klass* klass, HeapWord* obj, size_t tlab_size, size_t alloc_size, JavaThread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, false, thread);)
EventObjectAllocationInNewTLAB event;
if (event.should_commit()) {
event.set_objectClass(klass);
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
objectClass | Class | Object Class Class of allocated object |
allocationSize | ulong: bytes | Allocation Size |
Examples 3
allocationSize | ulong: bytes | 32
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/lang/StringLatin1$CharsSpliterator
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 7
|
lineNumber | int | 4311
|
method | Method | |
descriptor | string | ()Ljava/util/stream/IntStream;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | chars
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
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.1
|
name | string | java/lang
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 1873339667
|
allocationSize | ulong: bytes | 26080
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | [Ljava/lang/Object;
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 7
|
lineNumber | int | 3513
|
method | Method | |
descriptor | string | ([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | copyOf
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | java/util/Arrays
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 2009642958
|
allocationSize | ulong: bytes | 32784
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1041
|
name | string | [B
|
package | Package | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 31
|
lineNumber | int | 102
|
method | Method | |
descriptor | string | (Ljava/io/OutputStream;ILnet/jpountz/lz4/LZ4Compressor;Ljava/util/zip/Checksum;Z)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 | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | net/jpountz/lz4/LZ4BlockOutputStream
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | net/jpountz/lz4
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 800688658708
|
ObjectAllocationSample
throttle default profiling startTime eventThread stackTrace 16 17 21 23 24 graal vm
Category: Java Application
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/support/jfrObjectAllocationSample.cpp:
inline bool send_allocation_sample(const Klass* klass, int64_t allocated_bytes, JfrThreadLocal* tl) {
EventObjectAllocationSample event;
if (event.should_commit()) {
const int64_t weight = allocated_bytes - tl->last_allocated_bytes();
assert(weight > 0, "invariant");
event.set_objectClass(klass);
event.set_weight(weight);
event.commit();
tl->set_last_allocated_bytes(allocated_bytes);
return true;
}
return false;
}
inline int64_t estimate_tlab_size_bytes(Thread* thread) {
const size_t desired_tlab_size_bytes = thread->tlab().desired_size() * HeapWordSize;
Configuration | enabled | stackTrace | throttle |
---|---|---|---|
default | true | true | 150/s |
profiling | true | true | 300/s |
Field | Type | Description |
---|---|---|
objectClass | Class | Object Class Class of allocated object |
weight | long: bytes | Sample Weight The relative weight of the sample. Aggregating the weights for a large number of samples, for a particular class, thread or stack trace, gives a statistically accurate representation of the allocation pressure |
Examples 3
objectClass | Class | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
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.1
|
name | string | java/lang
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 198
|
lineNumber | int | 403
|
method | Method | |
descriptor | string | (Z[Z)Ljava/lang/String;
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | implReadLine
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/io/BufferedReader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/io
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 1145058083
|
weight | long: bytes | 1313816
|
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 | 22
|
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 | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/runtime
|
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 | 22
|
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 | 22
|
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 | 792256519667
|
weight | long: bytes | 7904
|
objectClass | Class | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | [B
|
package | Package | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 1
|
lineNumber | int | 161
|
method | Method | |
descriptor | string | ([CII)[B
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | compress
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 48
|
name | string | java/lang/StringUTF16
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 929708083
|
weight | long: bytes | 1432952
|
JavaExceptionThrow
startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionThrownEvent.java
Category: Java Application
An object derived from java.lang.Exception has been created
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
message | string | Message Consider contributing a description to jfreventcollector. |
thrownClass | Class | Class Consider contributing a description to jfreventcollector. |
Examples 3
message | string | null
|
---|---|---|
startTime | long: millis | 792249041750
|
thrownClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | scala/runtime/NonLocalReturnControl
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/runtime
|
message | string | scala.collection.IterableOnceOps
|
---|---|---|
startTime | long: millis | 554175000
|
thrownClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/ClassNotFoundException
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
message | string | scala.collection.LinearSeq
|
---|---|---|
startTime | long: millis | 662116750
|
thrownClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/ClassNotFoundException
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
FileWrite
default profiling startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/FileWriteEvent.java
Category: Java Application
Excludes in stack trace: java.io.FileOutputStream, java.io.RandomAccessFile, sun.nio.ch.FileChannelImpl
Appearing in: G1GC, ParallelGC, ShenandoahGC, ZGC
Missing in: SerialGC
Writing data to a file
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
/**
* This class registers all mirror events.
*/
final class MirrorEvents {
private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();
// Add mirror event mapping here. See MirrorEvent class for details.
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
src/jdk.jfr/share/classes/jdk/jfr/events/FileWriteEvent.java:
@Name(Type.EVENT_NAME_PREFIX + "FileWrite")
@Label("File Write")
@Category("Java Application")
@Description("Writing data to a file")
@StackFilter({"java.io.FileOutputStream", "java.io.RandomAccessFile", "sun.nio.ch.FileChannelImpl"})
public final class FileWriteEvent extends MirrorEvent {
@Label("Path")
@Description("Full path of the file, or N/A if a file descriptor was used to create the stream, for example System.out and System.err")
public String path;
@Label("Bytes Written")
@Description("Number of bytes written to the file")
@DataAmount
public long bytesWritten;
}
src/java.base/share/classes/java/io/FileOutputStream.java:
private void traceWrite(int b, boolean append) throws IOException {
long bytesWritten = 0;
long start = 0;
try {
start = FileWriteEvent.timestamp();
write(b, append);
bytesWritten = 1;
} finally {
long duration = FileWriteEvent.timestamp() - start;
if (FileWriteEvent.shouldCommit(duration)) {
FileWriteEvent.commit(start, duration, path, bytesWritten);
}
}
src/java.base/share/classes/java/io/FileOutputStream.java:
*/
@Override
public void write(int b) throws IOException {
boolean append = FD_ACCESS.getAppend(fd);
if (jfrTracing && FileWriteEvent.enabled()) {
traceWrite(b, append);
return;
src/java.base/share/classes/java/io/FileOutputStream.java:
private void traceWriteBytes(byte b[], int off, int len, boolean append) throws IOException {
long bytesWritten = 0;
long start = 0;
try {
start = FileWriteEvent.timestamp();
writeBytes(b, off, len, append);
bytesWritten = len;
} finally {
long duration = FileWriteEvent.timestamp() - start;
if (FileWriteEvent.shouldCommit(duration)) {
FileWriteEvent.commit(start, duration, path, bytesWritten);
}
}
src/java.base/share/classes/java/io/FileOutputStream.java:
*/
@Override
public void write(byte[] b) throws IOException {
boolean append = FD_ACCESS.getAppend(fd);
if (jfrTracing && FileWriteEvent.enabled()) {
traceWriteBytes(b, 0, b.length, append);
return;
src/java.base/share/classes/java/io/FileOutputStream.java:
*/
@Override
public void write(byte[] b, int off, int len) throws IOException {
boolean append = FD_ACCESS.getAppend(fd);
if (jfrTracing && FileWriteEvent.enabled()) {
traceWriteBytes(b, off, len, append);
return;
src/java.base/share/classes/java/io/RandomAccessFile.java:
* @param b the {@code byte} to be written.
* @throws IOException if an I/O error occurs.
*/
public void write(int b) throws IOException {
if (jfrTracing && FileWriteEvent.enabled()) {
traceImplWrite(b);
return;
}
src/java.base/share/classes/java/io/RandomAccessFile.java:
private void traceImplWrite(int b) throws IOException {
long bytesWritten = 0;
long start = 0;
try {
start = FileWriteEvent.timestamp();
implWrite(b);
bytesWritten = 1;
} finally {
long duration = FileWriteEvent.timestamp() - start;
if (FileWriteEvent.shouldCommit(duration)) {
FileWriteEvent.commit(start, duration, path, bytesWritten);
}
}
}
src/java.base/share/classes/java/io/RandomAccessFile.java:
* @param len the number of bytes that are written
* @throws IOException If an I/O error has occurred.
*/
private void writeBytes(byte[] b, int off, int len) throws IOException {
if (jfrTracing && FileWriteEvent.enabled()) {
traceImplWriteBytes(b, off, len);
return;
}
src/java.base/share/classes/java/io/RandomAccessFile.java:
private void traceImplWriteBytes(byte b[], int off, int len) throws IOException {
long bytesWritten = 0;
long start = 0;
try {
start = FileWriteEvent.timestamp();
implWriteBytes(b, off, len);
bytesWritten = len;
} finally {
long duration = FileWriteEvent.timestamp() - start;
if (FileWriteEvent.shouldCommit(duration)) {
FileWriteEvent.commit(start, duration, path, bytesWritten);
}
}
}
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
@Override
public int write(ByteBuffer src) throws IOException {
if (jfrTracing && FileWriteEvent.enabled()) {
return traceImplWrite(src);
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
int bytesWritten = 0;
long start = 0;
try {
start = FileWriteEvent.timestamp();
bytesWritten = implWrite(src);
} finally {
long duration = FileWriteEvent.timestamp() - start;
if (FileWriteEvent.shouldCommit(duration)) {
long bytes = bytesWritten > 0 ? bytesWritten : 0;
FileWriteEvent.commit(start, duration, path, bytes);
}
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
@Override
public long write(ByteBuffer[] srcs, int offset, int length) throws IOException {
if (jfrTracing && FileWriteEvent.enabled()) {
return traceImplWrite(srcs, offset, length);
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
long bytesWritten = 0;
long start = 0;
try {
start = FileWriteEvent.timestamp();
bytesWritten = implWrite(srcs, offset, length);
} finally {
long duration = FileWriteEvent.timestamp() - start;
if (FileWriteEvent.shouldCommit(duration)) {
long bytes = bytesWritten > 0 ? bytesWritten : 0;
FileWriteEvent.commit(start, duration, path, bytes);
}
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
int bytesWritten = 0;
long start = 0;
try {
start = FileWriteEvent.timestamp();
bytesWritten = implWrite(src, position);
} finally {
long duration = FileWriteEvent.timestamp() - start;
if (FileWriteEvent.shouldCommit(duration)) {
long bytes = bytesWritten > 0 ? bytesWritten : 0;
FileWriteEvent.commit(start, duration, path, bytes);
}
src/java.base/share/classes/jdk/internal/event/FileWriteEvent.java:
package jdk.internal.event;
/**
* Event recording file writes.
*/
public final class FileWriteEvent extends Event {
// The order of these fields must be the same as the parameters in
// commit(..., String, long)
public String path;
public long bytesWritten;
public static boolean enabled() {
// Generated by JFR
return false;
}
public static long timestamp() {
// Generated by JFR
return 0L;
}
public static boolean shouldCommit(long duration) {
// Generated by JFR
return false;
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 20 ms |
profiling | true | true | 10 ms |
Field | Type | Description |
---|---|---|
path | string | Path Full path of the file, or N/A if a file descriptor was used to create the stream, for example System.out and System.err |
bytesWritten | long: bytes | Bytes Written Number of bytes written to the file |
Examples 3
VirtualThreadEnd
startTime duration 19 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadEndEvent.java
Category: Java Application
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
};
private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
mirrorLookup.put(eventClassName, mirrorClass);
src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadEndEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;
@Category("Java Application")
@Label("Virtual Thread End")
@Name("jdk.VirtualThreadEnd")
@RemoveFields({"duration", "stackTrace"})
public final class VirtualThreadEndEvent extends MirrorEvent {
@Label("Thread Id")
public long javaThreadId;
}
src/java.base/share/classes/java/lang/VirtualThread.java:
Object bindings = Thread.scopedValueBindings();
try {
runWith(bindings, task);
} catch (Throwable exc) {
dispatchUncaughtException(exc);
} finally {
try {
// pop any remaining scopes from the stack, this may block
StackableScope.popAll();
// emit JFR event if enabled
if (VirtualThreadEndEvent.isTurnedOn()) {
var event = new VirtualThreadEndEvent();
event.javaThreadId = threadId();
event.commit();
}
} finally {
// notify JVMTI, may post VirtualThreadEnd event
notifyJvmtiEnd();
}
}
}
src/java.base/share/classes/jdk/internal/event/VirtualThreadEndEvent.java:
package jdk.internal.event;
/**
* Event recording that a virtual thread has terminated.
*/
public class VirtualThreadEndEvent extends Event {
private static final VirtualThreadEndEvent EVENT = new VirtualThreadEndEvent();
/**
* Returns {@code true} if event is enabled, {@code false} otherwise.
*/
public static boolean isTurnedOn() {
return EVENT.isEnabled();
}
public long javaThreadId;
}
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
javaThreadId | long | Thread Id |
SocketRead
default profiling startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/SocketReadEvent.java
Category: Java Application
Reading data from a socket
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
final class MirrorEvents {
private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();
// Add mirror event mapping here. See MirrorEvent class for details.
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
src/jdk.jfr/share/classes/jdk/jfr/events/SocketReadEvent.java:
@Name(Type.EVENT_NAME_PREFIX + "SocketRead")
@Label("Socket Read")
@Category("Java Application")
@Description("Reading data from a socket")
public final class SocketReadEvent extends MirrorEvent {
@Label("Remote Host")
public String host;
@Label("Remote Address")
public String address;
@Label("Remote Port")
public int port;
@Label("Timeout Value")
src/java.base/share/classes/java/net/Socket.java:
@Override
public int read() throws IOException {
byte[] a = new byte[1];
int n = read(a, 0, 1);
return (n > 0) ? (a[0] & 0xff) : -1;
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
if (!SocketReadEvent.enabled()) {
return implRead(b, off, len);
}
long start = SocketReadEvent.timestamp();
int nbytes = implRead(b, off, len);
long duration = SocketReadEvent.timestamp() - start;
if (SocketReadEvent.shouldCommit(duration)) {
SocketReadEvent.emit(start, duration, nbytes, parent.getRemoteSocketAddress(), getSoTimeout());
}
return nbytes;
}
private int implRead(byte[] b, int off, int len) throws IOException {
try {
return in.read(b, off, len);
src/java.base/share/classes/sun/nio/ch/SocketInputStream.java:
private int implRead(byte[] b, int off, int len, int timeout) throws IOException {
if (timeout > 0) {
long nanos = MILLISECONDS.toNanos(timeout);
return sc.blockingRead(b, off, len, nanos);
} else {
return sc.blockingRead(b, off, len, 0);
}
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
int timeout = timeoutSupplier.getAsInt();
if (!SocketReadEvent.enabled()) {
return implRead(b, off, len, timeout);
}
long start = SocketReadEvent.timestamp();
int n = implRead(b, off, len, timeout);
SocketReadEvent.offer(start, n, sc.remoteAddress(), timeout);
return n;
}
@Override
public int available() throws IOException {
return sc.available();
}
@Override
public void close() throws IOException {
sc.close();
src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java:
} finally {
readLock.unlock();
}
}
@Override
public int read(ByteBuffer buf) throws IOException {
if (!SocketReadEvent.enabled()) {
return implRead(buf);
}
long start = SocketReadEvent.timestamp();
int nbytes = implRead(buf);
SocketReadEvent.offer(start, nbytes, remoteAddress(), 0);
return nbytes;
}
@Override
public long read(ByteBuffer[] dsts, int offset, int length)
throws IOException
{
if (!SocketReadEvent.enabled()) {
return implRead(dsts, offset, length);
}
long start = SocketReadEvent.timestamp();
long nbytes = implRead(dsts, offset, length);
SocketReadEvent.offer(start, nbytes, remoteAddress(), 0);
return nbytes;
}
/**
* Marks the beginning of a write operation that might block.
src/java.base/share/classes/jdk/internal/event/SocketReadEvent.java:
/**
* A JFR event for socket read operations. This event is mirrored in
* {@code jdk.jfr.events.SocketReadEvent } where the metadata for the event is
* provided with annotations. Some of the methods are replaced by generated
* methods when jfr is enabled. Note that the order of the arguments of the
* {@link #commit(long, long, String, String, int, long, long, boolean)} method
* must be the same as the order of the fields.
*/
public class SocketReadEvent extends Event {
// THE ORDER OF THE FOLLOWING FIELDS IS IMPORTANT!
// The order must match the argument order of the generated commit method.
public String host;
public String address;
public int port;
public long timeout;
public long bytesRead;
public boolean endOfStream;
/**
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 20 ms |
profiling | true | true | 10 ms |
Field | Type | Description |
---|---|---|
host | string | Remote Host |
address | string | Remote Address |
port | int | Remote Port |
timeout | long: millis | Timeout Value |
bytesRead | long: bytes | Bytes Read Number of bytes read from the socket |
endOfStream | boolean | End of Stream If end of stream was reached |
Examples 3
FileRead
default profiling startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/FileReadEvent.java
Category: Java Application
Excludes in stack trace: java.io.FileInputStream, java.io.RandomAccessFile, sun.nio.ch.FileChannelImpl
Appearing in: G1GC, SerialGC, ZGC
Missing in: ParallelGC, ShenandoahGC
Reading data from a file
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
/**
* This class registers all mirror events.
*/
final class MirrorEvents {
private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();
// Add mirror event mapping here. See MirrorEvent class for details.
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
src/jdk.jfr/share/classes/jdk/jfr/events/FileReadEvent.java:
@Name(Type.EVENT_NAME_PREFIX + "FileRead")
@Label("File Read")
@Category("Java Application")
@Description("Reading data from a file")
@StackFilter({"java.io.FileInputStream", "java.io.RandomAccessFile", "sun.nio.ch.FileChannelImpl"})
public final class FileReadEvent extends MirrorEvent {
@Label("Path")
@Description("Full path of the file, or N/A if a file descriptor was used to create the stream, for example System.in")
public String path;
@Label("Bytes Read")
@Description("Number of bytes read from the file (possibly 0)")
@DataAmount
public long bytesRead;
@Label("End of File")
src/java.base/share/classes/java/io/FileInputStream.java:
*/
@Override
public int read() throws IOException {
if (jfrTracing && FileReadEvent.enabled()) {
return traceRead0();
}
src/java.base/share/classes/java/io/FileInputStream.java:
long bytesRead = 0;
long start = 0;
try {
start = FileReadEvent.timestamp();
result = read0();
if (result < 0) {
src/java.base/share/classes/java/io/FileInputStream.java:
bytesRead = 1;
}
} finally {
long duration = FileReadEvent.timestamp() - start;
if (FileReadEvent.shouldCommit(duration)) {
FileReadEvent.commit(start, duration, path, bytesRead, endOfFile);
}
}
src/java.base/share/classes/java/io/FileInputStream.java:
int bytesRead = 0;
long start = 0;
try {
start = FileReadEvent.timestamp();
bytesRead = readBytes(b, off, len);
} finally {
long duration = FileReadEvent.timestamp() - start;
if (FileReadEvent.shouldCommit(duration)) {
if (bytesRead < 0) {
FileReadEvent.commit(start, duration, path, 0L, true);
} else {
FileReadEvent.commit(start, duration, path, bytesRead, false);
}
}
src/java.base/share/classes/java/io/FileInputStream.java:
*/
@Override
public int read(byte[] b) throws IOException {
if (jfrTracing && FileReadEvent.enabled()) {
return traceReadBytes(b, 0, b.length);
}
src/java.base/share/classes/java/io/FileInputStream.java:
*/
@Override
public int read(byte[] b, int off, int len) throws IOException {
if (jfrTracing && FileReadEvent.enabled()) {
return traceReadBytes(b, off, len);
}
src/java.base/share/classes/java/io/RandomAccessFile.java:
* @throws IOException if an I/O error occurs. Not thrown if
* end-of-file has been reached.
*/
public int read() throws IOException {
if (jfrTracing && FileReadEvent.enabled()) {
return traceRead0();
}
src/java.base/share/classes/java/io/RandomAccessFile.java:
long bytesRead = 0;
boolean endOfFile = false;
long start = 0;
try {
start = FileReadEvent.timestamp();
result = read0();
if (result < 0) {
src/java.base/share/classes/java/io/RandomAccessFile.java:
} else {
bytesRead = 1;
}
} finally {
long duration = FileReadEvent.timestamp() - start;
if (FileReadEvent.shouldCommit(duration)) {
FileReadEvent.commit(start, duration, path, bytesRead, endOfFile);
}
}
src/java.base/share/classes/java/io/RandomAccessFile.java:
* @param len the number of bytes to read.
* @throws IOException If an I/O error has occurred.
*/
private int readBytes(byte[] b, int off, int len) throws IOException {
if (jfrTracing && FileReadEvent.enabled()) {
return traceReadBytes0(b, off, len);
}
src/java.base/share/classes/java/io/RandomAccessFile.java:
private int traceReadBytes0(byte b[], int off, int len) throws IOException {
int bytesRead = 0;
long start = 0;
try {
start = FileReadEvent.timestamp();
bytesRead = readBytes0(b, off, len);
} finally {
long duration = FileReadEvent.timestamp() - start;
if (FileReadEvent.shouldCommit(duration)) {
if (bytesRead < 0) {
FileReadEvent.commit(start, duration, path, 0L, true);
} else {
FileReadEvent.commit(start, duration, path, bytesRead, false);
}
}
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
@Override
public int read(ByteBuffer dst) throws IOException {
if (jfrTracing && FileReadEvent.enabled()) {
return traceImplRead(dst);
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
long start = 0;
try {
start = FileReadEvent.timestamp();
bytesRead = implRead(dst);
} finally {
long duration = FileReadEvent.timestamp() - start;
if (FileReadEvent.shouldCommit(duration)) {
if (bytesRead < 0) {
FileReadEvent.commit(start, duration, path, 0L, true);
} else {
FileReadEvent.commit(start, duration, path, bytesRead, false);
}
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
@Override
public long read(ByteBuffer[] dsts, int offset, int length) throws IOException {
if (jfrTracing && FileReadEvent.enabled()) {
return traceImplRead(dsts, offset, length);
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
long start = 0;
try {
start = FileReadEvent.timestamp();
bytesRead = implRead(dsts, offset, length);
} finally {
long duration = FileReadEvent.timestamp() - start;
if (FileReadEvent.shouldCommit(duration)) {
if (bytesRead < 0) {
FileReadEvent.commit(start, duration, path, 0L, true);
} else {
FileReadEvent.commit(start, duration, path, bytesRead, false);
}
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
@Override
public int read(ByteBuffer dst, long position) throws IOException {
if (jfrTracing && FileReadEvent.enabled()) {
return traceImplRead(dst, position);
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
long start = 0;
try {
start = FileReadEvent.timestamp();
bytesRead = implRead(dst, position);
} finally {
long duration = FileReadEvent.timestamp() - start;
if (FileReadEvent.shouldCommit(duration)) {
if (bytesRead < 0) {
FileReadEvent.commit(start, duration, path, 0L, true);
} else {
FileReadEvent.commit(start, duration, path, bytesRead, false);
}
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
@Override
public int write(ByteBuffer src, long position) throws IOException {
if (jfrTracing && FileReadEvent.enabled()) {
return traceImplWrite(src, position);
src/java.base/share/classes/jdk/internal/event/FileReadEvent.java:
package jdk.internal.event;
/**
* Event recording file reads.
*/
public final class FileReadEvent extends Event {
// The order of these fields must be the same as the parameters in
// commit(..., String, long, boolean)
public String path;
public long bytesRead;
public boolean endOfFile;
public static boolean enabled() {
// Generated by JFR
return false;
}
public static long timestamp() {
// Generated by JFR
return 0L;
}
public static boolean shouldCommit(long duration) {
// Generated by JFR
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 20 ms |
profiling | true | true | 10 ms |
Field | Type | Description |
---|---|---|
path | string | Path Full path of the file, or N/A if a file descriptor was used to create the stream, for example System.in |
bytesRead | long: bytes | Bytes Read Number of bytes read from the file (possibly 0) |
endOfFile | boolean | End of File If end of file was reached |
Examples 3
VirtualThreadPinned
default profiling startTime duration 19 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadPinnedEvent.java
Category: Java Application
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
};
private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
mirrorLookup.put(eventClassName, mirrorClass);
}
src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadPinnedEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.MirrorEvent;
@Category("Java Application")
@Label("Virtual Thread Pinned")
@Name("jdk.VirtualThreadPinned")
public final class VirtualThreadPinnedEvent extends MirrorEvent {
}
src/java.base/share/classes/java/lang/VirtualThread.java:
/**
* Parks the current carrier thread up to the given waiting time or until
* unparked or interrupted. If the virtual thread is interrupted then the
* interrupt status will be propagated to the carrier thread.
* @param timed true for a timed park, false for untimed
* @param nanos the waiting time in nanoseconds
*/
private void parkOnCarrierThread(boolean timed, long nanos) {
assert state() == RUNNING;
VirtualThreadPinnedEvent event;
try {
event = new VirtualThreadPinnedEvent();
event.begin();
} catch (OutOfMemoryError e) {
event = null;
}
setState(timed ? TIMED_PINNED : PINNED);
try {
if (!parkPermit) {
if (!timed) {
U.park(false, 0);
} else if (nanos > 0) {
src/java.base/share/classes/jdk/internal/event/VirtualThreadPinnedEvent.java:
package jdk.internal.event;
/**
* Event recording that a virtual thread has parked on its carrier thread.
*/
public class VirtualThreadPinnedEvent extends Event {
}
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 20 ms |
profiling | true | true | 20 ms |
ThreadSleep
default profiling startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java
Category: Java Application
Excludes in stack trace: java.lang.Thread::afterSleep, java.lang.Thread::sleepNanos, java.lang.Thread::sleep
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/internal/MirrorEvents.java:
// Add mirror event mapping here. See MirrorEvent class for details.
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
};
src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.Timespan;
import jdk.jfr.internal.MirrorEvent;
@Category("Java Application")
@Label("Java Thread Sleep")
@Name("jdk.ThreadSleep")
@StackFilter({"java.lang.Thread::afterSleep",
"java.lang.Thread::sleepNanos",
"java.lang.Thread::sleep"})
public final class ThreadSleepEvent extends MirrorEvent {
@Label("Sleep Time")
@Timespan(Timespan.NANOSECONDS)
public long time;
}
src/java.base/share/classes/java/lang/Thread.java:
} else {
yield0();
}
}
private static native void yield0();
/**
* Called before sleeping to create a jdk.ThreadSleep event.
*/
private static ThreadSleepEvent beforeSleep(long nanos) {
ThreadSleepEvent event = null;
if (ThreadSleepEvent.isTurnedOn()) {
try {
event = new ThreadSleepEvent();
event.time = nanos;
event.begin();
} catch (OutOfMemoryError e) {
event = null;
}
}
return event;
}
/**
* Called after sleeping to commit the jdk.ThreadSleep event.
*/
private static void afterSleep(ThreadSleepEvent event) {
if (event != null) {
try {
event.commit();
} catch (OutOfMemoryError e) {
// ignore
}
}
}
/**
* Sleep for the specified number of nanoseconds, subject to the precision
* and accuracy of system timers and schedulers.
*/
private static void sleepNanos(long nanos) throws InterruptedException {
ThreadSleepEvent event = beforeSleep(nanos);
try {
if (currentThread() instanceof VirtualThread vthread) {
vthread.sleepNanos(nanos);
} else {
sleepNanos0(nanos);
}
} finally {
afterSleep(event);
}
src/java.base/share/classes/jdk/internal/event/ThreadSleepEvent.java:
package jdk.internal.event;
/**
* Event recording thread sleeping.
*/
public final class ThreadSleepEvent extends Event {
private static final ThreadSleepEvent EVENT = new ThreadSleepEvent();
/**
* Returns {@code true} if event is enabled, {@code false} otherwise.
*/
public static boolean isTurnedOn() {
return EVENT.isEnabled();
}
public long time;
}
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 20 ms |
profiling | true | true | 10 ms |
Field | Type | Description |
---|---|---|
time | long: nanos | Sleep Time |
JavaErrorThrow
default profiling startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ErrorThrownEvent.java
Category: Java Application
An object derived from java.lang.Error has been created. OutOfMemoryErrors are ignored
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
message | string | Message Consider contributing a description to jfreventcollector. |
thrownClass | Class | Class Consider contributing a description to jfreventcollector. |
Examples 3
message | string | static Lorg/apache/spark/ml/stat/SummarizerBuffer;.<clinit>()V
|
---|---|---|
startTime | long: millis | 873869276083
|
thrownClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/NoSuchMethodError
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/lang
|
message | string | 'int java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(java.lang.Object, java.lang.Object, int, int)'
|
---|---|---|
startTime | long: millis | 4641842458
|
thrownClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/NoSuchMethodError
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
message | string | 'java.lang.Object java.lang.invoke.Invokers$Holder.linkToTargetMethod(java.lang.Object, int, int, java.lang.Object)'
|
---|---|---|
startTime | long: millis | 28886404625
|
thrownClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/NoSuchMethodError
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
FileForce
default profiling startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/FileForceEvent.java
Category: Java Application
Force updates to be written to file
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/FileForceEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "FileForce")
@Label("File Force")
@Category("Java Application")
@Description("Force updates to be written to file")
public final class FileForceEvent extends MirrorEvent {
// The order of these fields must be the same as the parameters in
// commit(..., String, boolean)
@Label("Path")
@Description("Full path of the file")
public String path;
@Label("Update Metadata")
@Description("Whether the file metadata is updated")
public boolean metaData;
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
/**
* This class registers all mirror events.
*/
final class MirrorEvents {
private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();
// Add mirror event mapping here. See MirrorEvent class for details.
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
src/java.base/share/classes/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java:
do {
n = nd.force(fdObj, metaData);
} while ((n == IOStatus.INTERRUPTED) && isOpen());
} finally {
end(n >= 0);
}
} finally {
threads.remove(ti);
}
}
@Override
public void force(boolean metaData) throws IOException {
if (!FileForceEvent.enabled()) {
implForce(metaData);
return;
}
long start = FileForceEvent.timestamp();
implForce(metaData);
FileForceEvent.offer(start, path, metaData);
}
@Override
<A> Future<FileLock> implLock(final long position,
final long size,
final boolean shared,
final A attachment,
final CompletionHandler<FileLock,? super A> handler)
{
if (shared && !reading)
throw new NonReadableChannelException();
src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java:
} finally {
Blocker.end(attempted);
}
} while ((rv == IOStatus.INTERRUPTED) && isOpen());
} finally {
threads.remove(ti);
endBlocking(rv > -1);
assert IOStatus.check(rv);
}
}
@Override
public void force(boolean metaData) throws IOException {
if (!FileForceEvent.enabled()) {
implForce(metaData);
return;
}
long start = FileForceEvent.timestamp();
implForce(metaData);
FileForceEvent.offer(start, path, metaData);
}
// Assume at first that the underlying kernel supports sendfile/equivalent;
// set this to true if we find out later that it doesn't
//
private static volatile boolean transferToDirectNotSupported;
// Assume at first that the underlying kernel supports copy_file_range/equivalent;
// set this to true if we find out later that it doesn't
//
private static volatile boolean transferFromDirectNotSupported;
src/java.base/share/classes/jdk/internal/event/FileForceEvent.java:
package jdk.internal.event;
/**
* A JFR event for forced updates written to files. This event is mirrored in
* {@code jdk.jfr.events.FileForceEvent } where the event annotations are
* provided. Some of the methods are replaced by generated
* methods when jfr is enabled. Note that the order of the arguments of the
* {@link #commit(long, long, String, boolean)} method
* must be the same as the order of the fields.
*/
public class FileForceEvent extends Event {
// THE ORDER OF THE FOLLOWING FIELDS IS IMPORTANT!
// The order must match the argument order of the generated commit method.
public String path;
public boolean metaData;
/**
* Helper method to offer the data needed to potentially commit an event.
* The duration of the operation is computed using the current
* timestamp and the given start time. If the duration is meets
* or exceeds the configured value (determined by calling the generated method
* {@link #shouldCommit(long)}), an event will be emitted by calling
* {@link #commit(long, long, String, boolean)}.
src/java.base/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java:
private void implForce(boolean metaData) throws IOException {
try {
begin();
nd.force(fdObj, metaData);
} finally {
end();
}
}
@Override
public void force(boolean metaData) throws IOException {
if (!FileForceEvent.enabled()) {
implForce(metaData);
return;
}
long start = FileForceEvent.timestamp();
implForce(metaData);
FileForceEvent.offer(start, path, metaData);
}
// -- file locking --
/**
* Task that initiates locking operation and handles completion result.
*/
private class LockTask<A> implements Runnable, Iocp.ResultHandler {
private final long position;
private final FileLockImpl fli;
private final PendingFuture<FileLock,A> result;
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 20 ms |
profiling | true | true | 10 ms |
Field | Type | Description |
---|---|---|
path | string | Path Full path of the file |
metaData | boolean | Update Metadata Whether the file metadata is updated |
SocketWrite
default profiling startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java
Category: Java Application
Writing data to a socket
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java:
@Name(Type.EVENT_NAME_PREFIX + "SocketWrite")
@Label("Socket Write")
@Category("Java Application")
@Description("Writing data to a socket")
public final class SocketWriteEvent extends MirrorEvent {
@Label("Remote Host")
public String host;
@Label("Remote Address")
public String address;
@Label("Remote Port")
public int port;
@Label("Bytes Written")
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();
// Add mirror event mapping here. See MirrorEvent class for details.
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
src/java.base/share/classes/java/net/Socket.java:
@Override
public void write(int b) throws IOException {
byte[] a = new byte[] { (byte) b };
write(a, 0, 1);
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
if (!SocketWriteEvent.enabled()) {
implWrite(b, off, len);
return;
}
long start = SocketWriteEvent.timestamp();
implWrite(b, off, len);
long duration = SocketWriteEvent.timestamp() - start;
if (SocketWriteEvent.shouldCommit(duration)) {
SocketWriteEvent.emit(start, duration, len, parent.getRemoteSocketAddress());
}
}
private void implWrite(byte[] b, int off, int len) throws IOException {
try {
out.write(b, off, len);
} catch (InterruptedIOException e) {
src/java.base/share/classes/sun/nio/ch/SocketOutputStream.java:
*/
SocketChannelImpl channel() {
return sc;
}
@Override
public void write(int b) throws IOException {
byte[] a = new byte[]{(byte) b};
write(a, 0, 1);
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
if (!SocketWriteEvent.enabled()) {
sc.blockingWriteFully(b, off, len);
return;
}
long start = SocketWriteEvent.timestamp();
sc.blockingWriteFully(b, off, len);
SocketWriteEvent.offer(start, len, sc.remoteAddress());
}
@Override
public void close() throws IOException {
sc.close();
}
}
src/java.base/share/classes/sun/nio/ch/SocketChannelImpl.java:
} finally {
writeLock.unlock();
}
}
@Override
public int write(ByteBuffer buf) throws IOException {
if (!SocketWriteEvent.enabled()) {
return implWrite(buf);
}
long start = SocketWriteEvent.timestamp();
int nbytes = implWrite(buf);
SocketWriteEvent.offer(start, nbytes, remoteAddress());
return nbytes;
}
@Override
public long write(ByteBuffer[] srcs, int offset, int length)
throws IOException
{
if (!SocketWriteEvent.enabled()) {
return implWrite(srcs, offset, length);
}
long start = SocketWriteEvent.timestamp();
long nbytes = implWrite(srcs, offset, length);
SocketWriteEvent.offer(start, nbytes, remoteAddress());
return nbytes;
}
/**
* Writes a byte of out of band data.
src/java.base/share/classes/jdk/internal/event/SocketWriteEvent.java:
/**
* A JFR event for socket write operations. This event is mirrored in
* {@code jdk.jfr.events.SocketWriteEvent } where the metadata for the event is
* provided with annotations. Some of the methods are replaced by generated
* methods when jfr is enabled. Note that the order of the arguments of the
* {@link #commit(long, long, String, String, int, long)} method
* must be the same as the order of the fields.
*/
public class SocketWriteEvent extends Event {
// THE ORDER OF THE FOLLOWING FIELDS IS IMPORTANT!
// The order must match the argument order of the generated commit method.
public String host;
public String address;
public int port;
public long bytesWritten;
/**
* Actually commit a socket write event. This is generated automatically.
* The order of the fields must be the same as the parameters in this method.
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 20 ms |
profiling | true | true | 10 ms |
Field | Type | Description |
---|---|---|
host | string | Remote Host |
address | string | Remote Address |
port | int | Remote Port |
bytesWritten | long: bytes | Bytes Written Number of bytes written to the socket |
Examples 3
VirtualThreadStart
startTime duration 19 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadStartEvent.java
Category: Java Application
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadStartEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;
@Category("Java Application")
@Label("Virtual Thread Start")
@Name("jdk.VirtualThreadStart")
@RemoveFields("duration")
public final class VirtualThreadStartEvent extends MirrorEvent {
@Label("Thread Id")
public long javaThreadId;
}
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
};
private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
src/java.base/share/classes/java/lang/VirtualThread.java:
/**
* Runs a task in the context of this virtual thread.
*/
private void run(Runnable task) {
assert Thread.currentThread() == this && state == RUNNING;
// notify JVMTI, may post VirtualThreadStart event
notifyJvmtiStart();
// emit JFR event if enabled
if (VirtualThreadStartEvent.isTurnedOn()) {
var event = new VirtualThreadStartEvent();
event.javaThreadId = threadId();
event.commit();
}
Object bindings = Thread.scopedValueBindings();
try {
runWith(bindings, task);
} catch (Throwable exc) {
dispatchUncaughtException(exc);
} finally {
try {
src/java.base/share/classes/jdk/internal/event/VirtualThreadStartEvent.java:
package jdk.internal.event;
/**
* Event recording that a virtual thread has been started.
*/
public class VirtualThreadStartEvent extends Event {
private static final VirtualThreadStartEvent EVENT = new VirtualThreadStartEvent();
/**
* Returns {@code true} if event is enabled, {@code false} otherwise.
*/
public static boolean isTurnedOn() {
return EVENT.isEnabled();
}
public long javaThreadId;
}
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
javaThreadId | long | Thread Id |
Java Application Statistics
JavaThreadStatistics
default profiling startTime duration every chunk 11 17 21 23 24 graal vm
Category: Java Application / Statistics
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_totalSize(totalPhysicalMemory);
event.set_usedSize(totalPhysicalMemory - os::available_memory());
event.commit();
}
TRACE_REQUEST_FUNC(SwapSpace) {
EventSwapSpace event;
event.set_totalSize(os::total_swap_space());
event.set_freeSize(os::free_swap_space());
event.commit();
}
TRACE_REQUEST_FUNC(JavaThreadStatistics) {
EventJavaThreadStatistics event;
event.set_activeCount(ThreadService::get_live_thread_count());
event.set_daemonCount(ThreadService::get_daemon_thread_count());
event.set_accumulatedCount(ThreadService::get_total_thread_count());
event.set_peakCount(ThreadService::get_peak_thread_count());
event.commit();
}
TRACE_REQUEST_FUNC(GCHeapMemoryUsage) {
MemoryUsage usage = Universe::heap()->memory_usage();
EventGCHeapMemoryUsage event(UNTIMED);
event.set_used(usage.used());
Configuration | enabled | period |
---|---|---|
default | true | 1000 ms |
profiling | true | 1000 ms |
Field | Type | Description |
---|---|---|
activeCount | long | Active Threads Number of live active threads including both daemon and non-daemon threads |
daemonCount | long | Daemon Threads Number of live daemon threads |
accumulatedCount | long | Accumulated Threads Number of threads created and also started since JVM start |
peakCount | long | Peak Threads Peak live thread count since JVM start or when peak count was reset |
Examples 3
ClassLoadingStatistics
default profiling startTime duration every chunk 11 17 21 23 24 graal vm
Category: Java Application / Statistics
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_used(usage.used());
event.set_committed(usage.committed());
event.set_max(usage.max_size());
event.set_starttime(timestamp());
event.set_endtime(timestamp());
event.commit();
}
}
}
TRACE_REQUEST_FUNC(ClassLoadingStatistics) {
#if INCLUDE_MANAGEMENT
EventClassLoadingStatistics event;
event.set_loadedClassCount(ClassLoadingService::loaded_class_count());
event.set_unloadedClassCount(ClassLoadingService::unloaded_class_count());
event.commit();
#else
log_debug(jfr, system)("Unable to generate requestable event ClassLoadingStatistics. The required jvm feature 'management' is missing.");
#endif
}
class JfrClassLoaderStatsClosure : public ClassLoaderStatsClosure {
public:
JfrClassLoaderStatsClosure() : ClassLoaderStatsClosure(nullptr) {}
Configuration | enabled | period |
---|---|---|
default | true | 1000 ms |
profiling | true | 1000 ms |
Field | Type | Description |
---|---|---|
loadedClassCount | long | Loaded Class Count Number of classes loaded since JVM start |
unloadedClassCount | long | Unloaded Class Count Number of classes unloaded since JVM start |
Examples 3
ClassLoaderStatistics
default profiling startTime duration every chunk 11 17 21 23 24
Category: Java Application / Statistics
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:
log_debug(jfr, system)("Unable to generate requestable event ClassLoadingStatistics. The required jvm feature 'management' is missing.");
#endif
}
class JfrClassLoaderStatsClosure : public ClassLoaderStatsClosure {
public:
JfrClassLoaderStatsClosure() : ClassLoaderStatsClosure(nullptr) {}
bool do_entry(oop const& key, ClassLoaderStats const& cls) {
const ClassLoaderData* this_cld = cls._class_loader != nullptr ?
java_lang_ClassLoader::loader_data_acquire(cls._class_loader) : nullptr;
const ClassLoaderData* parent_cld = cls._parent != nullptr ?
java_lang_ClassLoader::loader_data_acquire(cls._parent) : nullptr;
EventClassLoaderStatistics event;
event.set_classLoader(this_cld);
event.set_parentClassLoader(parent_cld);
event.set_classLoaderData((intptr_t)cls._cld);
event.set_classCount(cls._classes_count);
event.set_chunkSize(cls._chunk_sz);
event.set_blockSize(cls._block_sz);
event.set_hiddenClassCount(cls._hidden_classes_count);
event.set_hiddenChunkSize(cls._hidden_chunk_sz);
event.set_hiddenBlockSize(cls._hidden_block_sz);
event.commit();
return true;
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
classLoader | ClassLoader | Class Loader Consider contributing a description to jfreventcollector. |
parentClassLoader | ClassLoader | Parent Class Loader Consider contributing a description to jfreventcollector. |
classLoaderData | ulong: address | ClassLoaderData Pointer Pointer to the ClassLoaderData structure in the JVM |
classCount | long | Classes Number of loaded classes |
chunkSize | ulong: bytes | Total Chunk Size Total size of all allocated metaspace chunks (each chunk has several blocks) |
blockSize | ulong: bytes | Total Block Size Total size of all allocated metaspace blocks (each chunk has several blocks) |
hiddenClassCount | long 15+ | Hidden Classes Number of hidden classes |
hiddenChunkSize | ulong: bytes 15+ | Total Hidden Classes Chunk Size Total size of all allocated metaspace chunks for hidden classes (each chunk has several blocks) |
hiddenBlockSize | ulong: bytes 15+ | Total Hidden Classes Block Size Total size of all allocated metaspace blocks for hidden classes (each chunk has several blocks) |
Examples 3
blockSize | ulong: bytes | 935016
|
---|---|---|
chunkSize | ulong: bytes | 947200
|
classCount | long | 241
|
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
classLoaderData | ulong: address | 105553176695968
|
hiddenBlockSize | ulong: bytes | 0
|
hiddenChunkSize | ulong: bytes | 0
|
hiddenClassCount | long | 0
|
parentClassLoader | ClassLoader | |
name | string | app
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | jdk/internal/loader
|
startTime | long: millis | 84159189250
|
blockSize | ulong: bytes | 936720
|
---|---|---|
chunkSize | ulong: bytes | 942080
|
classCount | long | 243
|
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
classLoaderData | ulong: address | 105553169983168
|
hiddenBlockSize | ulong: bytes | 0
|
hiddenChunkSize | ulong: bytes | 0
|
hiddenClassCount | long | 0
|
parentClassLoader | ClassLoader | |
name | string | app
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | jdk/internal/loader/ClassLoaders$AppClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | jdk/internal/loader
|
startTime | long: millis | 30586574708
|
blockSize | ulong: bytes | 5104
|
---|---|---|
chunkSize | ulong: bytes | 6144
|
classCount | long | 2
|
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | org/codehaus/commons/compiler/util/reflect/ByteArrayClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/codehaus/commons/compiler/util/reflect
|
classLoaderData | ulong: address | 105553268052832
|
hiddenBlockSize | ulong: bytes | 0
|
hiddenChunkSize | ulong: bytes | 0
|
hiddenClassCount | long | 0
|
parentClassLoader | ClassLoader | null
|
startTime | long: millis | 791772665250
|
ThreadAllocationStatistics
default profiling startTime every chunk 11 17 21 23 24 graal vm
Category: Java Application / Statistics
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:
GrowableArray<jlong> allocated(initial_size);
GrowableArray<traceid> thread_ids(initial_size);
JfrTicks time_stamp = JfrTicks::now();
JfrJavaThreadIterator iter;
while (iter.has_next()) {
JavaThread* const jt = iter.next();
assert(jt != nullptr, "invariant");
allocated.append(jt->cooked_allocated_bytes());
thread_ids.append(JFR_JVM_THREAD_ID(jt));
}
// Write allocation statistics to buffer.
for(int i = 0; i < thread_ids.length(); i++) {
EventThreadAllocationStatistics event(UNTIMED);
event.set_allocated(allocated.at(i));
event.set_thread(thread_ids.at(i));
event.set_starttime(time_stamp);
event.set_endtime(time_stamp);
event.commit();
}
}
/**
* PhysicalMemory event represents:
*
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
allocated | ulong: bytes | Allocated Approximate number of bytes allocated since thread start |
thread | Thread | Thread Consider contributing a description to jfreventcollector. |
Examples 3
allocated | ulong: bytes | 473084024
|
---|---|---|
startTime | long: millis | 17899740292
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | ForkJoinPool.commonPool-worker-5
|
javaThreadId | long | 35
|
osName | string | ForkJoinPool.commonPool-worker-5
|
osThreadId | long | 32771
|
virtual | boolean | false
|
allocated | ulong: bytes | 25200
|
---|---|---|
startTime | long: millis | 791772808042
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | SparkUI-1617
|
javaThreadId | long | 1617
|
osName | string | SparkUI-1617
|
osThreadId | long | 115247
|
virtual | boolean | false
|
allocated | ulong: bytes | 12461784
|
---|---|---|
startTime | long: millis | 14906032000
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.default-dispatcher-14
|
javaThreadId | long | 125
|
osName | string | UCT-akka.actor.default-dispatcher-14
|
osThreadId | long | 46087
|
virtual | boolean | false
|
FinalizerStatistics
default profiling startTime end of every chunk 18 21 23 24
Category: Java Application / Statistics
Per class statistics about finalizers
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrFinalizerStatisticsEvent.cpp:
static void send_event(const FinalizerEntry* fe, const InstanceKlass* ik, const JfrTicks& timestamp, Thread* thread) {
assert(ik != nullptr, "invariant");
assert(ik->has_finalizer(), "invariant");
assert(thread != nullptr, "invariant");
const char* const url = fe != nullptr ? fe->codesource() : nullptr;
const traceid url_symbol_id = url != nullptr ? JfrSymbolTable::add(url) : 0;
EventFinalizerStatistics event(UNTIMED);
event.set_starttime(timestamp);
event.set_endtime(timestamp);
event.set_finalizableClass(ik);
event.set_codeSource(url_symbol_id);
if (fe == nullptr) {
event.set_objects(0);
event.set_totalFinalizersRun(0);
} else {
assert(fe->klass() == ik, "invariant");
event.set_objects(fe->objects_on_heap());
event.set_totalFinalizersRun(fe->total_finalizers_run());
}
event.commit();
}
void JfrFinalizerStatisticsEvent::send_unload_event(const InstanceKlass* ik) {
if (!EventFinalizerStatistics::is_enabled()) {
return;
}
Thread* const thread = Thread::current();
ResourceMark rm(thread);
send_event(FinalizerService::lookup(ik, thread), ik, JfrTicks::now(), thread);
}
// Finalizer events generated by the periodic task will all have the same timestamp.
class FinalizerStatisticsEventClosure : public FinalizerEntryClosure {
private:
Configuration | enabled | period |
---|---|---|
default | true | endChunk |
profiling | true | endChunk |
Field | Type | Description |
---|---|---|
finalizableClass | Class | Class Overriding Finalize |
codeSource | Symbol | Code Source URL from where the class was loaded |
objects | ulong | Finalizable Objects on Heap Number of objects on heap that can be finalized |
totalFinalizersRun | ulong | Finalizers Run Total number of finalizers run since JVM start |
Examples 3
codeSource | Symbol | file://[...]/code/experiments/jfreventcollector/harness-124622-12434569844652140370/twitter-finagle/lib/finagle-netty4_2.13-21.12.0.jar
|
---|---|---|
finalizableClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | com/twitter/finagle/netty4/HashedWheelTimer
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | com/twitter/finagle/netty4
|
objects | ulong | 1
|
startTime | long: millis | 96681279583
|
totalFinalizersRun | ulong | 0
|
codeSource | Symbol | file://[...]/code/experiments/jfreventcollector/harness-124447-3147988932466435938/twitter-finagle/lib/netty-buffer-4.1.72.Final.jar
|
---|---|---|
finalizableClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 48
|
name | string | io/netty/buffer/PoolArena$HeapArena
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | io/netty/buffer
|
objects | ulong | 16
|
startTime | long: millis | 93710152708
|
totalFinalizersRun | ulong | 0
|
codeSource | Symbol | file://[...]/code/experiments/jfreventcollector/harness-141003-16632656921422798882/twitter-finagle/lib/netty-buffer-4.1.99.Final.jar
|
---|---|---|
finalizableClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 26
|
name | string | io/netty/buffer/PoolThreadCache$FreeOnFinalize
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | io/netty/buffer
|
objects | ulong | 16
|
startTime | long: millis | 811028143750
|
totalFinalizersRun | ulong | 0
|
DeprecatedInvocation
default profiling startTime stackTrace 22 23 24
Category: Java Application / Statistics
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
A unique invocation of a method that is annotated with @Deprecated. Packages and modules that are deprecated are ignored. At most 10 000 invocation sites and only the first invocation from a class is guaranteed to be included.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/jni/jfrJniMethod.cpp:
NO_TRANSITION(jdouble, jfr_time_conv_factor(JNIEnv* env, jclass jvm))
return (jdouble)JfrTimeConverter::nano_to_counter_multiplier();
NO_TRANSITION_END
NO_TRANSITION(jboolean, jfr_set_throttle(JNIEnv* env, jclass jvm, jlong event_type_id, jlong event_sample_size, jlong period_ms))
JfrEventThrottler::configure(static_cast<JfrEventId>(event_type_id), event_sample_size, period_ms);
return JNI_TRUE;
NO_TRANSITION_END
NO_TRANSITION(void, jfr_set_miscellaneous(JNIEnv* env, jobject jvm, jlong event_type_id, jlong value))
JfrEventSetting::set_miscellaneous(event_type_id, value);
const JfrEventId typed_event_id = (JfrEventId)event_type_id;
if (EventDeprecatedInvocation::eventId == typed_event_id) {
JfrDeprecationManager::on_level_setting_update(value);
}
NO_TRANSITION_END
NO_TRANSITION(jboolean, jfr_should_rotate_disk(JNIEnv* env, jclass jvm))
return JfrChunkRotation::should_rotate() ? JNI_TRUE : JNI_FALSE;
NO_TRANSITION_END
NO_TRANSITION(jlong, jfr_get_type_id_from_string(JNIEnv * env, jclass jvm, jstring type))
const char* type_name = env->GetStringUTFChars(type, nullptr);
jlong id = JfrType::name_to_id(type_name);
Configuration | enabled | level | stackTrace |
---|---|---|---|
default | true | forRemoval | true |
profiling | true | forRemoval | true |
Field | Type | Description |
---|---|---|
method | Method | Deprecated Method |
invocationTime | Ticks | Invocation Time The time the deprecated method was invoked for the first time |
forRemoval | boolean | For Removal |
Examples 1
forRemoval | boolean | true
|
---|---|---|
invocationTime | Ticks | 683253858083
|
method | Method | |
descriptor | string | (Ljava/security/PrivilegedAction;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | doPrivileged
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | java/security/AccessController
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/security
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 134
|
lineNumber | int | 167
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 8
|
name | string | <clinit>
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | io/netty/util/NetUtil
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | io/netty/util
|
type | FrameType | Interpreted
|
truncated | boolean | true
|
startTime | long: millis | 798537852583
|
ExceptionStatistics
default profiling startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionStatisticsEvent.java
Category: Java Application / Statistics
Number of objects derived from java.lang.Throwable that have been created
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionStatisticsEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.StackTrace;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "ExceptionStatistics")
@Label("Exception Statistics")
@Category({ "Java Application", "Statistics" })
@Description("Number of objects derived from java.lang.Throwable that have been created")
@RemoveFields({"duration", "eventThread", "stackTrace"})
public final class ExceptionStatisticsEvent extends MirrorEvent {
@Label("Exceptions Created")
public long throwables;
}
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
};
private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
mirrorLookup.put(eventClassName, mirrorClass);
}
static Class<? extends MirrorEvent> find(Class<? extends jdk.internal.event.Event> eventClass) {
return find(Utils.isJDKClass(eventClass), eventClass.getName());
}
src/java.base/share/classes/jdk/internal/event/ThrowableTracer.java:
if (ErrorThrownEvent.enabled()) {
long timestamp = ErrorThrownEvent.timestamp();
ErrorThrownEvent.commit(timestamp, message, clazz);
}
if (ExceptionThrownEvent.enabled()) {
long timestamp = ExceptionThrownEvent.timestamp();
ExceptionThrownEvent.commit(timestamp, message, clazz);
}
numThrowables.incrementAndGet();
}
public static void traceThrowable(Class<?> clazz, String message) {
if (ExceptionThrownEvent.enabled()) {
long timestamp = ExceptionThrownEvent.timestamp();
ExceptionThrownEvent.commit(timestamp, message, clazz);
}
numThrowables.incrementAndGet();
}
public static void emitStatistics() {
long timestamp = ExceptionStatisticsEvent.timestamp();
ExceptionStatisticsEvent.commit(timestamp, numThrowables.get());
}
}
src/java.base/share/classes/jdk/internal/event/ExceptionStatisticsEvent.java:
package jdk.internal.event;
/**
* Event recording number of exceptions that has been created.
*/
public class ExceptionStatisticsEvent extends Event {
public long throwables;
public static void commit(long timestamp, long throwables) {
// Generated by JFR
}
public static boolean enabled() {
// Generated by JFR
return false;
}
public static long timestamp() {
// Generated by JFR
return 0;
}
}
Configuration | enabled | period |
---|---|---|
default | true | 1000 ms |
profiling | true | 1000 ms |
Field | Type | Description |
---|---|---|
throwables | long | Exceptions Created |
DirectBufferStatistics
default profiling startTime duration stackTrace 15 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/DirectBufferStatisticsEvent.java
Category: Java Application / Statistics
Statistics of direct buffer
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/DirectBufferStatisticsEvent.java:
package jdk.jfr.events;
import jdk.internal.misc.VM;
import jdk.internal.misc.VM.BufferPool;
import jdk.jfr.*;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "DirectBufferStatistics")
@Label("Direct Buffer Statistics")
@Description("Statistics of direct buffer")
public final class DirectBufferStatisticsEvent extends AbstractBufferStatisticsEvent {
private static final BufferPool DIRECT_BUFFER_POOL = findPoolByName("direct");
public DirectBufferStatisticsEvent() {
super(DIRECT_BUFFER_POOL);
this.maxCapacity = VM.maxDirectMemory();
}
@Label("Maximum Capacity")
@Description("Maximum direct buffer capacity the process can use")
@DataAmount
final long maxCapacity;
}
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.SecurityProviderServiceEvent.class,
jdk.internal.event.SerializationMisdeclarationEvent.class,
jdk.internal.event.SocketReadEvent.class,
jdk.internal.event.SocketWriteEvent.class,
jdk.internal.event.ThreadSleepEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.VirtualThreadStartEvent.class,
jdk.internal.event.VirtualThreadEndEvent.class,
jdk.internal.event.VirtualThreadPinnedEvent.class,
jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class,
DirectBufferStatisticsEvent.class,
InitialSecurityPropertyEvent.class,
};
private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
private static final Runnable emitDirectBufferStatistics = JDKEvents::emitDirectBufferStatistics;
private static final Runnable emitContainerConfiguration = JDKEvents::emitContainerConfiguration;
private static final Runnable emitContainerCPUUsage = JDKEvents::emitContainerCPUUsage;
private static final Runnable emitContainerCPUThrottling = JDKEvents::emitContainerCPUThrottling;
private static final Runnable emitContainerMemoryUsage = JDKEvents::emitContainerMemoryUsage;
private static final Runnable emitContainerIOUsage = JDKEvents::emitContainerIOUsage;
private static final Runnable emitInitialSecurityProperties = JDKEvents::emitInitialSecurityProperties;
private static Metrics containerMetrics = null;
private static boolean initializationTriggered;
@SuppressWarnings("unchecked")
public static synchronized void initialize() {
try {
if (initializationTriggered == false) {
for (Class<?> eventClass : eventClasses) {
SecuritySupport.registerEvent((Class<? extends Event>) eventClass);
}
PeriodicEvents.addJDKEvent(jdk.internal.event.ExceptionStatisticsEvent.class, emitExceptionStatistics);
PeriodicEvents.addJDKEvent(DirectBufferStatisticsEvent.class, emitDirectBufferStatistics);
PeriodicEvents.addJDKEvent(InitialSecurityPropertyEvent.class, emitInitialSecurityProperties);
initializeContainerEvents();
JFRTracing.enable();
initializationTriggered = true;
}
} catch (Exception e) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());
}
}
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
public static void remove() {
PeriodicEvents.removeEvent(emitExceptionStatistics);
PeriodicEvents.removeEvent(emitDirectBufferStatistics);
PeriodicEvents.removeEvent(emitInitialSecurityProperties);
PeriodicEvents.removeEvent(emitContainerConfiguration);
PeriodicEvents.removeEvent(emitContainerCPUUsage);
PeriodicEvents.removeEvent(emitContainerCPUThrottling);
PeriodicEvents.removeEvent(emitContainerMemoryUsage);
PeriodicEvents.removeEvent(emitContainerIOUsage);
}
private static void emitDirectBufferStatistics() {
DirectBufferStatisticsEvent e = new DirectBufferStatisticsEvent();
e.commit();
}
private static void emitInitialSecurityProperties() {
Properties p = SharedSecrets.getJavaSecurityPropertiesAccess().getInitialProperties();
if (p != null) {
for (String key : p.stringPropertyNames()) {
InitialSecurityPropertyEvent e = new InitialSecurityPropertyEvent();
e.key = key;
e.value = p.getProperty(key);
e.commit();
Configuration | enabled | period |
---|---|---|
default | true | 5 s |
profiling | true | 5 s |
Examples 3
stackTrace | StackTrace | null
|
---|---|---|
startTime | long: millis | 68543190083
|
stackTrace | StackTrace | null
|
---|---|---|
startTime | long: millis | 35158830792
|
Java Development Kit
VirtualThreadSubmitFailed
default profiling startTime duration 19 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadSubmitFailedEvent.java
Category: Java Development Kit / Threading
Submit of task for virtual thread failed
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
};
private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
mirrorLookup.put(eventClassName, mirrorClass);
}
src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadSubmitFailedEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;
@Category({"Java Development Kit", "Threading"})
@Label("Virtual Thread Submit Failed")
@Name("jdk.VirtualThreadSubmitFailed")
@Description("Submit of task for virtual thread failed")
@RemoveFields("duration")
public final class VirtualThreadSubmitFailedEvent extends MirrorEvent {
@Label("Thread Id")
public long javaThreadId;
@Label("Exception Message")
public String exceptionMessage;
}
src/java.base/share/classes/java/lang/VirtualThread.java:
* @throws RejectedExecutionException
* @see ForkJoinPool#externalSubmit(ForkJoinTask)
*/
private void externalSubmitRunContinuation(ForkJoinPool pool) {
try {
pool.externalSubmit(ForkJoinTask.adapt(runContinuation));
} catch (RejectedExecutionException ree) {
submitFailed(ree);
throw ree;
}
}
/**
* If enabled, emits a JFR VirtualThreadSubmitFailedEvent.
*/
private void submitFailed(RejectedExecutionException ree) {
var event = new VirtualThreadSubmitFailedEvent();
if (event.isEnabled()) {
event.javaThreadId = threadId();
event.exceptionMessage = ree.getMessage();
event.commit();
}
}
/**
* Runs a task in the context of this virtual thread.
*/
private void run(Runnable task) {
src/java.base/share/classes/jdk/internal/event/VirtualThreadSubmitFailedEvent.java:
package jdk.internal.event;
/**
* Event recording when an attempt to submit the task for a virtual thread failed.
*/
public class VirtualThreadSubmitFailedEvent extends Event {
public long javaThreadId;
public String exceptionMessage;
}
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
javaThreadId | long | Thread Id |
exceptionMessage | string | Exception Message Consider contributing a description to jfreventcollector. |
SecurityProviderService
startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java
Category: Java Development Kit / Security
Excludes in stack trace: java.security.Provider::getService
Details of Provider.getInstance(String type, String algorithm) calls
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/java.base/share/classes/java/security/Provider.java:
if (!key.matches(type, algorithm)) {
key = new ServiceKey(type, algorithm, false);
previousKey = key;
}
Service s = serviceMap.get(key);
if (s == null) {
s = legacyMap.get(key);
if (s != null && !s.isValid()) {
legacyMap.remove(key, s);
}
}
if (s != null && SecurityProviderServiceEvent.isTurnedOn()) {
var e = new SecurityProviderServiceEvent();
e.provider = getName();
e.type = type;
e.algorithm = algorithm;
e.commit();
}
return s;
}
// ServiceKey from previous getService() call
// by re-using it if possible we avoid allocating a new object
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
* This class registers all mirror events.
*/
final class MirrorEvents {
private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();
// Add mirror event mapping here. See MirrorEvent class for details.
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java:
@Category({"Java Development Kit", "Security"})
@Label("Security Provider Instance Request")
@Name("jdk.SecurityProviderService")
@Description("Details of Provider.getInstance(String type, String algorithm) calls")
@RemoveFields("duration")
@StackFilter({"java.security.Provider::getService"})
public final class SecurityProviderServiceEvent extends MirrorEvent {
@Label("Type of Service")
public String type;
@Label("Algorithm Name")
public String algorithm;
@Label("Security Provider")
public String provider;
}
src/java.base/share/classes/jdk/internal/event/SecurityProviderServiceEvent.java:
package jdk.internal.event;
/**
* Event recording details of Provider.getService(String type, String algorithm) calls
*/
public final class SecurityProviderServiceEvent extends Event {
private static final SecurityProviderServiceEvent EVENT = new SecurityProviderServiceEvent();
/**
* Returns {@code true} if event is enabled, {@code false} otherwise.
*/
public static boolean isTurnedOn() {
return EVENT.isEnabled();
}
public String type;
public String algorithm;
public String provider;
}
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
type | string | Type of Service |
algorithm | string | Algorithm Name |
provider | string | Security Provider |
Examples 3
SecurityPropertyModification
startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java
Category: Java Development Kit / Security
Excludes in stack trace: java.security.Security::setProperty
Modification of Security property
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
/**
* This class registers all mirror events.
*/
final class MirrorEvents {
private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();
// Add mirror event mapping here. See MirrorEvent class for details.
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
src/java.base/share/classes/java/security/Security.java:
* if a security manager exists and its {@link
* java.lang.SecurityManager#checkPermission} method
* denies access to set the specified security property value
* @throws NullPointerException if key or datum is {@code null}
*
* @see #getProperty
* @see java.security.SecurityPermission
*/
public static void setProperty(String key, String datum) {
check("setProperty." + key);
props.put(key, datum);
invalidateSMCache(key); /* See below. */
SecurityPropertyModificationEvent spe = new SecurityPropertyModificationEvent();
// following is a no-op if event is disabled
spe.key = key;
spe.value = datum;
spe.commit();
if (EventHelper.isLoggingSecurity()) {
EventHelper.logSecurityPropertyEvent(key, datum);
}
}
/*
src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java:
package jdk.jfr.events;
import jdk.jfr.*;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;
@Category({"Java Development Kit", "Security"})
@Label("Security Property Modification")
@Name("jdk.SecurityPropertyModification")
@Description("Modification of Security property")
@RemoveFields("duration")
@StackFilter({"java.security.Security::setProperty"})
public final class SecurityPropertyModificationEvent extends MirrorEvent {
@Label("Key")
public String key;
@Label("Value")
public String value;
}
src/java.base/share/classes/jdk/internal/event/SecurityPropertyModificationEvent.java:
package jdk.internal.event;
/**
* Event details relating to the modification of a Security property.
*/
public final class SecurityPropertyModificationEvent extends Event {
public String key;
public String value;
}
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
key | string | Key Consider contributing a description to jfreventcollector. |
value | string | Value Consider contributing a description to jfreventcollector. |
X509Certificate
startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java
Category: Java Development Kit / Security
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Details of X.509 Certificate parsed by JDK
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java:
package jdk.jfr.events;
import jdk.jfr.*;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;
@Category({"Java Development Kit", "Security"})
@Label("X509 Certificate")
@Name("jdk.X509Certificate")
@Description("Details of X.509 Certificate parsed by JDK")
@RemoveFields("duration")
public final class X509CertificateEvent extends MirrorEvent {
@Label("Signature Algorithm")
public String algorithm;
@Label("Serial Number")
public String serialNumber;
@Label("Subject")
public String subject;
@Label("Issuer")
public String issuer;
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
};
private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
mirrorLookup.put(eventClassName, mirrorClass);
}
static Class<? extends MirrorEvent> find(Class<? extends jdk.internal.event.Event> eventClass) {
src/java.base/share/classes/sun/security/jca/JCAUtil.java:
SecureRandom result = def;
if (result == null) {
synchronized (JCAUtil.class) {
result = def;
if (result == null) {
def = result = new SecureRandom();
}
}
}
return result;
}
public static void tryCommitCertEvent(Certificate cert) {
if ((X509CertificateEvent.isTurnedOn() || EventHelper.isLoggingSecurity()) &&
(cert instanceof X509Certificate x509)) {
PublicKey pKey = x509.getPublicKey();
String algId = x509.getSigAlgName();
String serNum = Debug.toString(x509.getSerialNumber());
String subject = x509.getSubjectX500Principal().toString();
String issuer = x509.getIssuerX500Principal().toString();
String keyType = pKey.getAlgorithm();
int length = KeyUtil.getKeySize(pKey);
int hashCode = x509.hashCode();
long certifcateId = Integer.toUnsignedLong(hashCode);
long beginDate = x509.getNotBefore().getTime();
long endDate = x509.getNotAfter().getTime();
if (X509CertificateEvent.isTurnedOn()) {
X509CertificateEvent xce = new X509CertificateEvent();
xce.algorithm = algId;
xce.serialNumber = serNum;
xce.subject = subject;
xce.issuer = issuer;
xce.keyType = keyType;
xce.keyLength = length;
xce.certificateId = certifcateId;
xce.validFrom = beginDate;
xce.validUntil = endDate;
xce.commit();
}
src/java.base/share/classes/jdk/internal/event/X509CertificateEvent.java:
package jdk.internal.event;
/**
* Event recording details of X.509 Certificate.
*/
public final class X509CertificateEvent extends Event {
private static final X509CertificateEvent EVENT = new X509CertificateEvent();
/**
* Returns {@code true} if event is enabled, {@code false} otherwise.
*/
public static boolean isTurnedOn() {
return EVENT.isEnabled();
}
public String algorithm;
public String serialNumber;
public String subject;
public String issuer;
public String keyType;
public int keyLength;
public long certificateId;
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
algorithm | string | Signature Algorithm |
serialNumber | string | Serial Number Consider contributing a description to jfreventcollector. |
subject | string | Subject Consider contributing a description to jfreventcollector. |
issuer | string | Issuer Consider contributing a description to jfreventcollector. |
keyType | string | Key Type Consider contributing a description to jfreventcollector. |
keyLength | int | Key Length |
certificateId | ulong: certificateId | Certificate Id |
validFrom | long: epochmillis | Valid From |
validUntil | long: epochmillis | Valid Until |
Examples 1
algorithm | string | SHA1withDSA
|
---|---|---|
certificateId | ulong: certificateId | 3045411335
|
issuer | string | CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
|
keyLength | int | 1024
|
keyType | string | DSA
|
serialNumber | string | 46101f71
|
startTime | long: millis | 869989482917
|
subject | string | CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
|
validFrom | long: epochmillis | 1175461745000
|
validUntil | long: epochmillis | 4329061745000
|
Deserialization
startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/DeserializationEvent.java
Category: Java Development Kit / Serialization
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Results of deserialization and ObjectInputFilter checks
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/DeserializationEvent.java:
@Category({"Java Development Kit", "Serialization"})
@Label("Deserialization")
@Name("jdk.Deserialization")
@Description("Results of deserialization and ObjectInputFilter checks")
@RemoveFields("duration")
public final class DeserializationEvent extends MirrorEvent {
@Label("Filter Configured")
public boolean filterConfigured;
@Label("Filter Status")
public String filterStatus;
@Label ("Type")
public Class<?> type;
@Label ("Array Length")
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
/**
* This class registers all mirror events.
*/
final class MirrorEvents {
private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();
// Add mirror event mapping here. See MirrorEvent class for details.
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
src/java.base/share/classes/java/io/ObjectInputStream.java:
ObjectInputFilter next = Config.getSerialFilterFactory()
.apply(serialFilter, filter);
if (serialFilter != null && next == null) {
throw new IllegalStateException("filter can not be replaced with null filter");
}
serialFilter = next;
}
/**
* Invokes the deserialization filter if non-null.
*
* If the filter rejects or an exception is thrown, throws InvalidClassException.
*
* Logs and/or commits a {@code DeserializationEvent}, if configured.
*
* @param clazz the class; may be null
* @param arrayLength the array length requested; use {@code -1} if not creating an array
* @throws InvalidClassException if it rejected by the filter or
* a {@link RuntimeException} is thrown
*/
private void filterCheck(Class<?> clazz, int arrayLength)
throws InvalidClassException {
// Info about the stream is not available if overridden by subclass, return 0
long bytesRead = (bin == null) ? 0 : bin.getBytesRead();
RuntimeException ex = null;
src/java.base/share/classes/java/io/ObjectInputStream.java:
status = ObjectInputFilter.Status.REJECTED;
ex = e;
}
if (Logging.filterLogger != null) {
// Debug logging of filter checks that fail; Tracing for those that succeed
Logging.filterLogger.log(status == null || status == ObjectInputFilter.Status.REJECTED
? Logger.Level.DEBUG
: Logger.Level.TRACE,
"ObjectInputFilter {0}: {1}, array length: {2}, nRefs: {3}, depth: {4}, bytes: {5}, ex: {6}",
status, clazz, arrayLength, totalObjectRefs, depth, bytesRead,
Objects.toString(ex, "n/a"));
}
}
DeserializationEvent event = new DeserializationEvent();
if (event.shouldCommit()) {
event.filterConfigured = serialFilter != null;
event.filterStatus = status != null ? status.name() : null;
event.type = clazz;
event.arrayLength = arrayLength;
event.objectReferences = totalObjectRefs;
event.depth = depth;
event.bytesRead = bytesRead;
event.exceptionType = ex != null ? ex.getClass() : null;
event.exceptionMessage = ex != null ? ex.getMessage() : null;
event.commit();
src/java.base/share/classes/jdk/internal/event/DeserializationEvent.java:
package jdk.internal.event;
/**
* Event details relating to deserialization.
*/
public final class DeserializationEvent extends Event {
public boolean filterConfigured;
public String filterStatus;
public Class<?> type;
public int arrayLength;
public long objectReferences;
public long depth;
public long bytesRead;
public Class<?> exceptionType;
public String exceptionMessage;
}
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
filterConfigured | boolean | Filter Configured |
filterStatus | string | Filter Status Consider contributing a description to jfreventcollector. |
type | Class | Type Consider contributing a description to jfreventcollector. |
arrayLength | int | Array Length |
objectReferences | long | Object References |
depth | long | Depth |
bytesRead | long | Bytes Read |
exceptionType | Class | Exception Type Consider contributing a description to jfreventcollector. |
exceptionMessage | string | Exception Message Consider contributing a description to jfreventcollector. |
TLSHandshake
startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java
Category: Java Development Kit / Security
Excludes in stack trace: sun.security.ssl.Finished::recordEvent
Parameters used in TLS Handshake
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java:
@Category({"Java Development Kit", "Security"})
@Label("TLS Handshake")
@Name("jdk.TLSHandshake")
@Description("Parameters used in TLS Handshake")
@RemoveFields("duration")
@StackFilter("sun.security.ssl.Finished::recordEvent")
public final class TLSHandshakeEvent extends MirrorEvent {
@Label("Peer Host")
public String peerHost;
@Label("Peer Port")
public int peerPort;
@Label("Protocol Version")
public String protocolVersion;
@Label("Cipher Suite")
public String cipherSuite;
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
// Add mirror event mapping here. See MirrorEvent class for details.
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
};
src/java.base/share/classes/sun/security/ssl/Finished.java:
// May need to retransmit the last flight for DTLS.
if (!shc.sslContext.isDTLS()) {
shc.conContext.finishHandshake();
}
recordEvent(shc.conContext.conSession);
//
// produce
NewSessionTicket.t13PosthandshakeProducer.produce(shc);
}
}
private static void recordEvent(SSLSessionImpl session) {
TLSHandshakeEvent event = new TLSHandshakeEvent();
if (event.shouldCommit() || EventHelper.isLoggingSecurity()) {
int hash = 0;
try {
// use hash code for Id
hash = session
.getCertificateChain()[0]
.hashCode();
} catch (SSLPeerUnverifiedException e) {
// not verified msg
}
long peerCertificateId = Integer.toUnsignedLong(hash);
src/java.base/share/classes/jdk/internal/event/TLSHandshakeEvent.java:
package jdk.internal.event;
/**
* Event recording details of successful TLS handshakes.
*/
public final class TLSHandshakeEvent extends Event {
public String peerHost;
public int peerPort;
public String protocolVersion;
public String cipherSuite;
public long certificateId;
}
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
peerHost | string | Peer Host Consider contributing a description to jfreventcollector. |
peerPort | int | Peer Port |
protocolVersion | string | Protocol Version Consider contributing a description to jfreventcollector. |
cipherSuite | string | Cipher Suite Consider contributing a description to jfreventcollector. |
certificateId | ulong: certificateId | Certificate Id Peer Certificate Id |
X509Validation
startTime duration 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java
Category: Java Development Kit / Security
Serial numbers from X.509 Certificates forming chain of trust
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java:
package jdk.jfr.events;
import jdk.jfr.*;
import jdk.jfr.internal.MirrorEvent;
import jdk.jfr.internal.RemoveFields;
@Category({"Java Development Kit", "Security"})
@Label("X509 Validation")
@Name("jdk.X509Validation")
@Description("Serial numbers from X.509 Certificates forming chain of trust")
@RemoveFields("duration")
public final class X509ValidationEvent extends MirrorEvent {
@CertificateId
@Label("Certificate Id")
@Unsigned
public long certificateId;
@Label("Certificate Position")
@Description("Certificate position in chain of trust, 1 = trust anchor")
public int certificatePosition;
@Label("Validation Counter")
public long validationCounter;
}
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class);
register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class);
};
private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) {
mirrorLookup.put(eventClassName, mirrorClass);
}
static Class<? extends MirrorEvent> find(Class<? extends jdk.internal.event.Event> eventClass) {
return find(Utils.isJDKClass(eventClass), eventClass.getName());
src/java.base/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java:
// only add a RevocationChecker if revocation is enabled and
// a PKIXRevocationChecker has not already been added
if (params.revocationEnabled() && !revCheckerAdded) {
certPathCheckers.add(new RevocationChecker(anchor, params));
}
// add user-specified checkers
certPathCheckers.addAll(checkers);
PKIXMasterCertPathValidator.validate(params.certPath(),
params.certificates(),
certPathCheckers);
X509ValidationEvent xve = new X509ValidationEvent();
if (xve.shouldCommit() || EventHelper.isLoggingSecurity()) {
long[] certIds = params.certificates().stream()
.mapToInt(Certificate::hashCode)
.mapToLong(Integer::toUnsignedLong)
.toArray();
int hash = (anchorCert != null) ?
anchorCert.hashCode() : anchor.getCAPublicKey().hashCode();
long anchorCertId = Integer.toUnsignedLong(hash);
if (xve.shouldCommit()) {
xve.certificateId = anchorCertId;
int certificatePos = 1; // most trusted CA
src/java.base/share/classes/jdk/internal/event/X509ValidationEvent.java:
package jdk.internal.event;
/**
* Event recording details of X.509 Certificate serial numbers
* used in X509 cert path validation.
*/
public final class X509ValidationEvent extends Event {
public long certificateId;
public int certificatePosition;
public long validationCounter;
}
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
certificateId | ulong: certificateId | Certificate Id |
certificatePosition | int | Certificate Position Certificate position in chain of trust, 1 = trust anchor |
validationCounter | long | Validation Counter |
SerializationMisdeclaration
profiling startTime duration 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/SerializationMisdeclarationEvent.java
Category: Java Development Kit / Serialization
Methods and fields misdeclarations. The checks are usually performed just once per serializable class, the first time it is used by serialization. Under high memory pressure, a class might be re-checked again.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/SerializationMisdeclarationEvent.java:
@Name(Type.EVENT_NAME_PREFIX + "SerializationMisdeclaration")
@Label("Serialization Misdeclaration")
@Category({"Java Development Kit", "Serialization"})
@Description("Methods and fields misdeclarations." +
" The checks are usually performed just once per serializable class," +
" the first time it is used by serialization." +
" Under high memory pressure, a class might be re-checked again.")
@RemoveFields({"duration", "stackTrace", "eventThread"})
public final class SerializationMisdeclarationEvent extends MirrorEvent {
@Label("Misdeclared Class")
public Class<?> misdeclaredClass;
@Label("Message")
public String message;
}
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
*/
final class MirrorEvents {
private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();
// Add mirror event mapping here. See MirrorEvent class for details.
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class);
register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class);
register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class);
src/java.base/share/classes/java/io/ObjectStreamClass.java:
if (isRecord && canonicalCtr == null) {
deserializeEx = new ExceptionInfo(name, "record canonical constructor not found");
} else {
for (int i = 0; i < fields.length; i++) {
if (fields[i].getField() == null) {
defaultSerializeEx = new ExceptionInfo(
name, "unmatched serializable field(s) declared");
}
}
}
initialized = true;
if (SerializationMisdeclarationEvent.enabled() && serializable) {
SerializationMisdeclarationChecker.checkMisdeclarations(cl);
}
}
/**
* Creates blank class descriptor which should be initialized via a
* subsequent call to initProxy(), initNonProxy() or readNonProxy().
*/
ObjectStreamClass() {
}
src/java.base/share/classes/jdk/internal/event/SerializationMisdeclarationEvent.java:
package jdk.internal.event;
/**
* A JFR event for serialization misdeclarations.
* This event is mirrored in {@code jdk.jfr.events.SerializationMisdeclarationEvent}
* where the metadata for the event is provided with annotations.
* Some of the methods are replaced by generated methods when jfr is enabled.
* Note that the order of the arguments of the {@link #commit(long,Class,String)}
* method must be the same as the order of the fields.
*/
public class SerializationMisdeclarationEvent extends Event {
public Class<?> misdeclaredClass;
public String message;
/**
* Commit a serialization misdeclaration event.
* The implementation of this method is generated automatically if jfr is enabled.
* The order of the fields must be the same as the parameters in this method.
* {@code commit(long,Class,String)}
*
* @param start timestamp of the start of the operation
* @param misdeclaredClass the affected class
* @param message the specific event message
Configuration | enabled |
---|---|
default | false |
profiling | true |
Field | Type | Description |
---|---|---|
misdeclaredClass | Class | Misdeclared Class Consider contributing a description to jfreventcollector. |
message | string | Message Consider contributing a description to jfreventcollector. |
InitialSecurityProperty
default profiling startTime duration stackTrace 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/InitialSecurityPropertyEvent.java
Category: Java Development Kit / Security
Initial Security Properties
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/InitialSecurityPropertyEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
@Category({"Java Development Kit", "Security"})
@Label("Initial Security Property")
@Name("jdk.InitialSecurityProperty")
@Description("Initial Security Properties")
public final class InitialSecurityPropertyEvent extends AbstractPeriodicEvent {
@Label("Key")
public String key;
@Label("Value")
public String value;
}
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
jdk.internal.event.SecurityProviderServiceEvent.class,
jdk.internal.event.SerializationMisdeclarationEvent.class,
jdk.internal.event.SocketReadEvent.class,
jdk.internal.event.SocketWriteEvent.class,
jdk.internal.event.ThreadSleepEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.VirtualThreadStartEvent.class,
jdk.internal.event.VirtualThreadEndEvent.class,
jdk.internal.event.VirtualThreadPinnedEvent.class,
jdk.internal.event.VirtualThreadSubmitFailedEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class,
DirectBufferStatisticsEvent.class,
InitialSecurityPropertyEvent.class,
};
private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
private static final Runnable emitDirectBufferStatistics = JDKEvents::emitDirectBufferStatistics;
private static final Runnable emitContainerConfiguration = JDKEvents::emitContainerConfiguration;
private static final Runnable emitContainerCPUUsage = JDKEvents::emitContainerCPUUsage;
private static final Runnable emitContainerCPUThrottling = JDKEvents::emitContainerCPUThrottling;
private static final Runnable emitContainerMemoryUsage = JDKEvents::emitContainerMemoryUsage;
private static final Runnable emitContainerIOUsage = JDKEvents::emitContainerIOUsage;
private static final Runnable emitInitialSecurityProperties = JDKEvents::emitInitialSecurityProperties;
private static Metrics containerMetrics = null;
private static boolean initializationTriggered;
@SuppressWarnings("unchecked")
public static synchronized void initialize() {
try {
if (initializationTriggered == false) {
for (Class<?> eventClass : eventClasses) {
SecuritySupport.registerEvent((Class<? extends Event>) eventClass);
}
PeriodicEvents.addJDKEvent(jdk.internal.event.ExceptionStatisticsEvent.class, emitExceptionStatistics);
PeriodicEvents.addJDKEvent(DirectBufferStatisticsEvent.class, emitDirectBufferStatistics);
PeriodicEvents.addJDKEvent(InitialSecurityPropertyEvent.class, emitInitialSecurityProperties);
initializeContainerEvents();
JFRTracing.enable();
initializationTriggered = true;
}
} catch (Exception e) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());
}
}
private static void initializeContainerEvents() {
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
PeriodicEvents.removeEvent(emitContainerConfiguration);
PeriodicEvents.removeEvent(emitContainerCPUUsage);
PeriodicEvents.removeEvent(emitContainerCPUThrottling);
PeriodicEvents.removeEvent(emitContainerMemoryUsage);
PeriodicEvents.removeEvent(emitContainerIOUsage);
}
private static void emitDirectBufferStatistics() {
DirectBufferStatisticsEvent e = new DirectBufferStatisticsEvent();
e.commit();
}
private static void emitInitialSecurityProperties() {
Properties p = SharedSecrets.getJavaSecurityPropertiesAccess().getInitialProperties();
if (p != null) {
for (String key : p.stringPropertyNames()) {
InitialSecurityPropertyEvent e = new InitialSecurityPropertyEvent();
e.key = key;
e.value = p.getProperty(key);
e.commit();
}
}
}
}
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
key | string | Key Consider contributing a description to jfreventcollector. |
value | string | Value Consider contributing a description to jfreventcollector. |
Examples 3
key | string | security.provider.2
|
---|---|---|
stackTrace | StackTrace | null
|
startTime | long: millis | 18250956000
|
value | string | SunRsaSign
|
key | string | policy.allowSystemProperty
|
---|---|---|
stackTrace | StackTrace | null
|
startTime | long: millis | 16561525792
|
value | string | true
|
Operating System
OSInformation
default profiling startTime duration end of every chunk 11 17 21 23 24 graal vm
Category: Operating System
Description of the OS the JVM runs on, for example, a uname-like output
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_jvmVersion(VM_Version::internal_vm_info_string());
event.set_javaArguments(Arguments::java_command());
event.set_jvmArguments(Arguments::jvm_args());
event.set_jvmFlags(Arguments::jvm_flags());
event.set_jvmStartTime(Management::vm_init_done_time());
event.set_pid(os::current_process_id());
event.commit();
}
TRACE_REQUEST_FUNC(OSInformation) {
ResourceMark rm;
char* os_version = nullptr;
JfrOSInterface::os_version(&os_version);
EventOSInformation event;
event.set_osVersion(os_version);
event.commit();
}
TRACE_REQUEST_FUNC(VirtualizationInformation) {
EventVirtualizationInformation event;
event.set_name(JfrOSInterface::virtualization_name());
event.commit();
}
TRACE_REQUEST_FUNC(ModuleRequire) {
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
osVersion | string | OS Version |
Examples 3
VirtualizationInformation
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Operating System
Description of the virtualization technology the JVM runs on
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.commit();
}
TRACE_REQUEST_FUNC(OSInformation) {
ResourceMark rm;
char* os_version = nullptr;
JfrOSInterface::os_version(&os_version);
EventOSInformation event;
event.set_osVersion(os_version);
event.commit();
}
TRACE_REQUEST_FUNC(VirtualizationInformation) {
EventVirtualizationInformation event;
event.set_name(JfrOSInterface::virtualization_name());
event.commit();
}
TRACE_REQUEST_FUNC(ModuleRequire) {
JfrModuleEvent::generate_module_dependency_events();
}
TRACE_REQUEST_FUNC(ModuleExport) {
JfrModuleEvent::generate_module_export_events();
}
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
InitialEnvironmentVariable
default profiling startTime end of every chunk 11 17 21 23 24 graal vm
Category: Operating System
Key-value pairs for environment variables at JVM startup
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrOSInterface.cpp:
} else if (vrt == PowerFullPartitionMode) {
return "Power full partition";
}
return "No virtualization detected";
}
int JfrOSInterface::generate_initial_environment_variable_events() {
if (os::get_environ() == nullptr) {
return OS_ERR;
}
if (EventInitialEnvironmentVariable::is_enabled()) {
// One time stamp for all events, so they can be grouped together
JfrTicks time_stamp = JfrTicks::now();
for (char** p = os::get_environ(); *p != nullptr; p++) {
char* variable = *p;
char* equal_sign = strchr(variable, '=');
if (equal_sign != nullptr) {
// Extract key/value
ResourceMark rm;
ptrdiff_t key_length = equal_sign - variable;
char* key = NEW_RESOURCE_ARRAY(char, key_length + 1);
char* value = equal_sign + 1;
strncpy(key, variable, key_length);
key[key_length] = '\0';
EventInitialEnvironmentVariable event(UNTIMED);
event.set_starttime(time_stamp);
event.set_endtime(time_stamp);
event.set_key(key);
event.set_value(value);
event.commit();
}
}
}
return OS_OK;
}
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
key | string | Key |
value | string | Value |
SystemProcess
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Operating System
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:
while (processes != nullptr) {
SystemProcess* tmp = processes;
const char* info = processes->command_line();
if (info == nullptr) {
info = processes->path();
}
if (info == nullptr) {
info = processes->name();
}
if (info == nullptr) {
info = "?";
}
jio_snprintf(pid_buf, sizeof(pid_buf), "%d", processes->pid());
EventSystemProcess event(UNTIMED);
event.set_pid(pid_buf);
event.set_commandLine(info);
event.set_starttime(start_time);
event.set_endtime(end_time);
event.commit();
processes = processes->next();
delete tmp;
}
}
}
Configuration | enabled | period |
---|---|---|
default | true | endChunk |
profiling | true | endChunk |
Field | Type | Description |
---|---|---|
pid | string | Process Identifier |
commandLine | string | Command Line |
Examples 3
CPUInformation
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Operating System / Processor
Characteristics and descriptions of the processor(s) the JVM is running on
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(CPUInformation) {
CPUInformation cpu_info;
int ret_val = JfrOSInterface::cpu_information(cpu_info);
if (ret_val == OS_ERR) {
log_debug(jfr, system)( "Unable to generate requestable event CPUInformation");
return;
}
if (ret_val == FUNCTIONALITY_NOT_IMPLEMENTED) {
return;
}
if (ret_val == OS_OK) {
EventCPUInformation event;
event.set_cpu(cpu_info.cpu_name());
event.set_description(cpu_info.cpu_description());
event.set_sockets(cpu_info.number_of_sockets());
event.set_cores(cpu_info.number_of_cores());
event.set_hwThreads(cpu_info.number_of_hardware_threads());
event.commit();
}
}
TRACE_REQUEST_FUNC(CPULoad) {
double u = 0; // user time
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
cpu | string | Type |
description | string | Description |
sockets | uint | Sockets |
cores | uint | Cores |
hwThreads | uint | Hardware Threads |
Examples 3
CPUTimeStampCounter
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Operating System / Processor
Information about the CPU time stamp mechanism / (RD)TSC
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(ThreadCPULoad) {
JfrThreadCPULoadEvent::send_events();
}
TRACE_REQUEST_FUNC(CompilerQueueUtilization) {
JfrCompilerQueueUtilization::send_events();
}
TRACE_REQUEST_FUNC(NetworkUtilization) {
JfrNetworkUtilization::send_events();
}
TRACE_REQUEST_FUNC(CPUTimeStampCounter) {
EventCPUTimeStampCounter event;
event.set_fastTimeEnabled(JfrTime::is_ft_enabled());
event.set_fastTimeAutoEnabled(JfrTime::is_ft_supported());
event.set_osFrequency(os::elapsed_frequency());
event.set_fastTimeFrequency(JfrTime::frequency());
event.commit();
}
TRACE_REQUEST_FUNC(SystemProcess) {
char pid_buf[16];
SystemProcess* processes = nullptr;
int num_of_processes = 0;
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
fastTimeEnabled | boolean | Fast Time |
fastTimeAutoEnabled | boolean | Trusted Platform |
osFrequency | long: hertz | OS Frequency |
fastTimeFrequency | long: hertz | Fast Time Frequency |
Examples 3
CPULoad
default profiling startTime duration every chunk 11 17 21 23 24
Category: Operating System / Processor
Information about the recent CPU usage of the JVM process
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
double t = 0; // total time
int ret_val = OS_ERR;
{
// Can take some time on certain platforms, especially under heavy load.
// Transition to native to avoid unnecessary stalls for pending safepoint synchronizations.
ThreadToNativeFromVM transition(JavaThread::current());
ret_val = JfrOSInterface::cpu_loads_process(&u, &s, &t);
}
if (ret_val == OS_ERR) {
log_debug(jfr, system)( "Unable to generate requestable event CPULoad");
return;
}
if (ret_val == OS_OK) {
EventCPULoad event;
event.set_jvmUser((float)u);
event.set_jvmSystem((float)s);
event.set_machineTotal((float)t);
event.commit();
}
}
TRACE_REQUEST_FUNC(ThreadCPULoad) {
JfrThreadCPULoadEvent::send_events();
}
Configuration | enabled | period |
---|---|---|
default | true | 1000 ms |
profiling | true | 1000 ms |
Field | Type | Description |
---|---|---|
jvmUser | float: percentage | JVM User |
jvmSystem | float: percentage | JVM System |
machineTotal | float: percentage | Machine Total |
Examples 3
jvmSystem | float: percentage | 0.0011243117
|
---|---|---|
jvmUser | float: percentage | 0.010912331
|
machineTotal | float: percentage | 1.0
|
startTime | long: millis | 90184509667
|
jvmSystem | float: percentage | 3.0066687E-4
|
---|---|---|
jvmUser | float: percentage | 0.0043566697
|
machineTotal | float: percentage | 0.89692307
|
startTime | long: millis | 11595033667
|
jvmSystem | float: percentage | 0.0014354424
|
---|---|---|
jvmUser | float: percentage | 0.01231536
|
machineTotal | float: percentage | 1.0
|
startTime | long: millis | 931441152208
|
ThreadCPULoad
default profiling startTime duration eventThread every chunk 11 17 21 23 24 graal vm
Category: Operating System / Processor
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/jfrThreadCPULoadEvent.cpp:
int JfrThreadCPULoadEvent::get_processor_count() {
int cur_processor_count = os::active_processor_count();
int last_processor_count = _last_active_processor_count;
_last_active_processor_count = cur_processor_count;
// If the number of processors decreases, we don't know at what point during
// the sample interval this happened, so use the largest number to try
// to avoid percentages above 100%
return MAX2(cur_processor_count, last_processor_count);
}
// Returns false if the thread has not been scheduled since the last call to updateEvent
// (i.e. the delta for both system and user time is 0 milliseconds)
bool JfrThreadCPULoadEvent::update_event(EventThreadCPULoad& event, JavaThread* thread, jlong cur_wallclock_time, int processor_count) {
JfrThreadLocal* const tl = thread->jfr_thread_local();
jlong cur_cpu_time = os::thread_cpu_time(thread, true);
jlong prev_cpu_time = tl->get_cpu_time();
jlong prev_wallclock_time = tl->get_wallclock_time();
tl->set_wallclock_time(cur_wallclock_time);
// Threshold of 1 ms
if (cur_cpu_time - prev_cpu_time < 1 * NANOSECS_PER_MILLISEC) {
return false;
src/hotspot/share/jfr/periodic/jfrThreadCPULoadEvent.cpp:
void JfrThreadCPULoadEvent::send_events() {
Thread* periodic_thread = Thread::current();
traceid periodic_thread_id = JfrThreadLocal::thread_id(periodic_thread);
const int processor_count = JfrThreadCPULoadEvent::get_processor_count();
JfrTicks event_time = JfrTicks::now();
jlong cur_wallclock_time = JfrThreadCPULoadEvent::get_wallclock_time();
JfrJavaThreadIterator iter;
int number_of_threads = 0;
while (iter.has_next()) {
JavaThread* const jt = iter.next();
assert(jt != nullptr, "invariant");
++number_of_threads;
EventThreadCPULoad event(UNTIMED);
if (JfrThreadCPULoadEvent::update_event(event, jt, cur_wallclock_time, processor_count)) {
event.set_starttime(event_time);
event.set_endtime(event_time);
if (jt != periodic_thread) {
// Commit reads the thread id from this thread's trace data, so put it there temporarily
JfrThreadLocal::impersonate(periodic_thread, JFR_JVM_THREAD_ID(jt));
} else {
JfrThreadLocal::impersonate(periodic_thread, periodic_thread_id);
}
event.commit();
}
}
log_trace(jfr)("Measured CPU usage for %d threads in %.3f milliseconds", number_of_threads,
(double)(JfrTicks::now() - event_time).milliseconds());
JfrThreadLocal::stop_impersonating(periodic_thread);
}
void JfrThreadCPULoadEvent::send_event_for_thread(JavaThread* jt) {
EventThreadCPULoad event;
if (event.should_commit()) {
if (update_event(event, jt, get_wallclock_time(), get_processor_count())) {
event.commit();
}
}
}
src/hotspot/share/jfr/periodic/jfrThreadCPULoadEvent.hpp:
#ifndef SHARE_JFR_PERIODIC_JFRTHREADCPULOADEVENT_HPP
#define SHARE_JFR_PERIODIC_JFRTHREADCPULOADEVENT_HPP
#include "jni.h"
#include "memory/allStatic.hpp"
class JavaThread;
class EventThreadCPULoad;
class JfrThreadCPULoadEvent : public AllStatic {
static int _last_active_processor_count;
public:
static jlong get_wallclock_time();
static int get_processor_count();
static bool update_event(EventThreadCPULoad& event, JavaThread* thread, jlong cur_wallclock_time, int processor_count);
static void send_events();
static void send_event_for_thread(JavaThread* jt);
};
#endif // SHARE_JFR_PERIODIC_JFRTHREADCPULOADEVENT_HPP
Configuration | enabled | period |
---|---|---|
default | true | 10 s |
profiling | true | 10 s |
Field | Type | Description |
---|---|---|
user | float: percentage | User Mode CPU Load User mode thread CPU load |
system | float: percentage | System Mode CPU Load System mode thread CPU load |
Examples 3
startTime | long: millis | 11595339875
|
---|---|---|
system | float: percentage | 7.22255E-5
|
user | float: percentage | 1.9885802E-4
|
startTime | long: millis | 10643453375
|
---|---|---|
system | float: percentage | 0.0013731889
|
user | float: percentage | 0.009171989
|
startTime | long: millis | 839748957792
|
---|---|---|
system | float: percentage | 7.438218E-6
|
user | float: percentage | 1.2827567E-5
|
ThreadContextSwitchRate
default profiling startTime duration every chunk 11 17 21 23 24
Category: Operating System / Processor
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:
// Can take some time on certain platforms, especially under heavy load.
// Transition to native to avoid unnecessary stalls for pending safepoint synchronizations.
ThreadToNativeFromVM transition(JavaThread::current());
ret_val = JfrOSInterface::context_switch_rate(&rate);
}
if (ret_val == OS_ERR) {
log_debug(jfr, system)( "Unable to generate requestable event ThreadContextSwitchRate");
return;
}
if (ret_val == FUNCTIONALITY_NOT_IMPLEMENTED) {
return;
}
if (ret_val == OS_OK) {
EventThreadContextSwitchRate event;
event.set_switchRate((float)rate + 0.0f);
event.commit();
}
}
#define SEND_FLAGS_OF_TYPE(eventType, flagType) \
do { \
JVMFlag *flag = JVMFlag::flags; \
while (flag->name() != nullptr) { \
if (flag->is_ ## flagType()) { \
if (flag->is_unlocked()) { \
Configuration | enabled | period |
---|---|---|
default | true | 10 s |
profiling | true | 10 s |
Field | Type | Description |
---|---|---|
switchRate | float: hertz | Switch Rate Number of context switches per second |
NetworkUtilization
default profiling startTime every chunk 11 17 21 23 24
Category: Operating System / Network
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/jfrNetworkUtilization.cpp:
static JfrTicks last_sample_instant;
const JfrTicks cur_time = JfrTicks::now();
if (cur_time > last_sample_instant) {
const JfrTickspan interval = cur_time - last_sample_instant;
for (NetworkInterface *cur = network_interfaces; cur != nullptr; cur = cur->next()) {
InterfaceEntry& entry = get_entry(cur);
const uint64_t current_bytes_in = cur->get_bytes_in();
const uint64_t current_bytes_out = cur->get_bytes_out();
const uint64_t read_rate = rate_per_second(current_bytes_in, entry.bytes_in, interval);
const uint64_t write_rate = rate_per_second(current_bytes_out, entry.bytes_out, interval);
if (read_rate > 0 || write_rate > 0) {
write_interface_constant(entry);
EventNetworkUtilization event(UNTIMED);
event.set_starttime(cur_time);
event.set_endtime(cur_time);
event.set_networkInterface(entry.id);
event.set_readRate(8 * read_rate);
event.set_writeRate(8 * write_rate);
event.commit();
}
// update existing entry with new values
entry.bytes_in = current_bytes_in;
entry.bytes_out = current_bytes_out;
}
Configuration | enabled | period |
---|---|---|
default | true | 5 s |
profiling | true | 5 s |
Field | Type | Description |
---|---|---|
networkInterface | NetworkInterfaceName | Network Interface Network Interface Name |
readRate | long: bits-per-second | Read Rate Number of incoming bits per second |
writeRate | long: bits-per-second | Write Rate Number of outgoing bits per second |
Examples 3
networkInterface | NetworkInterfaceName | en0
|
---|---|---|
readRate | long: bits-per-second | 20528
|
startTime | long: millis | 879136599542
|
writeRate | long: bits-per-second | 17368
|
networkInterface | NetworkInterfaceName | lo0
|
---|---|---|
readRate | long: bits-per-second | 871120
|
startTime | long: millis | 40265146292
|
writeRate | long: bits-per-second | 871120
|
networkInterface | NetworkInterfaceName | en0
|
---|---|---|
readRate | long: bits-per-second | 3752016
|
startTime | long: millis | 63488234333
|
writeRate | long: bits-per-second | 2528728
|
PhysicalMemory
default profiling startTime duration every chunk 11 17 21 23 24 graal vm
Category: Operating System / Memory
OS Physical Memory
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
* PhysicalMemory event represents:
*
* @totalSize == The amount of physical memory (hw) installed and reported by the OS, in bytes.
* @usedSize == The amount of physical memory currently in use in the system (reserved/committed), in bytes.
*
* Both fields are systemwide, i.e. represents the entire OS/HW environment.
* These fields do not include virtual memory.
*
* If running inside a guest OS on top of a hypervisor in a virtualized environment,
* the total memory reported is the amount of memory configured for the guest OS by the hypervisor.
*/
TRACE_REQUEST_FUNC(PhysicalMemory) {
u8 totalPhysicalMemory = os::physical_memory();
EventPhysicalMemory event;
event.set_totalSize(totalPhysicalMemory);
event.set_usedSize(totalPhysicalMemory - os::available_memory());
event.commit();
}
TRACE_REQUEST_FUNC(SwapSpace) {
EventSwapSpace event;
event.set_totalSize(os::total_swap_space());
event.set_freeSize(os::free_swap_space());
event.commit();
}
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
totalSize | ulong: bytes | Total Size Total amount of physical memory available to OS |
usedSize | ulong: bytes | Used Size Total amount of physical memory in use |
Examples 3
SwapSpace
default profiling startTime duration every chunk 23 24
Category: Operating System / Memory
OS Swap Space
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
*
* If running inside a guest OS on top of a hypervisor in a virtualized environment,
* the total memory reported is the amount of memory configured for the guest OS by the hypervisor.
*/
TRACE_REQUEST_FUNC(PhysicalMemory) {
u8 totalPhysicalMemory = os::physical_memory();
EventPhysicalMemory event;
event.set_totalSize(totalPhysicalMemory);
event.set_usedSize(totalPhysicalMemory - os::available_memory());
event.commit();
}
TRACE_REQUEST_FUNC(SwapSpace) {
EventSwapSpace event;
event.set_totalSize(os::total_swap_space());
event.set_freeSize(os::free_swap_space());
event.commit();
}
TRACE_REQUEST_FUNC(JavaThreadStatistics) {
EventJavaThreadStatistics event;
event.set_activeCount(ThreadService::get_live_thread_count());
event.set_daemonCount(ThreadService::get_daemon_thread_count());
event.set_accumulatedCount(ThreadService::get_total_thread_count());
event.set_peakCount(ThreadService::get_peak_thread_count());
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
totalSize | long: bytes | Total Size Total swap space available to the OS |
freeSize | long: bytes | Free Size Free swap space |
ProcessStart
default profiling startTime duration 15 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java
Category: Operating System
Excludes in stack trace: java.lang.ProcessBuilder, java.lang.Runtime::exec
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Operating system process started
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java:
/**
* This class registers all mirror events.
*/
final class MirrorEvents {
private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>();
// Add mirror event mapping here. See MirrorEvent class for details.
static {
register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class);
register("jdk.internal.event.FileForceEvent", FileForceEvent.class);
register("jdk.internal.event.FileReadEvent", FileReadEvent.class);
register("jdk.internal.event.FileWriteEvent", FileWriteEvent.class);
register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class);
register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class);
register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class);
register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class);
register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class);
register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class);
register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class);
register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class);
register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class);
register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class);
register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class);
register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class);
src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java:
@Category({"Operating System"})
@Label("Process Start")
@Name("jdk.ProcessStart")
@Description("Operating system process started")
@RemoveFields("duration")
@StackFilter({"java.lang.ProcessBuilder", "java.lang.Runtime::exec"})
public final class ProcessStartEvent extends MirrorEvent {
@Label("Process Id")
public long pid;
@Label("Directory")
public String directory;
@Label("Command")
public String command;
}
src/java.base/share/classes/jdk/internal/event/ProcessStartEvent.java:
package jdk.internal.event;
/**
* Event for the start of an OS procsss
*/
public final class ProcessStartEvent extends Event {
public long pid;
public String directory;
public String command;
}
src/java.base/share/classes/java/lang/ProcessBuilder.java:
for (String s : cmdarray) {
if (s.indexOf('\u0000') >= 0) {
throw new IOException("invalid null character in command");
}
}
try {
Process process = ProcessImpl.start(cmdarray,
environment,
dir,
redirects,
redirectErrorStream);
ProcessStartEvent event = new ProcessStartEvent();
if (event.isEnabled()) {
event.directory = dir;
event.command = String.join(" ", cmdarray);
event.pid = process.pid();
event.commit();
}
// Racy initialization for logging; errors in configuration may throw exceptions
System.Logger logger = LOGGER;
if (logger == null) {
LOGGER = logger = System.getLogger("java.lang.ProcessBuilder");
}
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
pid | long | Process Id |
directory | string | Directory Consider contributing a description to jfreventcollector. |
command | string | Command Consider contributing a description to jfreventcollector. |
Examples 1
ContainerCPUUsage
default profiling startTime duration stackTrace 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ContainerCPUUsageEvent.java
Category: Operating System / Processor
Container CPU usage related information
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/ContainerCPUUsageEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.Timespan;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "ContainerCPUUsage")
@Label("CPU Usage")
@Category({"Operating System", "Processor"})
@Description("Container CPU usage related information")
public class ContainerCPUUsageEvent extends AbstractPeriodicEvent {
@Label("CPU Time")
@Description("Aggregate time consumed by all tasks in the container")
@Timespan
public long cpuTime;
@Label("CPU User Time")
@Description("Aggregate user time consumed by all tasks in the container")
@Timespan
public long cpuUserTime;
@Label("CPU System Time")
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
private static void initializeContainerEvents() {
if (JVM.isContainerized() ) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "JVM is containerized");
containerMetrics = Container.metrics();
if (containerMetrics != null) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Container metrics are available");
}
}
// The registration of events and hooks are needed to provide metadata,
// even when not running in a container
SecuritySupport.registerEvent(ContainerConfigurationEvent.class);
SecuritySupport.registerEvent(ContainerCPUUsageEvent.class);
SecuritySupport.registerEvent(ContainerCPUThrottlingEvent.class);
SecuritySupport.registerEvent(ContainerMemoryUsageEvent.class);
SecuritySupport.registerEvent(ContainerIOUsageEvent.class);
PeriodicEvents.addJDKEvent(ContainerConfigurationEvent.class, emitContainerConfiguration);
PeriodicEvents.addJDKEvent(ContainerCPUUsageEvent.class, emitContainerCPUUsage);
PeriodicEvents.addJDKEvent(ContainerCPUThrottlingEvent.class, emitContainerCPUThrottling);
PeriodicEvents.addJDKEvent(ContainerMemoryUsageEvent.class, emitContainerMemoryUsage);
PeriodicEvents.addJDKEvent(ContainerIOUsageEvent.class, emitContainerIOUsage);
}
private static void emitExceptionStatistics() {
ThrowableTracer.emitStatistics();
}
private static void emitContainerConfiguration() {
if (containerMetrics != null) {
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
t.cpuShares = containerMetrics.getCpuShares();
t.effectiveCpuCount = containerMetrics.getEffectiveCpuCount();
t.memorySoftLimit = containerMetrics.getMemorySoftLimit();
t.memoryLimit = containerMetrics.getMemoryLimit();
t.swapMemoryLimit = containerMetrics.getMemoryAndSwapLimit();
t.hostTotalMemory = JVM.hostTotalMemory();
t.hostTotalSwapMemory = JVM.hostTotalSwapMemory();
t.commit();
}
}
private static void emitContainerCPUUsage() {
if (containerMetrics != null) {
ContainerCPUUsageEvent event = new ContainerCPUUsageEvent();
event.cpuTime = containerMetrics.getCpuUsage();
event.cpuSystemTime = containerMetrics.getCpuSystemUsage();
event.cpuUserTime = containerMetrics.getCpuUserUsage();
event.commit();
}
}
private static void emitContainerMemoryUsage() {
if (containerMetrics != null) {
ContainerMemoryUsageEvent event = new ContainerMemoryUsageEvent();
Configuration | enabled | period |
---|---|---|
default | true | 30 s |
profiling | true | 30 s |
Field | Type | Description |
---|---|---|
cpuTime | long: nanos | CPU Time Aggregate time consumed by all tasks in the container |
cpuUserTime | long: nanos | CPU User Time Aggregate user time consumed by all tasks in the container |
cpuSystemTime | long: nanos | CPU System Time Aggregate system time consumed by all tasks in the container |
ContainerIOUsage
default profiling startTime duration stackTrace 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ContainerIOUsageEvent.java
Category: Operating System / File System
Container IO usage related information
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/ContainerIOUsageEvent.java:
@Name(Type.EVENT_NAME_PREFIX + "ContainerIOUsage")
@Label("Container IO Usage")
@Category({"Operating System", "File System"})
@Description("Container IO usage related information")
public class ContainerIOUsageEvent extends AbstractPeriodicEvent {
@Label("Block IO Request Count")
@Description("Number of block IO requests to the disk that have been issued by the container")
public long serviceRequests;
@Label("Block IO Transfer")
@Description("Number of block IO bytes that have been transferred to/from the disk by the container")
@DataAmount
public long dataTransferred;
}
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
if (JVM.isContainerized() ) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "JVM is containerized");
containerMetrics = Container.metrics();
if (containerMetrics != null) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Container metrics are available");
}
}
// The registration of events and hooks are needed to provide metadata,
// even when not running in a container
SecuritySupport.registerEvent(ContainerConfigurationEvent.class);
SecuritySupport.registerEvent(ContainerCPUUsageEvent.class);
SecuritySupport.registerEvent(ContainerCPUThrottlingEvent.class);
SecuritySupport.registerEvent(ContainerMemoryUsageEvent.class);
SecuritySupport.registerEvent(ContainerIOUsageEvent.class);
PeriodicEvents.addJDKEvent(ContainerConfigurationEvent.class, emitContainerConfiguration);
PeriodicEvents.addJDKEvent(ContainerCPUUsageEvent.class, emitContainerCPUUsage);
PeriodicEvents.addJDKEvent(ContainerCPUThrottlingEvent.class, emitContainerCPUThrottling);
PeriodicEvents.addJDKEvent(ContainerMemoryUsageEvent.class, emitContainerMemoryUsage);
PeriodicEvents.addJDKEvent(ContainerIOUsageEvent.class, emitContainerIOUsage);
}
private static void emitExceptionStatistics() {
ThrowableTracer.emitStatistics();
}
private static void emitContainerConfiguration() {
if (containerMetrics != null) {
ContainerConfigurationEvent t = new ContainerConfigurationEvent();
t.containerType = containerMetrics.getProvider();
t.cpuSlicePeriod = containerMetrics.getCpuPeriod();
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
private static void emitContainerMemoryUsage() {
if (containerMetrics != null) {
ContainerMemoryUsageEvent event = new ContainerMemoryUsageEvent();
event.memoryFailCount = containerMetrics.getMemoryFailCount();
event.memoryUsage = containerMetrics.getMemoryUsage();
event.swapMemoryUsage = containerMetrics.getMemoryAndSwapUsage();
event.commit();
}
}
private static void emitContainerIOUsage() {
if (containerMetrics != null) {
ContainerIOUsageEvent event = new ContainerIOUsageEvent();
event.serviceRequests = containerMetrics.getBlkIOServiceCount();
event.dataTransferred = containerMetrics.getBlkIOServiced();
event.commit();
}
}
private static void emitContainerCPUThrottling() {
if (containerMetrics != null) {
ContainerCPUThrottlingEvent event = new ContainerCPUThrottlingEvent();
Configuration | enabled | period |
---|---|---|
default | true | 30 s |
profiling | true | 30 s |
Field | Type | Description |
---|---|---|
serviceRequests | long | Block IO Request Count Number of block IO requests to the disk that have been issued by the container |
dataTransferred | long: bytes | Block IO Transfer Number of block IO bytes that have been transferred to/from the disk by the container |
ContainerConfiguration
default profiling startTime duration stackTrace 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ContainerConfigurationEvent.java
Category: Operating System
A set of container specific attributes
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/ContainerConfigurationEvent.java:
@Name(Type.EVENT_NAME_PREFIX + "ContainerConfiguration")
@Label("Container Configuration")
@Category({"Operating System"})
@Description("A set of container specific attributes")
public final class ContainerConfigurationEvent extends AbstractPeriodicEvent {
@Label("Container Type")
@Description("Container type information")
public String containerType;
@Label("CPU Slice Period")
@Description("Length of the scheduling period for processes within the container")
@Timespan(Timespan.MICROSECONDS)
public long cpuSlicePeriod;
@Label("CPU Quota")
@Description("Total available run-time allowed during each scheduling period for all tasks in the container")
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
private static void initializeContainerEvents() {
if (JVM.isContainerized() ) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "JVM is containerized");
containerMetrics = Container.metrics();
if (containerMetrics != null) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Container metrics are available");
}
}
// The registration of events and hooks are needed to provide metadata,
// even when not running in a container
SecuritySupport.registerEvent(ContainerConfigurationEvent.class);
SecuritySupport.registerEvent(ContainerCPUUsageEvent.class);
SecuritySupport.registerEvent(ContainerCPUThrottlingEvent.class);
SecuritySupport.registerEvent(ContainerMemoryUsageEvent.class);
SecuritySupport.registerEvent(ContainerIOUsageEvent.class);
PeriodicEvents.addJDKEvent(ContainerConfigurationEvent.class, emitContainerConfiguration);
PeriodicEvents.addJDKEvent(ContainerCPUUsageEvent.class, emitContainerCPUUsage);
PeriodicEvents.addJDKEvent(ContainerCPUThrottlingEvent.class, emitContainerCPUThrottling);
PeriodicEvents.addJDKEvent(ContainerMemoryUsageEvent.class, emitContainerMemoryUsage);
PeriodicEvents.addJDKEvent(ContainerIOUsageEvent.class, emitContainerIOUsage);
}
private static void emitExceptionStatistics() {
ThrowableTracer.emitStatistics();
}
private static void emitContainerConfiguration() {
if (containerMetrics != null) {
ContainerConfigurationEvent t = new ContainerConfigurationEvent();
t.containerType = containerMetrics.getProvider();
t.cpuSlicePeriod = containerMetrics.getCpuPeriod();
t.cpuQuota = containerMetrics.getCpuQuota();
t.cpuShares = containerMetrics.getCpuShares();
t.effectiveCpuCount = containerMetrics.getEffectiveCpuCount();
t.memorySoftLimit = containerMetrics.getMemorySoftLimit();
t.memoryLimit = containerMetrics.getMemoryLimit();
t.swapMemoryLimit = containerMetrics.getMemoryAndSwapLimit();
t.hostTotalMemory = JVM.hostTotalMemory();
t.hostTotalSwapMemory = JVM.hostTotalSwapMemory();
t.commit();
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
containerType | string | Container Type Container type information |
cpuSlicePeriod | long: microseconds | CPU Slice Period Length of the scheduling period for processes within the container |
cpuQuota | long: microseconds | CPU Quota Total available run-time allowed during each scheduling period for all tasks in the container |
cpuShares | long | CPU Shares Relative weighting of processes with the container used for prioritizing the scheduling of processes across all containers running on a host |
effectiveCpuCount | long | Effective CPU Count Number of effective processors that this container has available to it |
memorySoftLimit | long: bytes | Memory Soft Limit Hint to the operating system that allows groups to specify the minimum required amount of physical memory |
memoryLimit | long: bytes | Memory Limit Maximum amount of physical memory that can be allocated in the container |
swapMemoryLimit | long: bytes | Memory and Swap Limit Maximum amount of physical memory and swap space, in bytes, that can be allocated in the container |
hostTotalMemory | long: bytes 20+ | Container Host Total Memory Total memory of the host running the container |
hostTotalSwapMemory | long: bytes 23+ | Container Host Total Swap Memory Total swap memory of the host running the container |
ContainerCPUThrottling
default profiling startTime duration stackTrace 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ContainerCPUThrottlingEvent.java
Category: Operating System / Processor
Container CPU throttling related information
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/ContainerCPUThrottlingEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.Timespan;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "ContainerCPUThrottling")
@Label("CPU Throttling")
@Category({"Operating System", "Processor"})
@Description("Container CPU throttling related information")
public class ContainerCPUThrottlingEvent extends AbstractPeriodicEvent {
@Label("CPU Elapsed Slices")
@Description("Number of time-slice periods that have elapsed if a CPU quota has been setup for the container")
public long cpuElapsedSlices;
@Label("CPU Throttled Slices")
@Description("Number of time-slice periods that the CPU has been throttled or limited due to exceeding CPU quota")
public long cpuThrottledSlices;
@Label("CPU Throttled Time")
@Description("Total time duration, in nanoseconds, that the CPU has been throttled or limited due to exceeding CPU quota")
@Timespan
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
private static void initializeContainerEvents() {
if (JVM.isContainerized() ) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "JVM is containerized");
containerMetrics = Container.metrics();
if (containerMetrics != null) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Container metrics are available");
}
}
// The registration of events and hooks are needed to provide metadata,
// even when not running in a container
SecuritySupport.registerEvent(ContainerConfigurationEvent.class);
SecuritySupport.registerEvent(ContainerCPUUsageEvent.class);
SecuritySupport.registerEvent(ContainerCPUThrottlingEvent.class);
SecuritySupport.registerEvent(ContainerMemoryUsageEvent.class);
SecuritySupport.registerEvent(ContainerIOUsageEvent.class);
PeriodicEvents.addJDKEvent(ContainerConfigurationEvent.class, emitContainerConfiguration);
PeriodicEvents.addJDKEvent(ContainerCPUUsageEvent.class, emitContainerCPUUsage);
PeriodicEvents.addJDKEvent(ContainerCPUThrottlingEvent.class, emitContainerCPUThrottling);
PeriodicEvents.addJDKEvent(ContainerMemoryUsageEvent.class, emitContainerMemoryUsage);
PeriodicEvents.addJDKEvent(ContainerIOUsageEvent.class, emitContainerIOUsage);
}
private static void emitExceptionStatistics() {
ThrowableTracer.emitStatistics();
}
private static void emitContainerConfiguration() {
if (containerMetrics != null) {
ContainerConfigurationEvent t = new ContainerConfigurationEvent();
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
private static void emitContainerIOUsage() {
if (containerMetrics != null) {
ContainerIOUsageEvent event = new ContainerIOUsageEvent();
event.serviceRequests = containerMetrics.getBlkIOServiceCount();
event.dataTransferred = containerMetrics.getBlkIOServiced();
event.commit();
}
}
private static void emitContainerCPUThrottling() {
if (containerMetrics != null) {
ContainerCPUThrottlingEvent event = new ContainerCPUThrottlingEvent();
event.cpuElapsedSlices = containerMetrics.getCpuNumPeriods();
event.cpuThrottledSlices = containerMetrics.getCpuNumThrottled();
event.cpuThrottledTime = containerMetrics.getCpuThrottledTime();
event.commit();
}
}
public static void remove() {
PeriodicEvents.removeEvent(emitExceptionStatistics);
PeriodicEvents.removeEvent(emitDirectBufferStatistics);
Configuration | enabled | period |
---|---|---|
default | true | 30 s |
profiling | true | 30 s |
Field | Type | Description |
---|---|---|
cpuElapsedSlices | long | CPU Elapsed Slices Number of time-slice periods that have elapsed if a CPU quota has been setup for the container |
cpuThrottledSlices | long | CPU Throttled Slices Number of time-slice periods that the CPU has been throttled or limited due to exceeding CPU quota |
cpuThrottledTime | long: nanos | CPU Throttled Time Total time duration, in nanoseconds, that the CPU has been throttled or limited due to exceeding CPU quota |
ContainerMemoryUsage
default profiling startTime duration stackTrace 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ContainerMemoryUsageEvent.java
Category: Operating System / Memory
Container memory usage related information
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/ContainerMemoryUsageEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.DataAmount;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "ContainerMemoryUsage")
@Label("Container Memory Usage")
@Category({"Operating System", "Memory"})
@Description("Container memory usage related information")
public final class ContainerMemoryUsageEvent extends AbstractPeriodicEvent {
@Label("Memory Fail Count")
@Description("Number of times that user memory requests in the container have exceeded the memory limit")
public long memoryFailCount;
@Label("Memory Usage")
@Description("Amount of physical memory, in bytes, that is currently allocated in the current container")
@DataAmount
public long memoryUsage;
@Label("Memory and Swap Usage")
@Description("Amount of physical memory and swap space, in bytes, that is currently allocated in the current container")
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
private static void initializeContainerEvents() {
if (JVM.isContainerized() ) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "JVM is containerized");
containerMetrics = Container.metrics();
if (containerMetrics != null) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.DEBUG, "Container metrics are available");
}
}
// The registration of events and hooks are needed to provide metadata,
// even when not running in a container
SecuritySupport.registerEvent(ContainerConfigurationEvent.class);
SecuritySupport.registerEvent(ContainerCPUUsageEvent.class);
SecuritySupport.registerEvent(ContainerCPUThrottlingEvent.class);
SecuritySupport.registerEvent(ContainerMemoryUsageEvent.class);
SecuritySupport.registerEvent(ContainerIOUsageEvent.class);
PeriodicEvents.addJDKEvent(ContainerConfigurationEvent.class, emitContainerConfiguration);
PeriodicEvents.addJDKEvent(ContainerCPUUsageEvent.class, emitContainerCPUUsage);
PeriodicEvents.addJDKEvent(ContainerCPUThrottlingEvent.class, emitContainerCPUThrottling);
PeriodicEvents.addJDKEvent(ContainerMemoryUsageEvent.class, emitContainerMemoryUsage);
PeriodicEvents.addJDKEvent(ContainerIOUsageEvent.class, emitContainerIOUsage);
}
private static void emitExceptionStatistics() {
ThrowableTracer.emitStatistics();
}
private static void emitContainerConfiguration() {
if (containerMetrics != null) {
ContainerConfigurationEvent t = new ContainerConfigurationEvent();
t.containerType = containerMetrics.getProvider();
src/jdk.jfr/share/classes/jdk/jfr/internal/JDKEvents.java:
private static void emitContainerCPUUsage() {
if (containerMetrics != null) {
ContainerCPUUsageEvent event = new ContainerCPUUsageEvent();
event.cpuTime = containerMetrics.getCpuUsage();
event.cpuSystemTime = containerMetrics.getCpuSystemUsage();
event.cpuUserTime = containerMetrics.getCpuUserUsage();
event.commit();
}
}
private static void emitContainerMemoryUsage() {
if (containerMetrics != null) {
ContainerMemoryUsageEvent event = new ContainerMemoryUsageEvent();
event.memoryFailCount = containerMetrics.getMemoryFailCount();
event.memoryUsage = containerMetrics.getMemoryUsage();
event.swapMemoryUsage = containerMetrics.getMemoryAndSwapUsage();
event.commit();
}
}
private static void emitContainerIOUsage() {
if (containerMetrics != null) {
ContainerIOUsageEvent event = new ContainerIOUsageEvent();
Configuration | enabled | period |
---|---|---|
default | true | 30 s |
profiling | true | 30 s |
Field | Type | Description |
---|---|---|
memoryFailCount | long | Memory Fail Count Number of times that user memory requests in the container have exceeded the memory limit |
memoryUsage | long: bytes | Memory Usage Amount of physical memory, in bytes, that is currently allocated in the current container |
swapMemoryUsage | long: bytes | Memory and Swap Usage Amount of physical memory and swap space, in bytes, that is currently allocated in the current container |
Truffle Compiler
graal.compiler.truffle.CompilerStatistics
startTime duration every 1s graal vm only
Category: Truffle Compiler
Truffe Compiler Statistics
Field | Type | Description |
---|---|---|
compiledMethods | ulong | Compiled Methods Compiled Methods |
bailouts | ulong | Bailouts Bailouts |
invalidations | ulong | Invalidated Compilations Invalidated Compilations |
compiledCodeSize | ulong: bytes | Compilation Resulting Size Compilation Resulting Size |
totalTime | long: millis | Total Time Total Time |
peakTime | long: millis | Peak Time Peak Time |
graal.compiler.truffle.Deoptimization
startTime duration graal vm only
Category: Truffle Compiler
Truffle Call Target Deoptimization
Field | Type | Description |
---|---|---|
id | long 23+ | Id Truffle Compilable Unique Id |
source | string | Source Compiled Source |
language | string | Language Guest Language |
rootFunction | string | Root Function Root Function |
graal.compiler.truffle.AssumptionInvalidation
startTime duration stackTrace graal vm only
Category: Truffle Compiler
Truffle Assumption Invalidation
Field | Type | Description |
---|---|---|
id | long 23+ | Id Truffle Compilable Unique Id |
source | string | Source Compiled Source |
language | string | Language Guest Language |
rootFunction | string | Root Function Root Function |
reason | string | Reason Invalidation Reason |
graal.compiler.truffle.CompilationFailure
startTime duration graal vm only
Category: Truffle Compiler
Truffe Compilation Failures
Field | Type | Description |
---|---|---|
id | long 23+ | Id Truffle Compilable Unique Id |
source | string | Source Compiled Source |
language | string | Language Guest Language |
rootFunction | string | Root Function Root Function |
permanentFailure | boolean | Permanent Failure Permanent Failure |
failureReason | string | Failure Reason Failure Reason |
truffleTier | int 23+ | Tier The Tier of the Truffle Compiler |
stackTrace | string 23+ | Exception Stack Trace Exception Stack Trace |
graal.compiler.truffle.Compilation
startTime duration graal vm only
Category: Truffle Compiler
Truffe Compilation
Field | Type | Description |
---|---|---|
id | long 23+ | Id Truffle Compilable Unique Id |
source | string | Source Compiled Source |
language | string | Language Guest Language |
rootFunction | string | Root Function Root Function |
success | boolean | Succeeded Compilation Status |
compiledCodeSize | uint: bytes | Compiled Code Size Compiled Code Size |
compiledCodeAddress | long | Compiled Code Address Compiled Code Address |
inlinedCalls | uint | Inlined Calls Inlined Calls |
dispatchedCalls | uint | Dispatched Calls Dispatched Calls |
graalNodeCount | uint | Graal Nodes Graal Node Count |
peNodeCount | uint | Truffle Nodes Truffle Node Count |
peTime | ulong | Partial Evaluation Time Partial Evaluation Time in Milliseconds |
truffleTier | int 23+ | Tier The Tier of the Truffle Compiler |
Types
Bytecode
Bytecode Instruction
Field | Type | Description |
---|---|---|
bytecode | string | Instruction |
CalleeMethod
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
type | string | Class |
name | string | Method Name |
descriptor | string | Method Descriptor |
ChunkHeader
Chunk Header No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
payload array | byte | Payload |
Class
Java Class
Field | Type | Description |
---|---|---|
classLoader | ClassLoader | Class Loader Consider contributing a description to jfreventcollector. |
name | Symbol | Name Consider contributing a description to jfreventcollector. |
package | Package | Package Consider contributing a description to jfreventcollector. |
modifiers | int | Access Modifiers |
hidden | boolean 15+ | Hidden |
ClassLoader
Java Class Loader
Field | Type | Description |
---|---|---|
type | Class | Type Consider contributing a description to jfreventcollector. |
name | Symbol | Name Consider contributing a description to jfreventcollector. |
CodeBlobType
Code Blob Type No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
type | string | Type |
Examples 3
CompilerPhaseType
Compiler Phase Type No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
phase | string | Phase |
CompilerType
Compiler Type No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
compiler | string | Compiler |
CopyFailed
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
objectCount | ulong | Object Count |
firstSize | ulong: bytes | First Failed Object Size |
smallestSize | ulong: bytes | Smallest Failed Object Size |
totalSize | ulong: bytes | Total Object Size |
DeoptimizationAction
Deoptimization Action No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
action | string | Action |
DeoptimizationReason
Deoptimization Reason No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
reason | string | Reason |
FlagValueOrigin
Flag Value Origin No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
origin | string | Origin |
FrameType
Frame type No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
description | string | Description |
G1EvacuationStatistics
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
allocated | ulong: bytes | Allocated Total memory allocated by PLABs |
wasted | ulong: bytes | Wasted Total memory wasted within PLABs due to alignment or refill |
used | ulong: bytes | Used Total memory occupied by objects within PLABs |
undoWaste | ulong: bytes | Undo Wasted Total memory wasted due to allocation undo within PLABs |
regionEndWaste | ulong: bytes | Region End Wasted Total memory wasted at the end of regions due to refill |
regionsRefilled | uint | Region Refills Number of regions refilled |
numPlabsFilled | ulong 17+ | PLAB Fills Number of PLABs filled |
directAllocated | ulong: bytes | Allocated (direct) Total memory allocated using direct allocation outside of PLABs |
numDirectAllocated | ulong 17+ | Direct allocations Number of direct allocations |
failureUsed | ulong: bytes | Used (failure) Total memory occupied by objects in regions where evacuation failed |
failureWaste | ulong: bytes | Wasted (failure) Total memory left unused in regions where evacuation failed |
Examples 2
allocated | ulong: bytes | 0
|
---|---|---|
directAllocated | ulong: bytes | 0
|
failureUsed | ulong: bytes | 0
|
failureWaste | ulong: bytes | 0
|
gcId | uint | 939
|
numDirectAllocated | ulong | 6115354792
|
numPlabsFilled | ulong | 0
|
regionEndWaste | ulong: bytes | 0
|
regionsRefilled | uint | 0
|
undoWaste | ulong: bytes | 0
|
used | ulong: bytes | 0
|
wasted | ulong: bytes | 0
|
allocated | ulong: bytes | 966048
|
---|---|---|
directAllocated | ulong: bytes | 105808
|
failureUsed | ulong: bytes | 0
|
failureWaste | ulong: bytes | 0
|
gcId | uint | 962
|
numDirectAllocated | ulong | 5
|
numPlabsFilled | ulong | 6652858312
|
regionEndWaste | ulong: bytes | 0
|
regionsRefilled | uint | 1
|
undoWaste | ulong: bytes | 0
|
used | ulong: bytes | 895552
|
wasted | ulong: bytes | 4848
|
G1HeapRegionType
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
G1 Heap Region Type No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
type | string | Type |
G1YCType
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
G1 YC Type No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
type | string | Type |
GCCause
GC Cause No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
cause | string | Cause |
GCName
GC Name No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
name | string | Name |
GCThresholdUpdater
GC Threshold Updater No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
updater | string | Updater |
GCWhen
GC When No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
when | string | When |
InflateCause
Inflation Cause No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
cause | string | Cause |
MetadataType
Metadata Type No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
type | string | Type |
MetaspaceObjectType
Appearing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Missing in: G1GC
Metaspace Object Type No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
type | string | Type |
MetaspaceSizes
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
committed | ulong: bytes | Committed Committed memory for this space |
used | ulong: bytes | Used Bytes allocated by objects in the space |
reserved | ulong: bytes | Reserved Reserved memory for this space |
Examples 3
Method
Java Method
Field | Type | Description |
---|---|---|
type | Class | Type Consider contributing a description to jfreventcollector. |
name | Symbol | Name Consider contributing a description to jfreventcollector. |
descriptor | Symbol | Descriptor Consider contributing a description to jfreventcollector. |
modifiers | int | Access Modifiers |
hidden | boolean | Hidden |
Module
Module No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
name | Symbol | Name Consider contributing a description to jfreventcollector. |
version | Symbol | Version Consider contributing a description to jfreventcollector. |
location | Symbol | Location Consider contributing a description to jfreventcollector. |
classLoader | ClassLoader | Class Loader Consider contributing a description to jfreventcollector. |
NMTType
NarrowOopMode
Narrow Oop Mode No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
mode | string | Mode |
NetworkInterfaceName
Network Interface No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
networkInterface | string | Network Interface Network Interface Name |
ObjectSpace
Appearing in: ParallelGC
Missing in: G1GC, SerialGC, ShenandoahGC, ZGC
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
start | ulong: address | Start Address Start address of the space |
end | ulong: address | End Address End address of the space |
used | ulong: bytes | Used Bytes allocated by objects in the space |
size | ulong: bytes | Size Size of the space |
Examples 3
OldObject
Old Object No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
address | ulong: address | Memory Address |
type | Class | Java Class |
description | string | Object Description Object description |
referrer | Reference | Referrer Object Object referencing this object |
Examples 3
address | ulong: address | 31547857072
|
---|---|---|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | [Ljava/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.1
|
name | string | java/lang
|
address | ulong: address | 30125742528
|
---|---|---|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | org/antlr/v4/runtime/atn/BasicState
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/antlr/v4/runtime/atn
|
address | ulong: address | 30171712024
|
---|---|---|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
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.1
|
name | string | java/util/concurrent
|
OldObjectArray
Old Object Array No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
size | int | Array Size Size of array |
index | int | Index Index in the array |
OldObjectField
Old Object Field No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
name | string | Field Name of field |
modifiers | short | Field Modifiers Field modifiers |
OldObjectGcRoot
GC Root No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
description | string | Root Description Root information |
system | OldObjectRootSystem | System The subsystem of origin for the root |
type | OldObjectRootType | Type The root type |
OldObjectRootSystem
GC Root System No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
system | string | System |
OldObjectRootType
GC Root Type No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
type | string | Type |
Package
Package No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
name | Symbol | Name Consider contributing a description to jfreventcollector. |
module | Module | Module Consider contributing a description to jfreventcollector. |
exported | boolean | Exported |
Reference
Reference No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
array | OldObjectArray | Array Information Array or null if it is not an array |
field | OldObjectField | Field Information Field or null if it is an array |
object | OldObject | Object Object holder for this reference |
skip | int | Skip Value The object is this many hops away |
ReferenceType
Reference Type No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
type | string | Type |
ShenandoahHeapRegionState
Appearing in: ShenandoahGC
Missing in: G1GC, ParallelGC, SerialGC, ZGC
Shenandoah Heap Region State No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
state | string | State |
StackFrame
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
method | Method | Java Method |
lineNumber | int | Line Number |
bytecodeIndex | int | Bytecode Index |
type | FrameType | Frame Type |
Examples 3
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 | 22
|
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 | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/runtime
|
type | FrameType | Inlined
|
bytecodeIndex | int | 0
|
---|---|---|
lineNumber | int | 62
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | run
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | org/apache/spark/scheduler/TaskResultGetter$$anon$3
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/scheduler
|
type | FrameType | Interpreted
|
bytecodeIndex | int | 31
|
---|---|---|
lineNumber | int | 102
|
method | Method | |
descriptor | string | (Ljava/io/OutputStream;ILnet/jpountz/lz4/LZ4Compressor;Ljava/util/zip/Checksum;Z)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 | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | net/jpountz/lz4/LZ4BlockOutputStream
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | net/jpountz/lz4
|
type | FrameType | JIT compiled
|
StackTrace
Stacktrace No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
truncated | boolean | Truncated |
frames array | StackFrame struct | Stack Frames |
Symbol
Symbol No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
string | string | String |
Examples 3
Thread
Thread No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
osName | string | OS Thread Name |
osThreadId | long | OS Thread Id |
javaName | string | Java Thread Name |
javaThreadId | long | Java Thread Id |
group | ThreadGroup | Java Thread Group |
virtual | boolean 19+ | Virtual Thread |
ThreadGroup
Thread Group No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
parent | ThreadGroup | Parent Consider contributing a description to jfreventcollector. |
name | string | Name |
Examples 3
name | string | system
|
---|---|---|
parent | ThreadGroup | null
|
name | string | main
|
---|---|---|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
ThreadState
VMOperationType
VM Operation Type No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
type | string | Type |
VirtualSpace
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
start | ulong: address | Start Address Start address of the virtual space |
committedEnd | ulong: address | Committed End Address End address of the committed memory for the virtual space |
committedSize | ulong: bytes | Committed Size Size of the committed memory for the virtual space |
reservedEnd | ulong: address | Reserved End Address End address of the reserved memory for the virtual space |
reservedSize | ulong: bytes | Reserved Size Size of the reserved memory for the virtual space |
Examples 3
ZPageTypeType
Appearing in: ZGC
Missing in: G1GC, ParallelGC, SerialGC, ShenandoahGC
Z Page Type No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
type | string | Type |
ZStatisticsCounterType
Appearing in: ZGC
Missing in: G1GC, ParallelGC, SerialGC, ShenandoahGC
Z Statistics Counter No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
counter | string | Counter |
ZStatisticsSamplerType
Appearing in: ZGC
Missing in: G1GC, ParallelGC, SerialGC, ShenandoahGC
Z Statistics Sampler No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Field | Type | Description |
---|---|---|
sampler | string | Sampler |
XML Content Types
address
bits-per-second
Annotation: jdk.jfr.DataAmount(BITS), jdk.jfr.Frequency
bytes
bytes-per-second
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Annotation: jdk.jfr.DataAmount(BYTES), jdk.jfr.Frequency
certificateId
Appearing in: G1GC
Missing in: ParallelGC, SerialGC, ShenandoahGC, ZGC
Annotation: jdk.jfr.events.CertificateId
epochmillis
Annotation: jdk.jfr.Timestamp(MILLISECONDS_SINCE_EPOCH)
hertz
microseconds
millis
Annotation: jdk.jfr.Timespan(MILLISECONDS)
nanos
Annotation: jdk.jfr.Timespan(NANOSECONDS)
percentage
tickspan
Annotation: jdk.jfr.Timespan(TICKS)
tickstamp
Annotation: jdk.jfr.Timestamp(TICKS)
XML Types
Class
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Parameter Type | const Klass* |
---|---|
Field Type | const Klass* |
Java Type | java.lang.Class |
ClassLoader
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Parameter Type | const ClassLoaderData* |
---|---|
Field Type | const ClassLoaderData* |
Examples 3
name | string | null
|
---|---|---|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
Method
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Parameter Type | const Method* |
---|---|
Field Type | const Method* |
Examples 3
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 | 22
|
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 | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/runtime
|
descriptor | string | ()V
|
---|---|---|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | run
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | org/apache/spark/scheduler/TaskResultGetter$$anon$3
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/scheduler
|
descriptor | string | (Ljava/io/OutputStream;ILnet/jpountz/lz4/LZ4Compressor;Ljava/util/zip/Checksum;Z)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 | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | net/jpountz/lz4/LZ4BlockOutputStream
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | net/jpountz/lz4
|
Module
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Parameter Type | const ModuleEntry* |
---|---|
Field Type | const ModuleEntry* |
Examples 3
classLoader | ClassLoader | |
---|---|---|
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
Package
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Parameter Type | const PackageEntry* |
---|---|
Field Type | const PackageEntry* |
Examples 3
exported | boolean | true
|
---|---|---|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/runtime
|
StackTrace
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Parameter Type | u8 |
---|---|
Field Type | u8 |
Java Type | jdk.types.StackTrace |
Examples 3
frames | StackFrame | |
---|---|---|
bytecodeIndex | int | 31
|
lineNumber | int | 102
|
method | Method | |
descriptor | string | (Ljava/io/OutputStream;ILnet/jpountz/lz4/LZ4Compressor;Ljava/util/zip/Checksum;Z)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 | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | net/jpountz/lz4/LZ4BlockOutputStream
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | net/jpountz/lz4
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
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 | 22
|
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 | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/runtime
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
frames | StackFrame | |
---|---|---|
bytecodeIndex | int | 0
|
lineNumber | int | 62
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | run
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | org/apache/spark/scheduler/TaskResultGetter$$anon$3
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/apache/spark/scheduler
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
Thread
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Parameter Type | u8 |
---|---|
Field Type | u8 |
Java Type | java.lang.Thread |
Examples 3
group | ThreadGroup | |
---|---|---|
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | SparkUI-1617
|
javaThreadId | long | 1617
|
osName | string | SparkUI-1617
|
osThreadId | long | 115247
|
virtual | boolean | false
|
group | ThreadGroup | |
---|---|---|
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | shuffle-client-5-6
|
javaThreadId | long | 1847
|
osName | string | shuffle-client-5-6
|
osThreadId | long | 138523
|
virtual | boolean | false
|
Ticks
unsigned
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Parameter Type | const Ticks& |
---|---|
Field Type | Ticks |
Java Type | long |
Content Type | tickstamp |
Tickspan
unsigned
No description available. Write your own and contribute it to jfreventcollector. or directly to the OpenJDK.
Parameter Type | const Tickspan& |
---|---|
Field Type | Tickspan |
Java Type | long |
Content Type | tickspan |
boolean
Parameter Type | bool |
---|---|
Field Type | bool |
Java Type | boolean |
byte
Parameter Type | s1 |
---|---|
Field Type | s1 |
Java Type | byte |
char
Parameter Type | char |
---|---|
Field Type | char |
Java Type | char |
double
Parameter Type | double |
---|---|
Field Type | double |
Java Type | double |
float
Parameter Type | float |
---|---|
Field Type | float |
Java Type | float |
int
long
short
Parameter Type | s2 |
---|---|
Field Type | s2 |
Java Type | short |
string
Parameter Type | const char* |
---|---|
Field Type | const char* |
Java Type | java.lang.String |
ubyte
uint
unsigned
Parameter Type | unsigned |
---|---|
Field Type | unsigned |
Java Type | int |