Introduction
The following are the events for OpenJDK 15 (jdk-15.0.10+5, permalink, 30-October-2024). The events are collected from the event configuration and the source code. Visit the jfreventcollector repository for more information. This is also the place you can contribute additional event descriptions, if you don't want to contribute them directly to the OpenJDK. The site generator lives on GitHub , too.
This page is maintained by Johannes Bechberger of the SapMachine team at SAP and contributors.
Some events have fake end times/durations; these are hidden in the event description here.
Flight Recorder
DumpReason
default profiling startTime 11 17 21 23 24
Category: Flight Recorder
Who requested the recording and why
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/recorder/repository/jfrEmergencyDump.cpp:
static void post_events(bool exception_handler, Thread* thread) {
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(thread));
if (exception_handler) {
EventShutdown e;
e.set_reason("VM Error");
e.commit();
} else {
// OOM
LeakProfiler::emit_events(max_jlong, false, false);
}
EventDumpReason event;
event.set_reason(exception_handler ? "Crash" : "Out of Memory");
event.set_recordingId(-1);
event.commit();
}
void JfrEmergencyDump::on_vm_shutdown(bool exception_handler) {
if (!guard_reentrancy()) {
return;
}
Thread* thread = Thread::current_or_null_safe();
if (thread == NULL) {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
reason | string | Reason Reason for writing recording data to disk |
recordingId | int | Recording Id Id of the recording that triggered the dump, or -1 if it was not related to a recording |
DataLoss
default profiling startTime 11 17 21 23 24
Category: Flight Recorder
Data could not be copied out from a buffer, typically because of contention
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/recorder/storage/jfrStorage.cpp:
assert(!buffer->transient(), "invariant");
assert(buffer->lease(), "invariant");
storage_instance.control().increment_leased();
return buffer;
}
}
return acquire_transient(size, thread);
}
static void write_data_loss_event(JfrBuffer* buffer, u8 unflushed_size, Thread* thread) {
assert(buffer != NULL, "invariant");
assert(buffer->empty(), "invariant");
const u8 total_data_loss = thread->jfr_thread_local()->add_data_lost(unflushed_size);
if (EventDataLoss::is_enabled()) {
JfrNativeEventWriter writer(buffer, thread);
writer.begin_event_write(false);
writer.write<u8>(EventDataLoss::eventId);
writer.write(JfrTicks::now());
writer.write(unflushed_size);
writer.write(total_data_loss);
writer.end_event_write(false);
}
}
static void write_data_loss(BufferPtr buffer, Thread* thread) {
assert(buffer != NULL, "invariant");
const size_t unflushed_size = buffer->unflushed_size();
buffer->reinitialize();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
amount | ulong: bytes | Amount Amount lost data |
total | ulong: bytes | Total Total lost amount for thread |
Flush
experimental startTime duration 14 17 21 23 24
Category: Flight Recorder
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/recorder/service/jfrRecorderService.cpp:
template <typename Functor>
static u4 invoke(Functor& f) {
f.process();
return f.elements();
}
template <typename Functor>
static u4 invoke_with_flush_event(Functor& f) {
const u4 elements = invoke(f);
EventFlush e(UNTIMED);
e.set_starttime(f.start_time());
e.set_endtime(f.end_time());
e.set_flushId(flushpoint_id);
e.set_elements(f.elements());
e.set_size(f.size());
e.commit();
return elements;
}
class StackTraceRepository : public StackObj {
private:
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ns |
profiling | false | 0 ns |
Field | Type | Description |
---|---|---|
flushId | ulong | Flush Identifier |
elements | ulong | Elements Written |
size | ulong: bytes | Size Written |
Examples 3
ActiveRecording
default profiling startTime duration stackTrace 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ActiveRecordingEvent.java
Category: Flight Recorder
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/ActiveRecordingEvent.java:
@Name(Type.EVENT_NAME_PREFIX + "ActiveRecording")
@Label("Flight Recording")
@Category("Flight Recorder")
@StackTrace(false)
public final class ActiveRecordingEvent extends AbstractJDKEvent {
public static final ThreadLocal<ActiveRecordingEvent> EVENT = new ThreadLocal<ActiveRecordingEvent>() {
@Override
protected ActiveRecordingEvent initialValue() {
return new ActiveRecordingEvent();
}
};
@Label("Id")
public long id;
@Label("Name")
public String name;
@Label("Destination")
public String destination;
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java:
private RepositoryChunk currentChunk;
private boolean inShutdown;
public PlatformRecorder() throws Exception {
repository = Repository.getRepository();
Logger.log(JFR_SYSTEM, INFO, "Initialized disk repository");
repository.ensureRepository();
jvm.createNativeJFR();
Logger.log(JFR_SYSTEM, INFO, "Created native");
JDKEvents.initialize();
Logger.log(JFR_SYSTEM, INFO, "Registered JDK events");
JDKEvents.addInstrumentation();
startDiskMonitor();
activeRecordingEvent = EventType.getEventType(ActiveRecordingEvent.class);
activeSettingEvent = EventType.getEventType(ActiveSettingEvent.class);
shutdownHook = SecuritySupport.createThreadWitNoPermissions("JFR Shutdown Hook", new ShutdownHook(this));
SecuritySupport.setUncaughtExceptionHandler(shutdownHook, new ShutdownHook.ExceptionHandler());
SecuritySupport.registerShutdownHook(shutdownHook);
}
private static Timer createTimer() {
try {
List<Timer> result = new CopyOnWriteArrayList<>();
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java:
private void finishChunk(RepositoryChunk chunk, Instant time, PlatformRecording ignoreMe) {
chunk.finish(time);
for (PlatformRecording r : getRecordings()) {
if (r != ignoreMe && r.getState() == RecordingState.RUNNING) {
r.appendChunk(chunk);
}
}
FilePurger.purge();
}
private void writeMetaEvents() {
if (activeRecordingEvent.isEnabled()) {
ActiveRecordingEvent event = ActiveRecordingEvent.EVENT.get();
for (PlatformRecording r : getRecordings()) {
if (r.getState() == RecordingState.RUNNING && r.shouldWriteMetadataEvent()) {
event.id = r.getId();
event.name = r.getName();
WriteableUserPath p = r.getDestination();
event.destination = p == null ? null : p.getRealPathText();
Duration d = r.getDuration();
event.recordingDuration = d == null ? Long.MAX_VALUE : d.toMillis();
Duration age = r.getMaxAge();
event.maxAge = age == null ? Long.MAX_VALUE : age.toMillis();
Long size = r.getMaxSize();
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class,
jdk.internal.event.ProcessStartEvent.class,
DirectBufferStatisticsEvent.class
};
// This is a list of the classes with instrumentation code that should be applied.
private static final Class<?>[] instrumentationClasses = new Class<?>[] {
FileInputStreamInstrumentor.class,
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
id | long | Id |
name | string | Name Consider contributing a description to jfreventcollector. |
destination | string | Destination Consider contributing a description to jfreventcollector. |
maxAge | long: millis | Max Age |
flushInterval | long: millis 14+ | Flush Interval |
maxSize | long: bytes | Max Size |
recordingStart | long: epochmillis | Start Time |
recordingDuration | long: millis | Recording Duration |
Examples 3
destination | string | [...]/code/experiments/jfreventcollector/jfr/sample_UseSerialGC.jfr
|
---|---|---|
flushInterval | long: millis | 1000
|
id | long | 1
|
maxAge | long: millis | 9223372036854775807
|
maxSize | long: bytes | 262144000
|
name | string | 1
|
recordingDuration | long: millis | 9223372036854775807
|
recordingStart | long: epochmillis | 1702899981921
|
stackTrace | StackTrace | null
|
startTime | long: millis | 75960656375
|
destination | string | [...]/code/experiments/jfreventcollector/jfr/sample_UseG1GC.jfr
|
---|---|---|
flushInterval | long: millis | 1000
|
id | long | 1
|
maxAge | long: millis | 9223372036854775807
|
maxSize | long: bytes | 262144000
|
name | string | 1
|
recordingDuration | long: millis | 9223372036854775807
|
recordingStart | long: epochmillis | 1727266203142
|
startTime | long: millis | 914255486833
|
destination | string | [...]/code/experiments/jfreventcollector/jfr/sample_UseParallelGC.jfr
|
---|---|---|
flushInterval | long: millis | 1000
|
id | long | 1
|
maxAge | long: millis | 9223372036854775807
|
maxSize | long: bytes | 262144000
|
name | string | 1
|
recordingDuration | long: millis | 9223372036854775807
|
recordingStart | long: epochmillis | 1702899886817
|
stackTrace | StackTrace | null
|
startTime | long: millis | 39217883625
|
ActiveSetting
default profiling startTime duration stackTrace 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ActiveSettingEvent.java
Category: Flight Recorder
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/jdk.jfr/share/classes/jdk/jfr/events/ActiveSettingEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.StackTrace;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "ActiveSetting")
@Label("Recording Setting")
@Category("Flight Recorder")
@StackTrace(false)
public final class ActiveSettingEvent extends AbstractJDKEvent {
public static final ThreadLocal<ActiveSettingEvent> EVENT = new ThreadLocal<ActiveSettingEvent>() {
@Override
protected ActiveSettingEvent initialValue() {
return new ActiveSettingEvent();
}
};
@Label("Event Id")
public long id;
@Label("Setting Name")
public String name;
@Label("Setting Value")
public String value;
src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformRecorder.java:
private boolean inShutdown;
public PlatformRecorder() throws Exception {
repository = Repository.getRepository();
Logger.log(JFR_SYSTEM, INFO, "Initialized disk repository");
repository.ensureRepository();
jvm.createNativeJFR();
Logger.log(JFR_SYSTEM, INFO, "Created native");
JDKEvents.initialize();
Logger.log(JFR_SYSTEM, INFO, "Registered JDK events");
JDKEvents.addInstrumentation();
startDiskMonitor();
activeRecordingEvent = EventType.getEventType(ActiveRecordingEvent.class);
activeSettingEvent = EventType.getEventType(ActiveSettingEvent.class);
shutdownHook = SecuritySupport.createThreadWitNoPermissions("JFR Shutdown Hook", new ShutdownHook(this));
SecuritySupport.setUncaughtExceptionHandler(shutdownHook, new ShutdownHook.ExceptionHandler());
SecuritySupport.registerShutdownHook(shutdownHook);
}
private static Timer createTimer() {
try {
List<Timer> result = new CopyOnWriteArrayList<>();
Thread t = SecuritySupport.createThreadWitNoPermissions("Permissionless thread", ()-> {
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class,
jdk.internal.event.ProcessStartEvent.class,
DirectBufferStatisticsEvent.class
};
// This is a list of the classes with instrumentation code that should be applied.
private static final Class<?>[] instrumentationClasses = new Class<?>[] {
src/jdk.jfr/share/classes/jdk/jfr/internal/EventControl.java:
void disable() {
for (NamedControl nc : namedControls) {
if (nc.control instanceof EnabledSetting) {
nc.control.setValueSafe("false");
return;
}
}
}
void writeActiveSettingEvent() {
if (!type.isRegistered()) {
return;
}
ActiveSettingEvent event = ActiveSettingEvent.EVENT.get();
for (NamedControl nc : namedControls) {
if (Utils.isSettingVisible(nc.control, type.hasEventHook())) {
String value = nc.control.getLastValue();
if (value == null) {
value = nc.control.getDefaultValue();
}
event.id = type.getId();
event.name = nc.name;
event.value = value;
event.commit();
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
id | long | Event Id |
name | string | Setting Name |
value | string | Setting Value |
Examples 3
JVM
JVMInformation
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine
Description of JVM and the Java application
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
#if INCLUDE_SHENANDOAHGC
#include "gc/shenandoah/shenandoahJfrSupport.hpp"
#endif
/**
* JfrPeriodic class
* Implementation of declarations in
* xsl generated traceRequestables.hpp
*/
#define TRACE_REQUEST_FUNC(id) void JfrPeriodicEventSet::request##id(void)
TRACE_REQUEST_FUNC(JVMInformation) {
ResourceMark rm;
EventJVMInformation event;
event.set_jvmName(VM_Version::vm_name());
event.set_jvmVersion(VM_Version::internal_vm_info_string());
event.set_javaArguments(Arguments::java_command());
event.set_jvmArguments(Arguments::jvm_args());
event.set_jvmFlags(Arguments::jvm_flags());
event.set_jvmStartTime(Management::vm_init_done_time());
event.set_pid(os::current_process_id());
event.commit();
}
TRACE_REQUEST_FUNC(OSInformation) {
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
jvmName | string | JVM Name |
jvmVersion | string | JVM Version |
jvmArguments | string | JVM Command Line Arguments |
jvmFlags | string | JVM Settings File Arguments |
javaArguments | string | Java Application Arguments |
jvmStartTime | long: epochmillis | JVM Start Time |
pid | long | Process Identifier |
Examples 3
javaArguments | string | [...]/code/experiments/jfreventcollector/.cache/renaissance.jar -t 5 -r 1 all
|
---|---|---|
jvmArguments | string | -XX:StartFlightRecording=filename=[...]/code/experiments/jfreventcollector/jfr/sample_UseParallelGC.jfr,settings=[...]/code/experiments/jfreventcollector/.cache/jfc.jfc -XX:+UseParallelGC
|
jvmFlags | string | null
|
jvmName | string | OpenJDK 64-Bit Server VM
|
jvmStartTime | long: epochmillis | 1702899886436
|
jvmVersion | string | OpenJDK 64-Bit Server VM (21.0.1+12-LTS) for bsd-aarch64 JRE (21.0.1+12-LTS), built on 2023-10-17T00:00:00Z by "admin" with clang Apple LLVM 12.0.0 (clang-1200.0.32.29)
|
pid | long | 13981
|
startTime | long: millis | 30585938083
|
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 | 904000689375
|
javaArguments | string | [...]/code/experiments/jfreventcollector/.cache/renaissance.jar -t 5 -r 1 all
|
---|---|---|
jvmArguments | string | -XX:StartFlightRecording=filename=[...]/code/experiments/jfreventcollector/jfr/sample_UseSerialGC.jfr,settings=[...]/code/experiments/jfreventcollector/.cache/jfc.jfc -XX:+UseSerialGC
|
jvmFlags | string | null
|
jvmName | string | OpenJDK 64-Bit Server VM
|
jvmStartTime | long: epochmillis | 1702899981604
|
jvmVersion | string | OpenJDK 64-Bit Server VM (21.0.1+12-LTS) for bsd-aarch64 JRE (21.0.1+12-LTS), built on 2023-10-17T00:00:00Z by "admin" with clang Apple LLVM 12.0.0 (clang-1200.0.32.29)
|
pid | long | 14273
|
startTime | long: millis | 75961227292
|
InitialSystemProperty
default profiling startTime end of every chunk 11 17 21 23 24
Category: Java Virtual Machine
System Property at JVM start
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
jlong max_size = conf.has_max_size_default_value() ? jmc_undefined_long : conf.max_size();
EventYoungGenerationConfiguration event;
event.set_maxSize((u8)max_size);
event.set_minSize(conf.min_size());
event.set_newRatio(conf.new_ratio());
event.commit();
}
TRACE_REQUEST_FUNC(InitialSystemProperty) {
SystemProperty* p = Arguments::system_properties();
JfrTicks time_stamp = JfrTicks::now();
while (p != NULL) {
if (!p->internal()) {
EventInitialSystemProperty event(UNTIMED);
event.set_key(p->key());
event.set_value(p->value());
event.set_endtime(time_stamp);
event.commit();
}
p = p->next();
}
}
TRACE_REQUEST_FUNC(ThreadAllocationStatistics) {
ResourceMark rm;
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
key | string | Key |
value | string | Value |
Examples 3
JVM: Class Loading
ClassLoad
startTime duration eventThread stackTrace 11 17 21 23 24
Category: Java Virtual Machine / Class Loading
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/classfile/systemDictionary.hpp:
//
class BootstrapInfo;
class ClassFileStream;
class Dictionary;
class PlaceholderTable;
class LoaderConstraintTable;
template <MEMFLAGS F> class HashtableBucket;
class ResolutionErrorTable;
class SymbolPropertyTable;
class ProtectionDomainCacheTable;
class ProtectionDomainCacheEntry;
class GCTimer;
class EventClassLoad;
#define WK_KLASS_ENUM_NAME(kname) kname##_knum
// Certain classes, such as java.lang.Object and java.lang.String,
// are "well-known", in the sense that no class loader is allowed
// to provide a different definition.
//
// Each well-known class has a short klass name (like object_klass),
// and a vmSymbol name (like java_lang_Object).
//
// The order of these definitions is significant: the classes are
src/hotspot/share/classfile/systemDictionary.hpp:
static ProtectionDomainCacheTable* _pd_cache_table;
protected:
static void validate_protection_domain(InstanceKlass* klass,
Handle class_loader,
Handle protection_domain, TRAPS);
friend class VM_PopulateDumpSharedSpace;
friend class TraversePlaceholdersClosure;
static PlaceholderTable* placeholders() { return _placeholders; }
static LoaderConstraintTable* constraints() { return _loader_constraints; }
static ResolutionErrorTable* resolution_errors() { return _resolution_errors; }
static SymbolPropertyTable* invoke_method_table() { return _invoke_method_table; }
static void post_class_load_event(EventClassLoad* event, const InstanceKlass* k, const ClassLoaderData* init_cld);
// Basic loading operations
static InstanceKlass* resolve_instance_class_or_null_helper(Symbol* name,
Handle class_loader,
Handle protection_domain,
TRAPS);
static InstanceKlass* resolve_instance_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
static Klass* resolve_array_class_or_null(Symbol* class_name, Handle class_loader, Handle protection_domain, TRAPS);
static InstanceKlass* handle_parallel_super_load(Symbol* class_name, Symbol* supername, Handle class_loader, Handle protection_domain, Handle lockObject, TRAPS);
// Wait on SystemDictionary_lock; unlocks lockObject before
// waiting; relocks lockObject with correct recursion count
src/hotspot/share/classfile/systemDictionaryShared.cpp:
InstanceKlass* shared_nest_host = get_shared_nest_host(lambda_ik);
assert(shared_nest_host != NULL, "unexpected NULL _nest_host");
InstanceKlass* loaded_lambda =
SystemDictionary::load_shared_lambda_proxy_class(lambda_ik, class_loader, protection_domain, pkg_entry, CHECK_NULL);
// Ensures the nest host is the same as the lambda proxy's
// nest host recorded at dump time.
InstanceKlass* nest_host = caller_ik->nest_host(THREAD);
assert(nest_host == shared_nest_host, "mismatched nest host");
EventClassLoad class_load_start_event;
{
MutexLocker mu_r(THREAD, Compile_lock);
// Add to class hierarchy, initialize vtables, and do possible
// deoptimizations.
SystemDictionary::add_to_hierarchy(loaded_lambda, CHECK_NULL); // No exception, but can block
// But, do not add to dictionary.
}
loaded_lambda->link_class(CHECK_NULL);
// notify jvmti
if (JvmtiExport::should_post_class_load()) {
src/hotspot/share/classfile/systemDictionary.cpp:
SystemDictionary_lock->wait();
} else {
double_lock_wait(lockObject, THREAD);
}
} else {
// If not in SD and not in PH, other thread's load must have failed
super_load_in_progress = false;
}
}
}
return NULL;
}
void SystemDictionary::post_class_load_event(EventClassLoad* event, const InstanceKlass* k, const ClassLoaderData* init_cld) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_loadedClass(k);
event->set_definingClassLoader(k->class_loader_data());
event->set_initiatingClassLoader(init_cld);
event->commit();
}
// Be careful when modifying this code: once you have run
// placeholders()->find_and_add(PlaceholderTable::LOAD_INSTANCE),
// you need to find_and_remove it before returning.
// So be careful to not exit with a CHECK_ macro betweeen these calls.
//
// name must be in the form of "java/lang/Object" -- cannot be "Ljava/lang/Object;"
InstanceKlass* SystemDictionary::resolve_instance_class_or_null(Symbol* name,
Handle class_loader,
Handle protection_domain,
TRAPS) {
assert(name != NULL && !Signature::is_array(name) &&
!Signature::has_envelope(name), "invalid class name");
EventClassLoad class_load_start_event;
HandleMark hm(THREAD);
// Fix for 4474172; see evaluation for more details
class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader()));
ClassLoaderData* loader_data = register_loader(class_loader);
Dictionary* dictionary = loader_data->dictionary();
unsigned int d_hash = dictionary->compute_hash(name);
// Do lookup to see if class already exist and the protection domain
// has the right access
src/hotspot/share/classfile/systemDictionary.cpp:
// Note: this method is much like resolve_from_stream, but
// does not publish the classes via the SystemDictionary.
// Handles Lookup.defineClass hidden, unsafe_DefineAnonymousClass
// and redefineclasses. RedefinedClasses do not add to the class hierarchy.
InstanceKlass* SystemDictionary::parse_stream(Symbol* class_name,
Handle class_loader,
ClassFileStream* st,
const ClassLoadInfo& cl_info,
TRAPS) {
EventClassLoad class_load_start_event;
ClassLoaderData* loader_data;
bool is_unsafe_anon_class = cl_info.unsafe_anonymous_host() != NULL;
// - for unsafe anonymous class: create a new CLD whith a class holder that uses
// the same class loader as the unsafe_anonymous_host.
// - 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.
if (is_unsafe_anon_class || cl_info.is_hidden()) {
guarantee(!is_unsafe_anon_class || cl_info.unsafe_anonymous_host()->class_loader() == class_loader(),
"should be NULL or the same");
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | false | true | 0 ms |
profiling | false | true | 0 ms |
Field | Type | Description |
---|---|---|
loadedClass | Class | Loaded Class Consider contributing a description to jfreventcollector. |
definingClassLoader | ClassLoader | Defining Class Loader Consider contributing a description to jfreventcollector. |
initiatingClassLoader | ClassLoader | Initiating Class Loader Consider contributing a description to jfreventcollector. |
Examples 3
definingClassLoader | ClassLoader | |
---|---|---|
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 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.status.AppStatusListener$$Lambda+0x000007f806381f48/1726027448
|
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/status
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/String;[BIILjava/security/ProtectionDomain;ZILjava/lang/Object;)Ljava/lang/Class;
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | defineClass0
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1025
|
name | string | java/lang/ClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 840682885292
|
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 | 48
|
name | string | java/util/regex/Pattern$TreeInfo
|
package | Package | |
exported | boolean | 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
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 9
|
lineNumber | int | 3776
|
method | Method | |
descriptor | string | (Ljava/util/regex/Pattern$Node;)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 | 32
|
name | string | java/util/regex/Pattern$Start
|
package | Package | |
exported | boolean | 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 | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 396532000
|
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 | true
|
modifiers | int | 4144
|
name | string | java.util.regex.CharPredicates$$Lambda+0x0000000800105800/552936351
|
package | Package | |
exported | boolean | 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
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/String;[BIILjava/security/ProtectionDomain;ZILjava/lang/Object;)Ljava/lang/Class;
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | defineClass0
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1057
|
name | string | java/lang/ClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 456488708
|
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:
// For user defined Java class loaders, check that the name returned is
// the same as that requested. This check is done for the bootstrap
// loader when parsing the class file.
if (class_name == k->name()) {
return k;
}
}
// Class is not found or has the wrong name, return NULL
return NULL;
}
}
static void post_class_define_event(InstanceKlass* k, const ClassLoaderData* def_cld) {
EventClassDefine event;
if (event.should_commit()) {
event.set_definedClass(k);
event.set_definingClassLoader(def_cld);
event.commit();
}
}
void SystemDictionary::define_instance_class(InstanceKlass* k, TRAPS) {
HandleMark hm(THREAD);
ClassLoaderData* loader_data = k->class_loader_data();
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
definedClass | Class | Defined Class Consider contributing a description to jfreventcollector. |
definingClassLoader | ClassLoader | Defining Class Loader Consider contributing a description to jfreventcollector. |
Examples 3
definedClass | Class | |
---|---|---|
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 1537
|
name | string | scala/reflect/internal/FreshNames
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/reflect/internal
|
definingClassLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class;
|
hidden | boolean | false
|
modifiers | int | 264
|
name | string | defineClass1
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1025
|
name | string | java/lang/ClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/lang
|
type | FrameType | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 843486298583
|
definedClass | Class | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 48
|
name | string | java/util/regex/Pattern$GroupTail
|
package | Package | |
exported | boolean | 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
|
definingClassLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 41
|
lineNumber | int | 3315
|
method | Method | |
descriptor | string | (Z)Ljava/util/regex/Pattern$Node;
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | createGroup
|
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 | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 456196292
|
definedClass | Class | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1057
|
name | string | java/util/logging/Handler
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.logging
|
name | string | java.logging
|
version | string | 21.0.1
|
name | string | java/util/logging
|
definingClassLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljava/lang/String;)Ljava/lang/Class;
|
hidden | boolean | false
|
modifiers | int | 266
|
name | string | findBootstrapClass
|
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 | 392539375
|
ClassRedefinition
default profiling startTime 15 17 21 23 24
Category: Java Virtual Machine / Class Loading
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/prims/jvmtiRedefineClasses.cpp:
_timer_rsc_phase1.stop();
if (log_is_enabled(Info, redefine, class, timer)) {
_timer_rsc_phase2.start();
}
if (the_class->oop_map_cache() != NULL) {
// Flush references to any obsolete methods from the oop map cache
// so that obsolete methods are not pinned.
the_class->oop_map_cache()->flush_obsolete_entries();
}
increment_class_counter((InstanceKlass *)the_class, THREAD);
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(THREAD);
// 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:
if (Arguments::is_dumping_archive()) {
SystemDictionaryShared::remove_dumptime_info(ik);
}
if (log_is_enabled(Info, class, unload)) {
ResourceMark rm;
log_info(class, unload)("unloading class %s " INTPTR_FORMAT, ik->external_name(), p2i(ik));
}
Events::log_class_unloading(Thread::current(), ik);
#if INCLUDE_JFR
assert(ik != NULL, "invariant");
EventClassUnload event;
event.set_unloadedClass(ik);
event.set_definingClassLoader(ik->class_loader_data());
event.commit();
#endif
}
static void method_release_C_heap_structures(Method* m) {
m->release_C_heap_structures();
}
void InstanceKlass::release_C_heap_structures() {
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 | 4558858375
|
unloadedClass | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 48
|
name | string | org/sparkproject/guava/collect/SingletonImmutableBiMap
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/sparkproject/guava/collect
|
definingClassLoader | ClassLoader | |
---|---|---|
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/net
|
startTime | long: millis | 3889484625
|
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 | 32
|
name | string | org/sparkproject/guava/collect/RegularImmutableMap$EntrySet
|
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 | 852482795417
|
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 | 1537
|
name | string | scala/reflect/ClassTag
|
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
|
JVM: Code Cache
CodeCacheFull
default profiling startTime eventThread 11 17 21 23 24
Category: Java Virtual Machine / Code Cache
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/code/codeCache.cpp:
ttyLocker ttyl;
tty->print("%s", s.as_string());
}
if (heap->full_count() == 0) {
if (PrintCodeHeapAnalytics) {
CompileBroker::print_heapinfo(tty, "all", 4096); // details, may be a lot!
}
}
}
heap->report_full();
EventCodeCacheFull event;
if (event.should_commit()) {
event.set_codeBlobType((u1)code_blob_type);
event.set_startAddress((u8)heap->low_boundary());
event.set_commitedTopAddress((u8)heap->high());
event.set_reservedTopAddress((u8)heap->high_boundary());
event.set_entryCount(heap->blob_count());
event.set_methodCount(heap->nmethod_count());
event.set_adaptorCount(heap->adapter_count());
event.set_unallocatedCapacity(heap->unallocated_capacity());
event.set_fullCount(heap->full_count());
event.commit();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
codeBlobType | CodeBlobType | Code Heap Consider contributing a description to jfreventcollector. |
startAddress | ulong: address | Start Address |
commitedTopAddress | ulong: address | Commited Top |
reservedTopAddress | ulong: address | Reserved Top |
entryCount | int | Entries |
methodCount | int | Methods |
adaptorCount | int | Adaptors |
unallocatedCapacity | ulong: bytes | Unallocated |
fullCount | int | Full Count |
CodeCacheStatistics
default profiling startTime every chunk 11 17 21 23 24
Category: Java Virtual Machine / Code Cache
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(CompilerConfiguration) {
EventCompilerConfiguration event;
event.set_threadCount(CICompilerCount);
event.set_tieredCompilation(TieredCompilation);
event.commit();
}
TRACE_REQUEST_FUNC(CodeCacheStatistics) {
// Emit stats for all available code heaps
for (int bt = 0; bt < CodeBlobType::NumTypes; ++bt) {
if (CodeCache::heap_available(bt)) {
EventCodeCacheStatistics event;
event.set_codeBlobType((u1)bt);
event.set_startAddress((u8)CodeCache::low_bound(bt));
event.set_reservedTopAddress((u8)CodeCache::high_bound(bt));
event.set_entryCount(CodeCache::blob_count(bt));
event.set_methodCount(CodeCache::nmethod_count(bt));
event.set_adaptorCount(CodeCache::adapter_count(bt));
event.set_unallocatedCapacity(CodeCache::unallocated_capacity(bt));
event.set_fullCount(CodeCache::get_codemem_full_count(bt));
event.commit();
}
}
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
codeBlobType | CodeBlobType | Code Heap Consider contributing a description to jfreventcollector. |
startAddress | ulong: address | Start Address |
reservedTopAddress | ulong: address | Reserved Top |
entryCount | int | Entries |
methodCount | int | Methods |
adaptorCount | int | Adaptors |
unallocatedCapacity | ulong: bytes | Unallocated |
fullCount | int | Full Count |
Examples 3
CodeCacheConfiguration
default profiling startTime end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Code Cache
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_startAddress((u8)CodeCache::low_bound(bt));
event.set_reservedTopAddress((u8)CodeCache::high_bound(bt));
event.set_entryCount(CodeCache::blob_count(bt));
event.set_methodCount(CodeCache::nmethod_count(bt));
event.set_adaptorCount(CodeCache::adapter_count(bt));
event.set_unallocatedCapacity(CodeCache::unallocated_capacity(bt));
event.set_fullCount(CodeCache::get_codemem_full_count(bt));
event.commit();
}
}
}
TRACE_REQUEST_FUNC(CodeCacheConfiguration) {
EventCodeCacheConfiguration event;
event.set_initialSize(InitialCodeCacheSize);
event.set_reservedSize(ReservedCodeCacheSize);
event.set_nonNMethodSize(NonNMethodCodeHeapSize);
event.set_profiledSize(ProfiledCodeHeapSize);
event.set_nonProfiledSize(NonProfiledCodeHeapSize);
event.set_expansionSize(CodeCacheExpansionSize);
event.set_minBlockLength(CodeCacheMinBlockLength);
event.set_startAddress((u8)CodeCache::low_bound());
event.set_reservedTopAddress((u8)CodeCache::high_bound());
event.commit();
}
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
initialSize | ulong: bytes | Initial Size |
reservedSize | ulong: bytes | Reserved Size |
nonNMethodSize | ulong: bytes | Non-nmethod Size |
profiledSize | ulong: bytes | Profiled Size |
nonProfiledSize | ulong: bytes | Non-profiled Size |
expansionSize | ulong: bytes | Expansion size |
minBlockLength | ulong: bytes | Minimum Block Length |
startAddress | ulong: address | Start Address |
reservedTopAddress | ulong: address | Reserved Top |
Examples 3
expansionSize | ulong: bytes | 65536
|
---|---|---|
initialSize | ulong: bytes | 2555904
|
minBlockLength | ulong: bytes | 6
|
nonNMethodSize | ulong: bytes | 5839564
|
nonProfiledSize | ulong: bytes | 122909338
|
profiledSize | ulong: bytes | 122909338
|
reservedSize | ulong: bytes | 251658240
|
reservedTopAddress | ulong: address | 4797415424
|
startAddress | ulong: address | 4545757184
|
startTime | long: millis | 857447035042
|
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 | 93747386417
|
expansionSize | ulong: bytes | 65536
|
---|---|---|
initialSize | ulong: bytes | 2555904
|
minBlockLength | ulong: bytes | 6
|
nonNMethodSize | ulong: bytes | 5839564
|
nonProfiledSize | ulong: bytes | 122909338
|
profiledSize | ulong: bytes | 122909338
|
reservedSize | ulong: bytes | 251658240
|
reservedTopAddress | ulong: address | 4733009920
|
startAddress | ulong: address | 4481351680
|
startTime | long: millis | 88125696958
|
JVM: Code Sweeper
SweepCodeCache
default profiling startTime duration eventThread 11 17 until JDK 20
Category: Java Virtual Machine / Code Sweeper
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/sweeper.cpp:
sweep_code_cache();
// We are done with sweeping the code cache once.
_total_nof_code_cache_sweeps++;
if (_force_sweep) {
// Notify requester that forced sweep finished
MutexLocker mu(CodeSweeper_lock, Mutex::_no_safepoint_check_flag);
_force_sweep = false;
CodeSweeper_lock->notify();
}
}
static void post_sweep_event(EventSweepCodeCache* event,
const Ticks& start,
const Ticks& end,
s4 traversals,
int swept,
int flushed,
int zombified) {
assert(event != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_starttime(start);
event->set_endtime(end);
event->set_sweepId(traversals);
src/hotspot/share/runtime/sweeper.cpp:
const Ticks sweep_end_counter = Ticks::now();
const Tickspan sweep_time = sweep_end_counter - sweep_start_counter;
{
MutexLocker mu(NMethodSweeperStats_lock, Mutex::_no_safepoint_check_flag);
_total_time_sweeping += sweep_time;
_total_time_this_sweep += sweep_time;
_peak_sweep_fraction_time = MAX2(sweep_time, _peak_sweep_fraction_time);
_total_flushed_size += freed_memory;
_total_nof_methods_reclaimed += flushed_count;
_total_nof_c2_methods_reclaimed += flushed_c2_count;
_peak_sweep_time = MAX2(_peak_sweep_time, _total_time_this_sweep);
}
EventSweepCodeCache event(UNTIMED);
if (event.should_commit()) {
post_sweep_event(&event, sweep_start_counter, sweep_end_counter, (s4)_traversals, swept_count, flushed_count, zombified_count);
}
#ifdef ASSERT
if(PrintMethodFlushing) {
tty->print_cr("### sweeper: sweep time(" JLONG_FORMAT "): ", sweep_time.value());
}
#endif
Log(codecache, sweep) log;
Configuration | enabled | threshold |
---|---|---|
default | true | 100 ms |
profiling | true | 100 ms |
Field | Type | Description |
---|---|---|
sweepId | int | Sweep Identifier |
sweptCount | uint | Methods Swept |
flushedCount | uint | Methods Flushed |
zombifiedCount | uint | Methods Zombified |
CodeSweeperStatistics
default profiling startTime every chunk 11 17 until JDK 20
Category: Java Virtual Machine / Code Sweeper
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_initialSize(InitialCodeCacheSize);
event.set_reservedSize(ReservedCodeCacheSize);
event.set_nonNMethodSize(NonNMethodCodeHeapSize);
event.set_profiledSize(ProfiledCodeHeapSize);
event.set_nonProfiledSize(NonProfiledCodeHeapSize);
event.set_expansionSize(CodeCacheExpansionSize);
event.set_minBlockLength(CodeCacheMinBlockLength);
event.set_startAddress((u8)CodeCache::low_bound());
event.set_reservedTopAddress((u8)CodeCache::high_bound());
event.commit();
}
TRACE_REQUEST_FUNC(CodeSweeperStatistics) {
EventCodeSweeperStatistics event;
event.set_sweepCount(NMethodSweeper::traversal_count());
event.set_methodReclaimedCount(NMethodSweeper::total_nof_methods_reclaimed());
event.set_totalSweepTime(NMethodSweeper::total_time_sweeping());
event.set_peakFractionTime(NMethodSweeper::peak_sweep_fraction_time());
event.set_peakSweepTime(NMethodSweeper::peak_sweep_time());
event.commit();
}
TRACE_REQUEST_FUNC(CodeSweeperConfiguration) {
EventCodeSweeperConfiguration event;
event.set_sweeperEnabled(MethodFlushing);
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
sweepCount | int | Sweeps |
methodReclaimedCount | int | Methods Reclaimed |
totalSweepTime | Tickspan | Time Spent Sweeping |
peakFractionTime | Tickspan | Peak Time Fraction Sweep |
peakSweepTime | Tickspan | Peak Time Full Sweep |
CodeSweeperConfiguration
default profiling startTime end of every chunk 11 17 until JDK 20
Category: Java Virtual Machine / Code Sweeper
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(CodeSweeperStatistics) {
EventCodeSweeperStatistics event;
event.set_sweepCount(NMethodSweeper::traversal_count());
event.set_methodReclaimedCount(NMethodSweeper::total_nof_methods_reclaimed());
event.set_totalSweepTime(NMethodSweeper::total_time_sweeping());
event.set_peakFractionTime(NMethodSweeper::peak_sweep_fraction_time());
event.set_peakSweepTime(NMethodSweeper::peak_sweep_time());
event.commit();
}
TRACE_REQUEST_FUNC(CodeSweeperConfiguration) {
EventCodeSweeperConfiguration event;
event.set_sweeperEnabled(MethodFlushing);
event.set_flushingEnabled(UseCodeCacheFlushing);
event.set_sweepThreshold(NMethodSweeper::sweep_threshold_bytes());
event.commit();
}
TRACE_REQUEST_FUNC(ShenandoahHeapRegionInformation) {
#if INCLUDE_SHENANDOAHGC
if (UseShenandoahGC) {
VM_ShenandoahSendHeapRegionInfoEvents op;
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
sweeperEnabled | boolean | Code Sweeper Enabled |
flushingEnabled | boolean | Code Cache Flushing Enabled |
sweepThreshold | ulong: bytes 17 until JDK 20 | Sweep Threshold |
JVM: Compiler
Compilation
default profiling startTime duration eventThread 11 17 21 23 24
Category: Java Virtual Machine / Compiler
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
class CompilationEvent : AllStatic {
public:
static void post(EventCompilation& event, int compile_id, CompilerType type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) NOT_JFR_RETURN();
};
class CompilationFailureEvent : AllStatic {
public:
static void post(EventCompilationFailure& event, int compile_id, const char* reason) NOT_JFR_RETURN();
};
class PhaseEvent : AllStatic {
friend class CompilerPhaseTypeConstant;
public:
/**
src/hotspot/share/compiler/compileBroker.cpp:
} else if (AbortVMOnCompilationFailure) {
if (compilable == ciEnv::MethodCompilable_not_at_tier) {
fatal("Not compilable at tier %d: %s", task->comp_level(), failure_reason);
}
if (compilable == ciEnv::MethodCompilable_never) {
fatal("Never compilable: %s", failure_reason);
}
}
// simulate crash during compilation
assert(task->compile_id() != CICrashAt, "just as planned");
}
static void post_compilation_event(EventCompilation& event, CompileTask* task) {
assert(task != NULL, "invariant");
CompilerEvent::CompilationEvent::post(event,
task->compile_id(),
task->compiler()->type(),
task->method(),
task->comp_level(),
task->is_success(),
task->osr_bci() != CompileBroker::standard_entry_bci,
(task->code() == NULL) ? 0 : task->code()->total_size(),
task->num_inlined_bytecodes());
}
int DirectivesStack::_depth = 0;
src/hotspot/share/compiler/compileBroker.cpp:
// Allocate a new set of JNI handles.
push_jni_handle_block();
Method* target_handle = task->method();
int compilable = ciEnv::MethodCompilable;
const char* failure_reason = NULL;
bool failure_reason_on_C_heap = false;
const char* retry_message = NULL;
#if INCLUDE_JVMCI
if (UseJVMCICompiler && comp != NULL && comp->is_jvmci()) {
JVMCICompiler* jvmci = (JVMCICompiler*) comp;
TraceTime t1("compilation", &time);
EventCompilation event;
JVMCICompileState compile_state(task);
// Skip redefined methods
if (compile_state.target_method_is_old()) {
failure_reason = "redefined method";
retry_message = "not retryable";
compilable = ciEnv::MethodCompilable_never;
} else {
JVMCIEnv env(thread, &compile_state, __FILE__, __LINE__);
methodHandle method(thread, target_handle);
env.runtime()->compile_method(&env, jvmci, method, osr_bci);
src/hotspot/share/compiler/compileBroker.cpp:
bool method_is_old = ci_env.cache_jvmti_state();
// Skip redefined methods
if (method_is_old) {
ci_env.record_method_not_compilable("redefined method", true);
}
// Cache DTrace flags
ci_env.cache_dtrace_flags();
ciMethod* target = ci_env.get_method_from_handle(target_handle);
TraceTime t1("compilation", &time);
EventCompilation event;
if (comp == NULL) {
ci_env.record_method_not_compilable("no compiler", !TieredCompilation);
} else if (!ci_env.failing()) {
if (WhiteBoxAPI && WhiteBox::compilation_locked) {
MonitorLocker locker(Compilation_lock, Mutex::_no_safepoint_check_flag);
while (WhiteBox::compilation_locked) {
locker.wait();
}
}
comp->compile_method(&ci_env, target, osr_bci, directive);
src/hotspot/share/compiler/compilerEvent.cpp:
guarantee(phase_names->length() < 256, "exceeds maximum supported phases");
}
if (register_jfr_serializer) {
JfrSerializer::register_serializer(TYPE_COMPILERPHASETYPE, false, new CompilerPhaseTypeConstant());
} else if (Jfr::is_recording()) {
// serialize new_phases.
JfrCheckpointWriter writer;
writer.write_type(TYPE_COMPILERPHASETYPE);
write_phases(writer, idx, new_phases);
}
return idx;
}
void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_id, CompilerType compiler_type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) {
event.set_compileId(compile_id);
event.set_compiler(compiler_type);
event.set_method(method);
event.set_compileLevel((short)compile_level);
event.set_succeded(success);
event.set_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
event.commit();
}
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EventProvider.java:
* Creates and returns an empty implementation for {@link EventProvider}. This implementation
* can be used when no logging is requested.
*/
static EventProvider createEmptyEventProvider() {
return new EmptyEventProvider();
}
/**
* Creates and returns an empty implementation for {@link CompilationEvent}.
*/
static CompilationEvent createEmptyCompilationEvent() {
return new EmptyCompilationEvent();
}
/**
* Creates and returns an empty implementation for {@link CompilationEvent}.
*/
static CompilerFailureEvent createEmptyCompilerFailureEvent() {
return new EmptyCompilerFailureEvent();
}
/**
* An instant event is an event that is not considered to have taken any time.
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EventProvider.java:
/**
* Ends the timing period for this event.
*/
void end();
}
/**
* Creates a new {@link CompilationEvent}.
*
* @return a compilation event
*/
CompilationEvent newCompilationEvent();
/**
* A compilation event.
*/
public interface CompilationEvent extends TimedEvent {
void setMethod(String method);
void setCompileId(int compileId);
void setCompileLevel(int compileLevel);
void setSucceeded(boolean succeeded);
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/EmptyEventProvider.java:
package jdk.vm.ci.hotspot;
/**
* An empty implementation for {@link EventProvider}. This implementation is used when no logging is
* requested.
*/
final class EmptyEventProvider implements EventProvider {
static InternalError shouldNotReachHere() {
throw new InternalError("should not reach here");
}
@Override
public CompilationEvent newCompilationEvent() {
return new EmptyCompilationEvent();
}
static class EmptyCompilationEvent implements CompilationEvent {
@Override
public void commit() {
throw shouldNotReachHere();
}
@Override
public boolean shouldWrite() {
// Events of this class should never been written.
return false;
}
Configuration | enabled | threshold |
---|---|---|
default | true | 1000 ms |
profiling | true | 100 ms |
Field | Type | Description |
---|---|---|
compileId | uint | Compilation Identifier |
compiler | CompilerType 14+ | Compiler Consider contributing a description to jfreventcollector. |
method | Method | Method Consider contributing a description to jfreventcollector. |
compileLevel | ushort | Compilation Level |
succeded | boolean | Succeeded |
isOsr | boolean | On Stack Replacement |
codeSize | ulong: bytes | Compiled Code Size |
inlinedBytes | ulong: bytes | Inlined Code Size |
Examples 3
codeSize | ulong: bytes | 49760
|
---|---|---|
compileId | uint | 6694
|
compileLevel | ushort | 4
|
compiler | CompilerType | c2
|
inlinedBytes | ulong: bytes | 2396
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | ()V
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | finishTerminate
|
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/dungeon/FaultHandling
|
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/dungeon
|
startTime | long: millis | 14205774250
|
succeded | boolean | true
|
codeSize | ulong: bytes | 26960
|
---|---|---|
compileId | uint | 15440
|
compileLevel | ushort | 4
|
compiler | CompilerType | c2
|
inlinedBytes | ulong: bytes | 4597
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Lio/netty/channel/AbstractChannelHandlerContext;Ljava/lang/Object;)V
|
hidden | boolean | false
|
modifiers | int | 8
|
name | string | invokeUserEventTriggered
|
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 | 1056
|
name | string | io/netty/channel/AbstractChannelHandlerContext
|
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 | 40809717208
|
succeded | boolean | true
|
codeSize | ulong: bytes | 6328
|
---|---|---|
compileId | uint | 97402
|
compileLevel | ushort | 3
|
compiler | CompilerType | c1
|
inlinedBytes | ulong: bytes | 177
|
isOsr | boolean | false
|
method | Method | |
descriptor | string | (Ljava/lang/Object;I)Lorg/sparkproject/guava/cache/LocalCache$ReferenceEntry;
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | getEntry
|
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 | 8
|
name | string | org/sparkproject/guava/cache/LocalCache$Segment
|
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/sparkproject/guava/cache
|
startTime | long: millis | 884174809042
|
succeded | boolean | true
|
CompilerPhase
default profiling startTime duration eventThread 11 17 21 23 24
Category: Java Virtual Machine / Compiler
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jvmci/jvmciCompilerToVM.cpp:
int len = JVMCIENV->get_length(phases);
GrowableArray<const char*>* jvmci_phase_names = new GrowableArray<const char*>(len);
for (int i = 0; i < len; i++) {
JVMCIObject phase = JVMCIENV->get_object_at(phases, i);
jvmci_phase_names->append(strdup(JVMCIENV->as_utf8_string(phase)));
}
return CompilerEvent::PhaseEvent::register_phases(jvmci_phase_names);
#else
return -1;
#endif // !INCLUDE_JFR
}
C2V_VMENTRY(void, notifyCompilerPhaseEvent, (JNIEnv* env, jobject, jlong startTime, jint phase, jint compileId, jint level))
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, startTime, phase, compileId, level);
}
}
C2V_VMENTRY(void, notifyCompilerInliningEvent, (JNIEnv* env, jobject, jint compileId, jobject caller, jobject callee, jboolean succeeded, jstring jmessage, jint bci))
EventCompilerInlining event;
if (event.should_commit()) {
Method* caller_method = JVMCIENV->asMethod(caller);
Method* callee_method = JVMCIENV->asMethod(callee);
JVMCIObject message = JVMCIENV->wrap(jmessage);
src/hotspot/share/opto/compile.cpp:
Node* n = macro_node(i);
if (n->is_Allocate()) {
if (i != allocates) {
Node* tmp = macro_node(allocates);
_macro_nodes->at_put(allocates, n);
_macro_nodes->at_put(i, tmp);
}
allocates++;
}
}
}
void Compile::print_method(CompilerPhaseType cpt, int level, int idx) {
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, cpt, C->_compile_id, level);
}
#ifndef PRODUCT
if (should_print(level)) {
char output[1024];
if (idx != 0) {
jio_snprintf(output, sizeof(output), "%s:%d", CompilerPhaseTypeHelper::to_string(cpt), idx);
} else {
jio_snprintf(output, sizeof(output), "%s", CompilerPhaseTypeHelper::to_string(cpt));
}
_printer->print_method(output, level);
}
#endif
C->_latest_stage_start_counter.stamp();
}
void Compile::end_method(int level) {
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, C->_latest_stage_start_counter, PHASE_END, C->_compile_id, level);
}
#ifndef PRODUCT
if (_printer && _printer->should_print(level)) {
_printer->end_method();
}
#endif
}
src/hotspot/share/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
class CompilationEvent : AllStatic {
public:
src/hotspot/share/compiler/compilerEvent.hpp:
class PhaseEvent : AllStatic {
friend class CompilerPhaseTypeConstant;
public:
/**
* Register compiler phases for JFR type CompilerPhaseType serialization purposes.
* This method is called during compiler creation or during compilation.
* Registration will serialize the passed in phase constants, supporting bulk and/or incremental registrations.
* This method returns start index of new list that just got appended to phase_names.
* Param new_phases may contain duplicates.
* Return value could be used for mapping purpose at caller site, or caller can assume explicit order of registration.
*/
static int register_phases(GrowableArray<const char*>* new_phases) NOT_JFR_RETURN_(-1);
static void post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) NOT_JFR_RETURN();
static void post(EventCompilerPhase& event, jlong start_time, int phase, int compile_id, int level) {
JFR_ONLY(post(event, Ticks(start_time), phase, compile_id, level);)
}
};
class InlineEvent : AllStatic {
static void post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
public:
static void post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
static void post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
};
};
src/hotspot/share/compiler/compilerEvent.cpp:
event.set_succeded(success);
event.set_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
event.commit();
}
void CompilerEvent::CompilationFailureEvent::post(EventCompilationFailure& event, int compile_id, const char* reason) {
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) {
event.set_compileId(compile_id);
event.set_caller(caller);
event.set_callee(callee);
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/JFR.java:
/**
* @return current JFR time stamp
*/
public static long now() {
return compilerToVM().ticksNow();
}
}
/**
* Helper methods for managing JFR CompilerPhase events.
* The events are defined in {see @code src/share/jfr/metadata/metadata.xml}.
*/
public static final class CompilerPhaseEvent {
private static final ConcurrentHashMap<String, Integer> phaseToId = new ConcurrentHashMap<>();
private static int getPhaseToId(String phaseName) {
String[] phaseNames = { phaseName };
return phaseToId.computeIfAbsent(phaseName, k -> compilerToVM().registerCompilerPhases(phaseNames));
}
/**
* Registers new compiler phases with JFR. This should be called during compiler initialization.
*
Configuration | enabled | threshold |
---|---|---|
default | true | 60 s |
profiling | true | 10 s |
Field | Type | Description |
---|---|---|
phase | CompilerPhaseType | Compile Phase |
compileId | uint | Compilation Identifier |
phaseLevel | ushort | Phase Level |
CompilationFailure
profiling startTime eventThread 11 17 21 23 24
Category: Java Virtual Machine / Compiler
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/ci/ciEnv.cpp:
// ------------------------------------------------------------------
// ciEnv::record_failure()
void ciEnv::record_failure(const char* reason) {
if (_failure_reason == NULL) {
// Record the first failure reason.
_failure_reason = reason;
}
}
void ciEnv::report_failure(const char* reason) {
EventCompilationFailure event;
if (event.should_commit()) {
CompilerEvent::CompilationFailureEvent::post(event, compile_id(), reason);
}
}
// ------------------------------------------------------------------
// ciEnv::record_method_not_compilable()
void ciEnv::record_method_not_compilable(const char* reason, bool all_tiers) {
int new_compilable =
all_tiers ? MethodCompilable_never : MethodCompilable_not_at_tier ;
// Only note transitions to a worse state
if (new_compilable > _compilable) {
src/hotspot/share/compiler/compilerEvent.hpp:
#if INCLUDE_JFR
#include "jfr/utilities/jfrTime.hpp"
#endif
class ciMethod;
template <typename>
class GrowableArray;
class Method;
class EventCompilation;
class EventCompilationFailure;
class EventCompilerInlining;
class EventCompilerPhase;
struct JfrStructCalleeMethod;
class CompilerEvent : AllStatic {
public:
static jlong ticksNow() {
// Using Ticks for consistent usage outside JFR folder.
JFR_ONLY(return JfrTime::is_ft_enabled() ? Ticks::now().ft_value() : Ticks::now().value();) NOT_JFR_RETURN_(0L);
}
class CompilationEvent : AllStatic {
public:
static void post(EventCompilation& event, int compile_id, CompilerType type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) NOT_JFR_RETURN();
};
class CompilationFailureEvent : AllStatic {
public:
static void post(EventCompilationFailure& event, int compile_id, const char* reason) NOT_JFR_RETURN();
};
class PhaseEvent : AllStatic {
friend class CompilerPhaseTypeConstant;
public:
/**
* Register compiler phases for JFR type CompilerPhaseType serialization purposes.
* This method is called during compiler creation or during compilation.
* Registration will serialize the passed in phase constants, supporting bulk and/or incremental registrations.
* This method returns start index of new list that just got appended to phase_names.
* Param new_phases may contain duplicates.
src/hotspot/share/compiler/compilerEvent.cpp:
void CompilerEvent::CompilationEvent::post(EventCompilation& event, int compile_id, CompilerType compiler_type, Method* method, int compile_level, bool success, bool is_osr, int code_size, int inlined_bytecodes) {
event.set_compileId(compile_id);
event.set_compiler(compiler_type);
event.set_method(method);
event.set_compileLevel((short)compile_level);
event.set_succeded(success);
event.set_isOsr(is_osr);
event.set_codeSize(code_size);
event.set_inlinedBytes(inlined_bytecodes);
event.commit();
}
void CompilerEvent::CompilationFailureEvent::post(EventCompilationFailure& event, int compile_id, const char* reason) {
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
Configuration | enabled |
---|---|
default | false |
profiling | true |
Field | Type | Description |
---|---|---|
failureMessage | string | Failure Message |
compileId | uint | Compilation Identifier |
Examples 3
CompilerInlining
startTime eventThread 11 17 21 23 24
Category: Java Virtual Machine / Compiler / Optimization
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jvmci/jvmciCompilerToVM.cpp:
#else
return -1;
#endif // !INCLUDE_JFR
}
C2V_VMENTRY(void, notifyCompilerPhaseEvent, (JNIEnv* env, jobject, jlong startTime, jint phase, jint compileId, jint level))
EventCompilerPhase event;
if (event.should_commit()) {
CompilerEvent::PhaseEvent::post(event, startTime, phase, compileId, level);
}
}
C2V_VMENTRY(void, notifyCompilerInliningEvent, (JNIEnv* env, jobject, jint compileId, jobject caller, jobject callee, jboolean succeeded, jstring jmessage, jint bci))
EventCompilerInlining event;
if (event.should_commit()) {
Method* caller_method = JVMCIENV->asMethod(caller);
Method* callee_method = JVMCIENV->asMethod(callee);
JVMCIObject message = JVMCIENV->wrap(jmessage);
CompilerEvent::InlineEvent::post(event, compileId, caller_method, callee_method, succeeded, JVMCIENV->as_utf8_string(message), bci);
}
}
#define CC (char*) /*cast a literal from (const char*)*/
#define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f))
src/hotspot/share/c1/c1_GraphBuilder.cpp:
void GraphBuilder::print_inlining(ciMethod* callee, const char* msg, bool success) {
CompileLog* log = compilation()->log();
if (log != NULL) {
assert(msg != NULL, "inlining msg should not be null!");
if (success) {
log->inline_success(msg);
} else {
log->inline_fail(msg);
}
}
EventCompilerInlining event;
if (event.should_commit()) {
CompilerEvent::InlineEvent::post(event, compilation()->env()->task()->compile_id(), method()->get_Method(), callee, success, msg, bci());
}
CompileTask::print_inlining_ul(callee, scope()->level(), bci(), msg);
if (!compilation()->directive()->PrintInliningOption) {
return;
}
CompileTask::print_inlining_tty(callee, scope()->level(), bci(), msg);
if (success && CIPrintMethodCodes) {
src/hotspot/share/opto/bytecodeInfo.cpp:
CompileTask::print_inlining_ul(callee_method, inline_level(),
caller_bci, inline_msg);
if (C->print_inlining()) {
C->print_inlining(callee_method, inline_level(), caller_bci, inline_msg);
guarantee(callee_method != NULL, "would crash in CompilerEvent::InlineEvent::post");
if (Verbose) {
const InlineTree *top = this;
while (top->caller_tree() != NULL) { top = top->caller_tree(); }
//tty->print(" bcs: %d+%d invoked: %d", top->count_inline_bcs(), callee_method->code_size(), callee_method->interpreter_invocation_count());
}
}
EventCompilerInlining event;
if (event.should_commit()) {
CompilerEvent::InlineEvent::post(event, C->compile_id(), caller_method->get_Method(), callee_method, success, inline_msg, caller_bci);
}
}
//------------------------------ok_to_inline-----------------------------------
WarmCallInfo* InlineTree::ok_to_inline(ciMethod* callee_method, JVMState* jvms, ciCallProfile& profile, WarmCallInfo* initial_wci, bool& should_delay) {
assert(callee_method != NULL, "caller checks for optimized virtual!");
assert(!should_delay, "should be initialized to false");
#ifdef ASSERT
// 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:
* Param new_phases may contain duplicates.
* Return value could be used for mapping purpose at caller site, or caller can assume explicit order of registration.
*/
static int register_phases(GrowableArray<const char*>* new_phases) NOT_JFR_RETURN_(-1);
static void post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) NOT_JFR_RETURN();
static void post(EventCompilerPhase& event, jlong start_time, int phase, int compile_id, int level) {
JFR_ONLY(post(event, Ticks(start_time), phase, compile_id, level);)
}
};
class InlineEvent : AllStatic {
static void post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
public:
static void post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
static void post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) NOT_JFR_RETURN();
};
};
#endif // SHARE_COMPILER_COMPILEREVENT_HPP
src/hotspot/share/compiler/compilerEvent.cpp:
event.set_compileId(compile_id);
event.set_failureMessage(reason);
event.commit();
}
void CompilerEvent::PhaseEvent::post(EventCompilerPhase& event, const Ticks& start_time, int phase, int compile_id, int level) {
event.set_starttime(start_time);
event.set_phase((u1) phase);
event.set_compileId(compile_id);
event.set_phaseLevel((short)level);
event.commit();
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, const JfrStructCalleeMethod& callee, bool success, const char* msg, int bci) {
event.set_compileId(compile_id);
event.set_caller(caller);
event.set_callee(callee);
event.set_succeeded(success);
event.set_message(msg);
event.set_bci(bci);
event.commit();
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, Method* callee, bool success, const char* msg, int bci) {
JfrStructCalleeMethod callee_struct;
callee_struct.set_type(callee->klass_name()->as_utf8());
callee_struct.set_name(callee->name()->as_utf8());
callee_struct.set_descriptor(callee->signature()->as_utf8());
post(event, compile_id, caller, callee_struct, success, msg, bci);
}
void CompilerEvent::InlineEvent::post(EventCompilerInlining& event, int compile_id, Method* caller, ciMethod* callee, bool success, const char* msg, int bci) {
JfrStructCalleeMethod callee_struct;
callee_struct.set_type(callee->holder()->name()->as_utf8());
callee_struct.set_name(callee->name()->as_utf8());
callee_struct.set_descriptor(callee->signature()->as_symbol()->as_utf8());
post(event, compile_id, caller, callee_struct, success, msg, bci);
}
src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/JFR.java:
* @param phaseName compiler phase name
* @param compileId current compilation unit id
* @param phaseLevel compiler phase nesting level
*/
public static void write(long startTime, String phaseName, int compileId, int phaseLevel) {
compilerToVM().notifyCompilerPhaseEvent(startTime, getPhaseToId(phaseName), compileId, phaseLevel);
}
}
/**
* Helper methods for managing JFR CompilerInlining events.
* The events are defined in {see @code src/share/jfr/metadata/metadata.xml}.
*/
public static final class CompilerInliningEvent {
/**
* Commits a CompilerInlining event.
*
* @param compileId current compilation unit id
* @param caller caller method
* @param callee callee method
* @param succeeded inlining succeeded or not
* @param message extra information on inlining
* @param bci invocation byte code index
*/
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
compileId | uint | Compilation Identifier |
caller | Method | Caller Method |
callee | CalleeMethod struct | Callee Method |
succeeded | boolean | Succeeded |
message | string | Message |
bci | int | Bytecode Index |
Examples 3
bci | int | 6
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | (Ljava/lang/Object;)I
|
name | string | typeCode
|
type | string | scala/runtime/BoxesRunTime
|
caller | Method | |
descriptor | string | (Ljava/lang/Number;Ljava/lang/Number;)Z
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | equalsNumNum
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | scala/runtime/BoxesRunTime
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/runtime
|
compileId | uint | 85847
|
message | string | inline (hot)
|
startTime | long: millis | 794959011750
|
succeeded | boolean | true
|
bci | int | 2
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | (I)Ljava/lang/AbstractStringBuilder;
|
name | string | append
|
type | string | java/lang/AbstractStringBuilder
|
caller | Method | |
descriptor | string | (I)Ljava/lang/StringBuilder;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | append
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | java/lang/StringBuilder
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/lang
|
compileId | uint | 1413
|
message | string | callee is too large
|
startTime | long: millis | 359610542
|
succeeded | boolean | false
|
bci | int | 11
|
---|---|---|
callee | CalleeMethod | |
descriptor | string | (J)V
|
name | string | putUncheckedLong
|
type | string | jdk/jfr/internal/event/EventWriter
|
caller | Method | |
descriptor | string | (J)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | putLong
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 49
|
name | string | jdk/jfr/internal/event/EventWriter
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/jdk.jfr
|
name | string | jdk.jfr
|
version | string | 21.0.1
|
name | string | jdk/jfr/internal/event
|
compileId | uint | 1490
|
message | string | callee is too large
|
startTime | long: millis | 421573708
|
succeeded | boolean | false
|
Deoptimization
default profiling startTime eventThread stackTrace 14 17 21 23 24
Category: Java Virtual Machine / Compiler
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/deoptimization.cpp:
JfrSerializer::register_serializer(TYPE_DEOPTIMIZATIONREASON, true, new DeoptReasonSerializer());
JfrSerializer::register_serializer(TYPE_DEOPTIMIZATIONACTION, true, new DeoptActionSerializer());
}
static void post_deoptimization_event(CompiledMethod* nm,
const Method* method,
int trap_bci,
int instruction,
Deoptimization::DeoptReason reason,
Deoptimization::DeoptAction action) {
assert(nm != NULL, "invariant");
assert(method != NULL, "invariant");
if (EventDeoptimization::is_enabled()) {
static bool serializers_registered = false;
if (!serializers_registered) {
register_serializers();
serializers_registered = true;
}
EventDeoptimization event;
event.set_compileId(nm->compile_id());
event.set_compiler(nm->compiler_type());
event.set_method(method);
event.set_lineNumber(method->line_number_from_bci(trap_bci));
event.set_bci(trap_bci);
event.set_instruction(instruction);
event.set_reason(reason);
event.set_action(action);
event.commit();
}
}
Configuration | enabled | stackTrace |
---|---|---|
default | true | false |
profiling | true | true |
Field | Type | Description |
---|---|---|
compileId | uint | Compilation Identifier |
compiler | CompilerType | Compiler Consider contributing a description to jfreventcollector. |
method | Method | Method Consider contributing a description to jfreventcollector. |
lineNumber | int | Line Number |
bci | int | Bytecode Index |
instruction | Bytecode | Instruction Consider contributing a description to jfreventcollector. |
reason | DeoptimizationReason | Reason Consider contributing a description to jfreventcollector. |
action | DeoptimizationAction | Action Consider contributing a description to jfreventcollector. |
Examples 3
action | DeoptimizationAction | maybe_recompile
|
---|---|---|
bci | int | 5
|
compileId | uint | 3150
|
compiler | CompilerType | c2
|
instruction | Bytecode | invokeinterface
|
lineNumber | int | 256
|
method | Method | |
descriptor | string | (J)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | begin
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1057
|
name | string | java/util/stream/Sink$ChainedReference
|
package | Package | |
exported | boolean | 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 | bimorphic_or_optimized_type_check
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 5
|
lineNumber | int | 256
|
method | Method | |
descriptor | string | (J)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | begin
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1057
|
name | string | java/util/stream/Sink$ChainedReference
|
package | Package | |
exported | boolean | 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 | 1860062542
|
action | DeoptimizationAction | maybe_recompile
|
---|---|---|
bci | int | 5
|
compileId | uint | 3210
|
compiler | CompilerType | c2
|
instruction | Bytecode | invokeinterface
|
lineNumber | int | 164
|
method | Method | |
descriptor | string | (J)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | begin
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/util/stream/ReduceOps$3ReducingSink
|
package | Package | |
exported | boolean | 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 | bimorphic_or_optimized_type_check
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 5
|
lineNumber | int | 164
|
method | Method | |
descriptor | string | (J)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | begin
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/util/stream/ReduceOps$3ReducingSink
|
package | Package | |
exported | boolean | 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 | 3541753833
|
action | DeoptimizationAction | maybe_recompile
|
---|---|---|
bci | int | 148
|
compileId | uint | 88872
|
compiler | CompilerType | c2
|
instruction | Bytecode | instanceof
|
lineNumber | int | 872
|
method | Method | |
descriptor | string | (Lscala/concurrent/stm/ccstm/Handle;J)Lscala/Symbol;
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | checkRead
|
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/concurrent/stm/ccstm/InTxnImpl
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | scala/concurrent/stm/ccstm
|
reason | DeoptimizationReason | class_check
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 148
|
lineNumber | int | 872
|
method | Method | |
descriptor | string | (Lscala/concurrent/stm/ccstm/Handle;J)Lscala/Symbol;
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | checkRead
|
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/concurrent/stm/ccstm/InTxnImpl
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 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 | 853170711042
|
CompilerStatistics
default profiling startTime every chunk 11 17 21 23 24
Category: Java Virtual Machine / Compiler
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(LoaderConstraintsTableStatistics) {
TableStatistics statistics = SystemDictionary::loader_constraints_statistics();
emit_table_statistics<EventLoaderConstraintsTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(ProtectionDomainCacheTableStatistics) {
TableStatistics statistics = SystemDictionary::protection_domain_cache_statistics();
emit_table_statistics<EventProtectionDomainCacheTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(CompilerStatistics) {
EventCompilerStatistics event;
event.set_compileCount(CompileBroker::get_total_compile_count());
event.set_bailoutCount(CompileBroker::get_total_bailout_count());
event.set_invalidatedCount(CompileBroker::get_total_invalidated_count());
event.set_osrCompileCount(CompileBroker::get_total_osr_compile_count());
event.set_standardCompileCount(CompileBroker::get_total_standard_compile_count());
event.set_osrBytesCompiled(CompileBroker::get_sum_osr_bytes_compiled());
event.set_standardBytesCompiled(CompileBroker::get_sum_standard_bytes_compiled());
event.set_nmethodsSize(CompileBroker::get_sum_nmethod_size());
event.set_nmethodCodeSize(CompileBroker::get_sum_nmethod_code_size());
event.set_peakTimeSpent(CompileBroker::get_peak_compilation_time());
event.set_totalTimeSpent(CompileBroker::get_total_compilation_time());
Configuration | enabled | period |
---|---|---|
default | true | 1000 ms |
profiling | true | 1000 ms |
Field | Type | Description |
---|---|---|
compileCount | int | Compiled Methods |
bailoutCount | int | Bailouts |
invalidatedCount | int | Invalidated Compilations |
osrCompileCount | int | OSR Compilations |
standardCompileCount | int | Standard Compilations |
osrBytesCompiled | ulong: bytes | OSR Bytes Compiled |
standardBytesCompiled | ulong: bytes | Standard Bytes Compiled |
nmethodsSize | ulong: bytes | Compilation Resulting Size |
nmethodCodeSize | ulong: bytes | Compilation Resulting Code Size |
peakTimeSpent | long: millis | Peak Time |
totalTimeSpent | long: millis | Total time |
Examples 3
bailoutCount | int | 11
|
---|---|---|
compileCount | int | 96235
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 125573784
|
nmethodsSize | ulong: bytes | 189225792
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 1135
|
peakTimeSpent | long: millis | 10885
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 95100
|
startTime | long: millis | 898330801458
|
totalTimeSpent | long: millis | 408578
|
bailoutCount | int | 2
|
---|---|---|
compileCount | int | 19631
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 23379576
|
nmethodsSize | ulong: bytes | 36711528
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 181
|
peakTimeSpent | long: millis | 1360
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 19450
|
startTime | long: millis | 79385895583
|
totalTimeSpent | long: millis | 64291
|
bailoutCount | int | 4
|
---|---|---|
compileCount | int | 32641
|
invalidatedCount | int | 0
|
nmethodCodeSize | ulong: bytes | 42788472
|
nmethodsSize | ulong: bytes | 65397632
|
osrBytesCompiled | ulong: bytes | 0
|
osrCompileCount | int | 235
|
peakTimeSpent | long: millis | 953
|
standardBytesCompiled | ulong: bytes | 0
|
standardCompileCount | int | 32406
|
startTime | long: millis | 81087491500
|
totalTimeSpent | long: millis | 60848
|
CompilerConfiguration
default profiling startTime end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Compiler
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_invalidatedCount(CompileBroker::get_total_invalidated_count());
event.set_osrCompileCount(CompileBroker::get_total_osr_compile_count());
event.set_standardCompileCount(CompileBroker::get_total_standard_compile_count());
event.set_osrBytesCompiled(CompileBroker::get_sum_osr_bytes_compiled());
event.set_standardBytesCompiled(CompileBroker::get_sum_standard_bytes_compiled());
event.set_nmethodsSize(CompileBroker::get_sum_nmethod_size());
event.set_nmethodCodeSize(CompileBroker::get_sum_nmethod_code_size());
event.set_peakTimeSpent(CompileBroker::get_peak_compilation_time());
event.set_totalTimeSpent(CompileBroker::get_total_compilation_time());
event.commit();
}
TRACE_REQUEST_FUNC(CompilerConfiguration) {
EventCompilerConfiguration event;
event.set_threadCount(CICompilerCount);
event.set_tieredCompilation(TieredCompilation);
event.commit();
}
TRACE_REQUEST_FUNC(CodeCacheStatistics) {
// Emit stats for all available code heaps
for (int bt = 0; bt < CodeBlobType::NumTypes; ++bt) {
if (CodeCache::heap_available(bt)) {
EventCodeCacheStatistics event;
event.set_codeBlobType((u1)bt);
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
threadCount | int | Thread Count |
tieredCompilation | boolean | Tiered Compilation |
JVM: Diagnostics
HeapDump
default profiling startTime duration eventThread stackTrace 15 17 21 23 24
Category: Java Virtual Machine / Diagnostics
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/services/heapDumper.cpp:
// dump the heap to given path.
int HeapDumper::dump(const char* path, outputStream* out, int compression) {
assert(path != NULL && strlen(path) > 0, "path missing");
// print message in interactive case
if (out != NULL) {
out->print_cr("Dumping heap to %s ...", path);
timer()->start();
}
// create JFR event
EventHeapDump event;
AbstractCompressor* compressor = NULL;
if (compression > 0) {
compressor = new (std::nothrow) GZipCompressor(compression);
if (compressor == NULL) {
set_error("Could not allocate gzip compressor");
return -1;
}
}
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ns |
profiling | true | true | 0 ns |
Field | Type | Description |
---|---|---|
destination | string | Destination |
size | long | Size |
gcBeforeDump | boolean | GC Before Dump |
onOutOfMemoryError | boolean | On Out of Memory Error |
JVM: Flag
IntFlagChanged
default profiling startTime 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/flags/jvmFlag.cpp:
JVMFlag::Error JVMFlag::intAt(const JVMFlag* flag, int* value) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_int()) return JVMFlag::WRONG_FORMAT;
*value = flag->get_int();
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlag::intAtPut(JVMFlag* flag, int* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_int()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_int(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
int old_value = flag->get_int();
trace_flag_changed<EventIntFlagChanged, s4>(flag, old_value, *value, origin);
flag->set_int(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::intAtPut(JVMFlagsEnum flag, int value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_int(), "wrong flag type");
return JVMFlag::intAtPut(faddr, &value, origin);
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | int | Old Value |
newValue | int | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
UnsignedIntFlagChanged
default profiling startTime 11 17 21 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/jvmFlag.cpp:
JVMFlag::Error JVMFlag::uintAt(const JVMFlag* flag, uint* value) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_uint()) return JVMFlag::WRONG_FORMAT;
*value = flag->get_uint();
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlag::uintAtPut(JVMFlag* flag, uint* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_uint()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_uint(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
uint old_value = flag->get_uint();
trace_flag_changed<EventUnsignedIntFlagChanged, u4>(flag, old_value, *value, origin);
flag->set_uint(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::uintAtPut(JVMFlagsEnum flag, uint value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_uint(), "wrong flag type");
return JVMFlag::uintAtPut(faddr, &value, origin);
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | uint | Old Value |
newValue | uint | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
LongFlagChanged
default profiling startTime 11 17 21 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/jvmFlag.cpp:
if (constraint != NULL) {
status = constraint->apply_intx(new_value, verbose);
}
}
return status;
}
JVMFlag::Error JVMFlag::intxAtPut(JVMFlag* flag, intx* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_intx()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_intx(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
intx old_value = flag->get_intx();
trace_flag_changed<EventLongFlagChanged, intx>(flag, old_value, *value, origin);
flag->set_intx(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::intxAtPut(JVMFlagsEnum flag, intx value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_intx(), "wrong flag type");
return JVMFlag::intxAtPut(faddr, &value, origin);
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | long | Old Value |
newValue | long | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
UnsignedLongFlagChanged
default profiling startTime 11 17 21 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/jvmFlag.cpp:
if (constraint != NULL) {
status = constraint->apply_uintx(new_value, verbose);
}
}
return status;
}
JVMFlag::Error JVMFlag::uintxAtPut(JVMFlag* flag, uintx* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_uintx()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_uintx(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
uintx old_value = flag->get_uintx();
trace_flag_changed<EventUnsignedLongFlagChanged, u8>(flag, old_value, *value, origin);
flag->set_uintx(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::uintxAtPut(JVMFlagsEnum flag, uintx value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_uintx(), "wrong flag type");
return JVMFlag::uintxAtPut(faddr, &value, origin);
}
src/hotspot/share/runtime/flags/jvmFlag.cpp:
if (constraint != NULL) {
status = constraint->apply_uint64_t(new_value, verbose);
}
}
return status;
}
JVMFlag::Error JVMFlag::uint64_tAtPut(JVMFlag* flag, uint64_t* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_uint64_t()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_uint64_t(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
uint64_t old_value = flag->get_uint64_t();
trace_flag_changed<EventUnsignedLongFlagChanged, u8>(flag, old_value, *value, origin);
flag->set_uint64_t(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::uint64_tAtPut(JVMFlagsEnum flag, uint64_t value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_uint64_t(), "wrong flag type");
return JVMFlag::uint64_tAtPut(faddr, &value, origin);
}
src/hotspot/share/runtime/flags/jvmFlag.cpp:
status = constraint->apply_size_t(new_value, verbose);
}
}
return status;
}
JVMFlag::Error JVMFlag::size_tAtPut(JVMFlag* flag, size_t* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_size_t()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_size_t(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
size_t old_value = flag->get_size_t();
trace_flag_changed<EventUnsignedLongFlagChanged, u8>(flag, old_value, *value, origin);
flag->set_size_t(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::size_tAtPut(JVMFlagsEnum flag, size_t value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_size_t(), "wrong flag type");
return JVMFlag::size_tAtPut(faddr, &value, origin);
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | ulong | Old Value |
newValue | ulong | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
DoubleFlagChanged
default profiling startTime 11 17 21 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/jvmFlag.cpp:
if (constraint != NULL) {
status = constraint->apply_double(new_value, verbose);
}
}
return status;
}
JVMFlag::Error JVMFlag::doubleAtPut(JVMFlag* flag, double* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_double()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_double(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
double old_value = flag->get_double();
trace_flag_changed<EventDoubleFlagChanged, double>(flag, old_value, *value, origin);
flag->set_double(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::doubleAtPut(JVMFlagsEnum flag, double value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_double(), "wrong flag type");
return JVMFlag::doubleAtPut(faddr, &value, origin);
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | double | Old Value |
newValue | double | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
BooleanFlagChanged
default profiling startTime 11 17 21 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/jvmFlag.cpp:
JVMFlag::Error JVMFlag::boolAt(const JVMFlag* flag, bool* value) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_bool()) return JVMFlag::WRONG_FORMAT;
*value = flag->get_bool();
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlag::boolAtPut(JVMFlag* flag, bool* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_bool()) return JVMFlag::WRONG_FORMAT;
JVMFlag::Error check = apply_constraint_and_check_range_bool(flag, *value, !JVMFlagConstraintList::validated_after_ergo());
if (check != JVMFlag::SUCCESS) return check;
bool old_value = flag->get_bool();
trace_flag_changed<EventBooleanFlagChanged, bool>(flag, old_value, *value, origin);
flag->set_bool(*value);
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::boolAtPut(JVMFlagsEnum flag, bool value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_bool(), "wrong flag type");
return JVMFlag::boolAtPut(faddr, &value, origin);
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | boolean | Old Value |
newValue | boolean | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
StringFlagChanged
default profiling startTime 11 17 21 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/jvmFlag.cpp:
JVMFlag::Error JVMFlag::ccstrAt(const JVMFlag* flag, ccstr* value) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_ccstr()) return JVMFlag::WRONG_FORMAT;
*value = flag->get_ccstr();
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlag::ccstrAtPut(JVMFlag* flag, ccstr* value, JVMFlag::Flags origin) {
if (flag == NULL) return JVMFlag::INVALID_FLAG;
if (!flag->is_ccstr()) return JVMFlag::WRONG_FORMAT;
ccstr old_value = flag->get_ccstr();
trace_flag_changed<EventStringFlagChanged, const char*>(flag, old_value, *value, origin);
char* new_value = NULL;
if (*value != NULL) {
new_value = os::strdup_check_oom(*value);
}
flag->set_ccstr(new_value);
if (flag->is_default() && old_value != NULL) {
// Prior value is NOT heap allocated, but was a literal constant.
old_value = os::strdup_check_oom(old_value);
}
*value = old_value;
flag->set_origin(origin);
return JVMFlag::SUCCESS;
}
JVMFlag::Error JVMFlagEx::ccstrAtPut(JVMFlagsEnum flag, ccstr value, JVMFlag::Flags origin) {
JVMFlag* faddr = flag_from_enum(flag);
guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type");
ccstr old_value = faddr->get_ccstr();
trace_flag_changed<EventStringFlagChanged, const char*>(faddr, old_value, value, origin);
char* new_value = os::strdup_check_oom(value);
faddr->set_ccstr(new_value);
if (!faddr->is_default() && old_value != NULL) {
// Prior value is heap allocated so free it.
FREE_C_HEAP_ARRAY(char, old_value);
}
faddr->set_origin(origin);
return JVMFlag::SUCCESS;
}
extern "C" {
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
name | string | Name |
oldValue | string | Old Value |
newValue | string | New Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
IntFlag
default profiling startTime duration end of every chunk 11 17 21 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 | JavaPriority10_To_OSPriority
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 40031148083
|
value | int | -1
|
name | string | UnguardOnExecutionViolation
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 17899850333
|
value | int | 0
|
name | string | JavaPriority4_To_OSPriority
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 798681835583
|
value | int | -1
|
UnsignedIntFlag
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
value | uint | Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
Examples 3
name | string | ConcGCThreads
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 75962745333
|
value | uint | 0
|
name | string | GCTimeLimit
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773037292
|
value | uint | 98
|
name | string | TestCrashInErrorHandler
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 39268377458
|
value | uint | 0
|
LongFlag
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
value | long | Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
Examples 3
name | string | IndexSetWatch
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 364806208
|
value | long | 0
|
name | string | Tier3BackEdgeThreshold
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 423474583
|
value | long | 60000
|
name | string | Tier3BackEdgeThreshold
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773047875
|
value | long | 60000
|
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 | HeapMaximumCompactionInterval
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 423578917
|
value | ulong | 20
|
name | string | TLABWasteIncrement
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 364827083
|
value | ulong | 4
|
name | string | ReservedCodeCacheSize
|
---|---|---|
origin | FlagValueOrigin | Ergonomic
|
startTime | long: millis | 791773058000
|
value | ulong | 251658240
|
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 | InitialRAMPercentage
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 39268409875
|
value | double | 1.5625
|
name | string | SweeperThreshold
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 15845389125
|
value | double | 15.0
|
name | string | ZCollectionInterval
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 798682014417
|
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 | PrintNullCheckElimination
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 364840250
|
value | boolean | false
|
name | string | AlignVector
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 423601542
|
value | boolean | false
|
name | string | DeoptC1
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 791773076792
|
value | boolean | true
|
StringFlag
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / Flag
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
value | string | Value |
origin | FlagValueOrigin | Origin Consider contributing a description to jfreventcollector. |
Examples 3
name | string | DumpLoadedClassList
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 364877708
|
value | string | null
|
name | string | TraceJVMTI
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 30586899250
|
value | string | null
|
name | string | ErrorFile
|
---|---|---|
origin | FlagValueOrigin | Default
|
startTime | long: millis | 798682168125
|
value | string | null
|
JVM: GC: Collector
GarbageCollection
default profiling startTime duration 11 17 21 23 24
Category: Java Virtual Machine / GC / Collector
Garbage collection performed by the JVM
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
// All GC dependencies against the trace framework is contained within this file.
typedef uintptr_t TraceAddress;
void GCTracer::send_garbage_collection_event() const {
EventGarbageCollection event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_name(_shared_gc_info.name());
event.set_cause((u2) _shared_gc_info.cause());
event.set_sumOfPauses(_shared_gc_info.sum_of_pauses());
event.set_longestPause(_shared_gc_info.longest_pause());
event.set_starttime(_shared_gc_info.start_timestamp());
event.set_endtime(_shared_gc_info.end_timestamp());
event.commit();
}
}
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | GCName | Name The name of the Garbage Collector |
cause | GCCause | Cause The reason for triggering this Garbage Collection |
sumOfPauses | Tickspan | Sum of Pauses Sum of all the times in which Java execution was paused during the garbage collection |
longestPause | Tickspan | Longest Pause Longest individual pause during the garbage collection |
Examples 3
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 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:
double predicted_allocation_rate,
double predicted_marking_length,
bool prediction_active) {
send_adaptive_ihop_statistics(threshold,
internal_target_occupancy,
additional_buffer_size,
current_occupancy,
predicted_allocation_rate,
predicted_marking_length,
prediction_active);
}
void G1NewTracer::send_g1_young_gc_event() {
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type(_g1_young_gc_info.type());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void G1NewTracer::send_evacuation_info_event(G1EvacuationInfo* info) {
EventEvacuationInformation e;
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
type | G1YCType | Type Consider contributing a description to jfreventcollector. |
JVM: GC: Configuration
GCConfiguration
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / GC / Configuration
The configuration of the garbage collector
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(G1HeapRegionInformation) {
G1GC_ONLY(G1HeapRegionEventSender::send_events());
}
// Java Mission Control (JMC) uses (Java) Long.MIN_VALUE to describe that a
// long value is undefined.
static jlong jmc_undefined_long = min_jlong;
TRACE_REQUEST_FUNC(GCConfiguration) {
GCConfiguration conf;
jlong pause_target = conf.has_pause_target_default_value() ? jmc_undefined_long : conf.pause_target();
EventGCConfiguration event;
event.set_youngCollector(conf.young_collector());
event.set_oldCollector(conf.old_collector());
event.set_parallelGCThreads(conf.num_parallel_gc_threads());
event.set_concurrentGCThreads(conf.num_concurrent_gc_threads());
event.set_usesDynamicGCThreads(conf.uses_dynamic_gc_threads());
event.set_isExplicitGCConcurrent(conf.is_explicit_gc_concurrent());
event.set_isExplicitGCDisabled(conf.is_explicit_gc_disabled());
event.set_gcTimeRatio(conf.gc_time_ratio());
event.set_pauseTarget((s8)pause_target);
event.commit();
}
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
youngCollector | GCName | Young Garbage Collector The garbage collector used for the young generation |
oldCollector | GCName | Old Garbage Collector The garbage collector used for the old generation |
parallelGCThreads | uint | Parallel GC Threads Number of parallel threads to use for garbage collection |
concurrentGCThreads | uint | Concurrent GC Threads Number of concurrent threads to use for garbage collection |
usesDynamicGCThreads | boolean | Uses Dynamic GC Threads Whether a dynamic number of GC threads are used or not |
isExplicitGCConcurrent | boolean | Concurrent Explicit GC Whether System.gc() is concurrent or not |
isExplicitGCDisabled | boolean | Disabled Explicit GC Whether System.gc() will cause a garbage collection or not |
pauseTarget | long: millis | Pause Target Target for GC pauses |
gcTimeRatio | uint | GC Time Ratio Target for runtime vs garbage collection time |
Examples 3
concurrentGCThreads | uint | 0
|
---|---|---|
gcTimeRatio | uint | 99
|
isExplicitGCConcurrent | boolean | false
|
isExplicitGCDisabled | boolean | false
|
oldCollector | GCName | SerialOld
|
parallelGCThreads | uint | 0
|
pauseTarget | long: millis | -9223372036854775808
|
startTime | long: millis | 96932668417
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | DefNew
|
concurrentGCThreads | uint | 2
|
---|---|---|
gcTimeRatio | uint | 12
|
isExplicitGCConcurrent | boolean | false
|
isExplicitGCDisabled | boolean | false
|
oldCollector | GCName | G1Old
|
parallelGCThreads | uint | 8
|
pauseTarget | long: millis | -9223372036854775808
|
startTime | long: millis | 925885354875
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | G1New
|
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 | 39413196458
|
usesDynamicGCThreads | boolean | true
|
youngCollector | GCName | ParallelScavenge
|
GCSurvivorConfiguration
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / GC / Configuration
The configuration of the survivors of garbage collection
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
TRACE_REQUEST_FUNC(GCTLABConfiguration) {
GCTLABConfiguration conf;
EventGCTLABConfiguration event;
event.set_usesTLABs(conf.uses_tlabs());
event.set_minTLABSize(conf.min_tlab_size());
event.set_tlabRefillWasteLimit(conf.tlab_refill_waste_limit());
event.commit();
}
TRACE_REQUEST_FUNC(GCSurvivorConfiguration) {
GCSurvivorConfiguration conf;
EventGCSurvivorConfiguration event;
event.set_maxTenuringThreshold(conf.max_tenuring_threshold());
event.set_initialTenuringThreshold(conf.initial_tenuring_threshold());
event.commit();
}
TRACE_REQUEST_FUNC(GCHeapConfiguration) {
GCHeapConfiguration conf;
EventGCHeapConfiguration event;
event.set_minSize(conf.min_size());
event.set_maxSize(conf.max_size());
event.set_initialSize(conf.initial_size());
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
maxTenuringThreshold | ubyte | Maximum Tenuring Threshold Upper limit for the age of how old objects to keep in the survivor area |
initialTenuringThreshold | ubyte | Initial Tenuring Threshold Initial age limit for how old objects to keep in survivor area |
Examples 3
GCTLABConfiguration
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / GC / Configuration
The configuration of the Thread Local Allocation Buffers (TLABs)
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_oldCollector(conf.old_collector());
event.set_parallelGCThreads(conf.num_parallel_gc_threads());
event.set_concurrentGCThreads(conf.num_concurrent_gc_threads());
event.set_usesDynamicGCThreads(conf.uses_dynamic_gc_threads());
event.set_isExplicitGCConcurrent(conf.is_explicit_gc_concurrent());
event.set_isExplicitGCDisabled(conf.is_explicit_gc_disabled());
event.set_gcTimeRatio(conf.gc_time_ratio());
event.set_pauseTarget((s8)pause_target);
event.commit();
}
TRACE_REQUEST_FUNC(GCTLABConfiguration) {
GCTLABConfiguration conf;
EventGCTLABConfiguration event;
event.set_usesTLABs(conf.uses_tlabs());
event.set_minTLABSize(conf.min_tlab_size());
event.set_tlabRefillWasteLimit(conf.tlab_refill_waste_limit());
event.commit();
}
TRACE_REQUEST_FUNC(GCSurvivorConfiguration) {
GCSurvivorConfiguration conf;
EventGCSurvivorConfiguration event;
event.set_maxTenuringThreshold(conf.max_tenuring_threshold());
event.set_initialTenuringThreshold(conf.initial_tenuring_threshold());
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
usesTLABs | boolean | TLABs Used If Thread Local Allocation Buffers (TLABs) are in use |
minTLABSize | ulong: bytes | Minimum TLAB Size |
tlabRefillWasteLimit | ulong: bytes | TLAB Refill Waste Limit |
Examples 3
GCHeapConfiguration
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / GC / Configuration
The configuration of the garbage collected heap
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.commit();
}
TRACE_REQUEST_FUNC(GCSurvivorConfiguration) {
GCSurvivorConfiguration conf;
EventGCSurvivorConfiguration event;
event.set_maxTenuringThreshold(conf.max_tenuring_threshold());
event.set_initialTenuringThreshold(conf.initial_tenuring_threshold());
event.commit();
}
TRACE_REQUEST_FUNC(GCHeapConfiguration) {
GCHeapConfiguration conf;
EventGCHeapConfiguration event;
event.set_minSize(conf.min_size());
event.set_maxSize(conf.max_size());
event.set_initialSize(conf.initial_size());
event.set_usesCompressedOops(conf.uses_compressed_oops());
event.set_compressedOopsMode(conf.narrow_oop_mode());
event.set_objectAlignment(conf.object_alignment_in_bytes());
event.set_heapAddressBits(conf.heap_address_size_in_bits());
event.commit();
}
TRACE_REQUEST_FUNC(YoungGenerationConfiguration) {
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
minSize | ulong: bytes | Minimum Heap Size |
maxSize | ulong: bytes | Maximum Heap Size |
initialSize | ulong: bytes | Initial Heap Size |
usesCompressedOops | boolean | If Compressed Oops Are Used If compressed Oops (Ordinary Object Pointers) are enabled |
compressedOopsMode | NarrowOopMode | Compressed Oops Mode The kind of compressed oops being used |
objectAlignment | ulong: bytes | Object Alignment Object alignment (in bytes) on the heap |
heapAddressBits | ubyte | Heap Address Size Heap Address Size (in bits) |
Examples 3
YoungGenerationConfiguration
default profiling startTime duration end of every chunk 11 17 21 23 24
Category: Java Virtual Machine / GC / Configuration
The configuration of the young generation of the garbage collected heap
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/jfrPeriodic.cpp:
event.set_minSize(conf.min_size());
event.set_maxSize(conf.max_size());
event.set_initialSize(conf.initial_size());
event.set_usesCompressedOops(conf.uses_compressed_oops());
event.set_compressedOopsMode(conf.narrow_oop_mode());
event.set_objectAlignment(conf.object_alignment_in_bytes());
event.set_heapAddressBits(conf.heap_address_size_in_bits());
event.commit();
}
TRACE_REQUEST_FUNC(YoungGenerationConfiguration) {
GCYoungGenerationConfiguration conf;
jlong max_size = conf.has_max_size_default_value() ? jmc_undefined_long : conf.max_size();
EventYoungGenerationConfiguration event;
event.set_maxSize((u8)max_size);
event.set_minSize(conf.min_size());
event.set_newRatio(conf.new_ratio());
event.commit();
}
TRACE_REQUEST_FUNC(InitialSystemProperty) {
SystemProperty* p = Arguments::system_properties();
JfrTicks time_stamp = JfrTicks::now();
while (p != NULL) {
if (!p->internal()) {
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
minSize | ulong: bytes | Minimum Young Generation Size |
maxSize | ulong: bytes | Maximum Young Generation Size |
newRatio | uint | New Ratio The size of the young generation relative to the tenured generation |
Examples 3
JVM: GC: Detailed
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:
void G1NewTracer::send_g1_young_gc_event() {
EventG1GarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type(_g1_young_gc_info.type());
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
void G1NewTracer::send_evacuation_info_event(G1EvacuationInfo* info) {
EventEvacuationInformation e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_cSetRegions(info->collectionset_regions());
e.set_cSetUsedBefore(info->collectionset_used_before());
e.set_cSetUsedAfter(info->collectionset_used_after());
e.set_allocationRegions(info->allocation_regions());
e.set_allocationRegionsUsedBefore(info->alloc_regions_used_before());
e.set_allocationRegionsUsedAfter(info->alloc_regions_used_before() + info->bytes_used());
e.set_bytesCopied(info->bytes_used());
e.set_regionsFreed(info->regions_freed());
e.commit();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
cSetRegions | uint | Collection Set Regions |
cSetUsedBefore | ulong: bytes | Collection Set Before Memory usage before GC in the collection set regions |
cSetUsedAfter | ulong: bytes | Collection Set After Memory usage after GC in the collection set regions |
allocationRegions | uint | Allocation Regions Regions chosen as allocation regions during evacuation (includes survivors and old space regions) |
allocationRegionsUsedBefore | ulong: bytes | Allocation Regions Before Memory usage before GC in allocation regions |
allocationRegionsUsedAfter | ulong: bytes | Allocation Regions After Memory usage after GC in allocation regions |
bytesCopied | ulong: bytes | Bytes Copied |
regionsFreed | uint | Regions Freed |
Examples 1
allocationRegions | uint | 2
|
---|---|---|
allocationRegionsUsedAfter | ulong: bytes | 2646912
|
allocationRegionsUsedBefore | ulong: bytes | 0
|
bytesCopied | ulong: bytes | 2646912
|
cSetRegions | uint | 224
|
cSetUsedAfter | ulong: bytes | 0
|
cSetUsedBefore | ulong: bytes | 468697112
|
gcId | uint | 916
|
regionsFreed | uint | 224
|
startTime | long: millis | 854446081167
|
ObjectCountAfterGC
Category: Java Virtual Machine / GC / Detailed
Appearing in: G1GC, ParallelGC, SerialGC
Missing in: ShenandoahGC, ZGC
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/objectCountEventSender.cpp:
#if INCLUDE_SERVICES
bool ObjectCountEventSender::should_send_event() {
#if INCLUDE_JFR
return _should_send_requestable_event || EventObjectCountAfterGC::is_enabled();
#else
return false;
#endif // INCLUDE_JFR
}
bool ObjectCountEventSender::_should_send_requestable_event = false;
void ObjectCountEventSender::enable_requestable_event() {
_should_send_requestable_event = true;
}
src/hotspot/share/gc/shared/objectCountEventSender.cpp:
template <typename T>
void ObjectCountEventSender::send_event_if_enabled(Klass* klass, jlong count, julong size, const Ticks& timestamp) {
T event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_count(count);
event.set_totalSize(size);
event.set_endtime(timestamp);
event.commit();
}
}
void ObjectCountEventSender::send(const KlassInfoEntry* entry, const Ticks& timestamp) {
Klass* klass = entry->klass();
jlong count = entry->count();
julong total_size = entry->words() * BytesPerWord;
send_event_if_enabled<EventObjectCount>(klass, count, total_size, timestamp);
send_event_if_enabled<EventObjectCountAfterGC>(klass, count, total_size, timestamp);
}
#endif // INCLUDE_SERVICES
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
objectClass | Class | Object Class Consider contributing a description to jfreventcollector. |
count | long | Count |
totalSize | ulong: bytes | Total Size |
Examples 3
count | long | 292086
|
---|---|---|
gcId | uint | 22
|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/util/HashMap$Node
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
startTime | long: millis | 9266401125
|
totalSize | ulong: bytes | 9346752
|
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 | 792226049708
|
---|---|---|
statistics | G1EvacuationStatistics | |
allocated | ulong: bytes | 513936
|
directAllocated | ulong: bytes | 74832
|
failureUsed | ulong: bytes | 0
|
failureWaste | ulong: bytes | 0
|
gcId | uint | 865
|
regionEndWaste | ulong: bytes | 0
|
regionsRefilled | uint: bytes | 1
|
undoWaste | ulong: bytes | 0
|
used | ulong: bytes | 469784
|
wasted | ulong: bytes | 2760
|
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 | 874983597583
|
---|---|---|
statistics | G1EvacuationStatistics | |
allocated | ulong: bytes | 0
|
directAllocated | ulong: bytes | 0
|
failureUsed | ulong: bytes | 0
|
failureWaste | ulong: bytes | 0
|
gcId | uint | 937
|
regionEndWaste | ulong: bytes | 0
|
regionsRefilled | uint: bytes | 1
|
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 initial mark to the first mixed GC |
Examples 1
currentOccupancy | ulong: bytes | 288770344
|
---|---|---|
gcId | uint | 877
|
lastMarkingDuration | long: millis | 3252
|
recentAllocationRate | double: bytes-per-second | 1.228512043493862E8
|
recentMutatorAllocationSize | ulong: bytes | 2097152
|
recentMutatorDuration | long: millis | 17
|
startTime | long: millis | 808698624042
|
targetOccupancy | ulong: bytes | 2199912448
|
threshold | ulong: bytes | 138308982
|
thresholdPercentage | float: percentage | 0.06287022
|
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 initial mark to the first mixed GC |
predictionActive | boolean | Prediction Active Indicates whether the adaptive IHOP prediction is active |
Examples 1
additionalBufferSize | ulong: bytes | 694157312
|
---|---|---|
currentOccupancy | ulong: bytes | 578102416
|
gcId | uint | 936
|
ihopTargetOccupancy | ulong: bytes | 1235222528
|
predictedAllocationRate | double: bytes-per-second | 1.638371548822393E8
|
predictedMarkingDuration | long: millis | 3626
|
predictionActive | boolean | true
|
startTime | long: millis | 874612323458
|
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 Scavange, G1 and CMS with Parallel New. Due to promotion being done in parallel an object might be reported multiple times as the GC threads race to copy all objects.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
void YoungGCTracer::send_young_gc_event() const {
EventYoungGarbageCollection e(UNTIMED);
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_tenuringThreshold(_tenuring_threshold);
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
bool YoungGCTracer::should_send_promotion_in_new_plab_event() const {
return EventPromoteObjectInNewPLAB::is_enabled();
}
bool YoungGCTracer::should_send_promotion_outside_plab_event() const {
return EventPromoteObjectOutsidePLAB::is_enabled();
}
void YoungGCTracer::send_promotion_in_new_plab_event(Klass* klass, size_t obj_size,
uint age, bool tenured,
size_t plab_size) const {
EventPromoteObjectInNewPLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.set_plabSize(plab_size);
event.commit();
}
}
Configuration | enabled |
---|---|
default | false |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier Identifier signifying GC during which the object was promoted |
objectClass | Class | Object Class Class of promoted object |
objectSize | ulong: bytes | Object Size Size of promoted object |
tenuringAge | uint | Object Tenuring Age Tenuring age of a surviving object before being copied. The tenuring age of an object is a value between 0-15 and is incremented each scavange the object survives. Newly allocated objects have tenuring age 0. |
tenured | boolean | Tenured True if object was promoted to Old space, otherwise the object was aged and copied to a Survivor space |
plabSize | ulong: bytes | PLAB Size Size of the allocated PLAB to which the object was copied |
Examples 2
gcId | uint | 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 | 4128
|
startTime | long: millis | 792215817792
|
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 Scavange, G1 and CMS with Parallel New. Due to promotion being done in parallel an object might be reported multiple times as the GC threads race to copy all objects.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_gcId(GCId::current());
e.set_tenuringThreshold(_tenuring_threshold);
e.set_starttime(_shared_gc_info.start_timestamp());
e.set_endtime(_shared_gc_info.end_timestamp());
e.commit();
}
}
bool YoungGCTracer::should_send_promotion_in_new_plab_event() const {
return EventPromoteObjectInNewPLAB::is_enabled();
}
bool YoungGCTracer::should_send_promotion_outside_plab_event() const {
return EventPromoteObjectOutsidePLAB::is_enabled();
}
void YoungGCTracer::send_promotion_in_new_plab_event(Klass* klass, size_t obj_size,
uint age, bool tenured,
size_t plab_size) const {
EventPromoteObjectInNewPLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.set_plabSize(plab_size);
event.commit();
}
}
void YoungGCTracer::send_promotion_outside_plab_event(Klass* klass, size_t obj_size,
uint age, bool tenured) const {
EventPromoteObjectOutsidePLAB event;
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_objectClass(klass);
event.set_objectSize(obj_size);
event.set_tenured(tenured);
event.set_tenuringAge(age);
event.commit();
}
}
void OldGCTracer::send_old_gc_event() const {
Configuration | enabled |
---|---|
default | false |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier Identifier signifying GC during which the object was promoted |
objectClass | Class | Object Class Class of promoted object |
objectSize | ulong: bytes | Object Size Size of promoted object |
tenuringAge | uint | Object Tenuring Age Tenuring age of a surviving object before being copied. The tenuring age of an object is a value between 0-15 and is incremented each scavange the object survives. Newly allocated objects have tenuring age 0. |
tenured | boolean | Tenured True if object was promoted to Old space, otherwise the object was aged and copied to a Survivor space |
Examples 2
gcId | uint | 908
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1040
|
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 | 22
|
name | string | java/util
|
objectSize | ulong: bytes | 131088
|
startTime | long: millis | 847953369083
|
tenured | boolean | false
|
tenuringAge | uint | 1
|
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());
failed_info.set_smallestSize(cf_info.smallest_size());
failed_info.set_totalSize(cf_info.total_size());
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->collectionset_regions());
e.set_cSetUsedBefore(info->collectionset_used_before());
e.set_cSetUsedAfter(info->collectionset_used_after());
e.set_allocationRegions(info->allocation_regions());
e.set_allocationRegionsUsedBefore(info->alloc_regions_used_before());
e.set_allocationRegionsUsedAfter(info->alloc_regions_used_before() + info->bytes_used());
e.set_bytesCopied(info->bytes_used());
e.set_regionsFreed(info->regions_freed());
e.commit();
}
}
void G1NewTracer::send_evacuation_failed_event(const EvacuationFailedInfo& ef_info) const {
EventEvacuationFailed e;
if (e.should_commit()) {
// Create JFR structured failure data
JfrStructCopyFailed evac_failed;
evac_failed.set_objectCount(ef_info.failed_count());
evac_failed.set_firstSize(ef_info.first_size());
evac_failed.set_smallestSize(ef_info.smallest_size());
evac_failed.set_totalSize(ef_info.total_size());
// 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 |
AllocationRequiringGC
startTime eventThread stackTrace 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/allocTracer.cpp:
event.set_allocationSize(alloc_size);
event.commit();
}
}
void AllocTracer::send_allocation_in_new_tlab(Klass* klass, HeapWord* obj, size_t tlab_size, size_t alloc_size, Thread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(obj, alloc_size, thread);)
EventObjectAllocationInNewTLAB event;
if (event.should_commit()) {
event.set_objectClass(klass);
event.set_allocationSize(alloc_size);
event.set_tlabSize(tlab_size);
event.commit();
}
}
void AllocTracer::send_allocation_requiring_gc_event(size_t size, uint gcId) {
EventAllocationRequiringGC event;
if (event.should_commit()) {
event.set_gcId(gcId);
event.set_size(size);
event.commit();
}
}
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
gcId | uint | Pending GC Identifier |
size | ulong: bytes | Allocation Size |
Examples 3
gcId | uint | 976
|
---|---|---|
size | ulong: bytes | 1048576
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 12
|
lineNumber | int | 500
|
method | Method | |
descriptor | string | (Ljava/lang/Object;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 8
|
name | string | allocateInstance
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/lang/invoke/DirectMethodHandle
|
package | Package | |
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/invoke
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | true
|
startTime | long: millis | 899790527125
|
gcId | uint | 82
|
---|---|---|
size | ulong: bytes | 24
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | 177
|
method | Method | |
descriptor | string | (ILjava/util/stream/Sink;)Ljava/util/stream/Sink;
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | opWrapSink
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/util/stream/IntPipeline$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 | true
|
startTime | long: millis | 61209384500
|
gcId | uint | 33
|
---|---|---|
size | ulong: bytes | 48
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 0
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | ()Ljava/lang/Object;
|
hidden | boolean | true
|
modifiers | int | 1
|
name | string | get
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | true
|
modifiers | int | 4144
|
name | string | java.util.stream.Collectors$$Lambda+0x00000008002526b0/1922260655
|
package | Package | |
exported | boolean | 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 | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 1997656875
|
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/heapRegionTracer.cpp:
void HeapRegionTracer::send_region_type_change(uint index,
G1HeapRegionTraceType::Type from,
G1HeapRegionTraceType::Type to,
uintptr_t start,
size_t used) {
EventG1HeapRegionTypeChange e;
if (e.should_commit()) {
e.set_index(index);
e.set_from(from);
e.set_to(to);
e.set_start(start);
e.set_used(used);
e.commit();
}
}
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
index | uint | Index |
from | G1HeapRegionType | From Consider contributing a description to jfreventcollector. |
to | G1HeapRegionType | To Consider contributing a description to jfreventcollector. |
start | ulong: address | Start |
used | ulong: bytes | Used |
Examples 1
from | G1HeapRegionType | Free
|
---|---|---|
index | uint | 149
|
start | ulong: address | 30377246720
|
startTime | long: millis | 791919065875
|
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_gcId(GCId::current());
event.set_objectClass(klass);
event.set_count(count);
event.set_totalSize(size);
event.set_endtime(timestamp);
event.commit();
}
}
void ObjectCountEventSender::send(const KlassInfoEntry* entry, const Ticks& timestamp) {
Klass* klass = entry->klass();
jlong count = entry->count();
julong total_size = entry->words() * BytesPerWord;
send_event_if_enabled<EventObjectCount>(klass, count, total_size, timestamp);
send_event_if_enabled<EventObjectCountAfterGC>(klass, count, total_size, timestamp);
}
#endif // INCLUDE_SERVICES
Configuration | enabled | period |
---|---|---|
default | false | everyChunk |
profiling | false | everyChunk |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
objectClass | Class | Object Class Consider contributing a description to jfreventcollector. |
count | long | Count |
totalSize | ulong: bytes | Total Size |
Examples 3
count | long | 119027
|
---|---|---|
gcId | uint | 866
|
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
|
startTime | long: millis | 792378118375
|
totalSize | ulong: bytes | 9966384
|
count | long | 1691
|
---|---|---|
gcId | uint | 16
|
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 | 4573757000
|
totalSize | ulong: bytes | 2292568
|
count | long | 1657
|
---|---|---|
gcId | uint | 1
|
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 | 865943958
|
totalSize | ulong: bytes | 186904
|
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(HeapRegion* r) {
EventG1HeapRegionInformation evt;
evt.set_index(r->hrm_index());
evt.set_type(r->get_trace_type());
evt.set_start((uintptr_t)r->bottom());
evt.set_used(r->used());
evt.commit();
return false;
}
};
class VM_G1SendHeapRegionInfoEvents : public VM_Operation {
virtual void doit() {
DumpEventInfoClosure c;
G1CollectedHeap::heap()->heap_region_iterate(&c);
Configuration | enabled | period |
---|---|---|
default | false | everyChunk |
profiling | false | everyChunk |
Field | Type | Description |
---|---|---|
index | uint | Index |
type | G1HeapRegionType | Type Consider contributing a description to jfreventcollector. |
start | ulong: address | Start |
used | ulong: bytes | Used |
ZAllocationStall
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
Time spent waiting for memory to become available
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/z/zPageAllocator.cpp:
// Success
return true;
}
static void check_out_of_memory_during_initialization() {
if (!is_init_completed()) {
vm_exit_during_initialization("java.lang.OutOfMemoryError", "Java heap too small");
}
}
bool ZPageAllocator::alloc_page_stall(ZPageAllocation* allocation) {
ZStatTimer timer(ZCriticalPhaseAllocationStall);
EventZAllocationStall event;
ZPageAllocationStall result;
// We can only block if the VM is fully initialized
check_out_of_memory_during_initialization();
do {
// Start asynchronous GC
ZCollectedHeap::heap()->collect(GCCause::_z_allocation_stall);
// Wait for allocation to complete, fail or request a GC
result = allocation->wait();
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
type | ZPageTypeType | Type Consider contributing a description to jfreventcollector. |
size | ulong: bytes | Size |
ZPageAllocation
default profiling startTime duration eventThread stackTrace 11 17 21 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/z/zPageAllocator.cpp:
free_page_inner(page, false /* reclaimed */);
}
// Adjust capacity and used to reflect the failed capacity increase
const size_t remaining = allocation->size() - freed;
decrease_used(remaining, false /* reclaimed */);
decrease_capacity(remaining, true /* set_max_capacity */);
// Try satisfy stalled allocations
satisfy_stalled();
}
ZPage* ZPageAllocator::alloc_page(uint8_t type, size_t size, ZAllocationFlags flags) {
EventZPageAllocation event;
retry:
ZPageAllocation allocation(type, size, flags);
// Allocate one or more pages from the page cache. If the allocation
// succeeds but the returned pages don't cover the complete allocation,
// then finalize phase is allowed to allocate the remaining memory
// directly from the physical memory manager. Note that this call might
// block in a safepoint if the non-blocking flag is not set.
if (!alloc_page_or_stall(&allocation)) {
// Out of memory
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true 15+ | 1 ms |
profiling | true | true 15+ | 1 ms |
Field | Type | Description |
---|---|---|
type | ZPageTypeType 15+ | Type Consider contributing a description to jfreventcollector. |
size | ulong: bytes 15+ | Size |
flushed | ulong: bytes 15+ | Flushed |
committed | ulong: bytes 15+ | Committed |
segments | uint 15+ | Segments |
nonBlocking | boolean | Non-blocking |
noReserve | boolean 11 until JDK 16 | No Reserve |
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 | 5
|
lineNumber | int | 153
|
method | Method | |
descriptor | string | (Ljava/lang/Object;)V
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | linkLast
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/util/LinkedList
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 15127451916
|
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:
_medium.register_garbage_page(page);
} else {
_large.register_garbage_page(page);
}
}
void ZRelocationSetSelector::select(ZRelocationSet* relocation_set) {
// 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();
// Populate relocation set
relocation_set->populate(_medium.selected(), _medium.nselected(),
_small.selected(), _small.nselected());
// Send event
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
total | ulong: bytes | Total |
empty | ulong: bytes | Empty |
compactingFrom | ulong: bytes until JDK 16 | Compacting From |
compactingTo | ulong: bytes until JDK 16 | Compacting To |
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:
// Update statistics
_stats._compacting_from = selected_from * _page_size;
_stats._compacting_to = selected_to * _page_size;
log_trace(gc, reloc)("Relocation Set (%s Pages): " SIZE_FORMAT "->" SIZE_FORMAT ", " SIZE_FORMAT " skipped",
_name, selected_from, selected_to, npages - _nselected);
}
void ZRelocationSetSelectorGroup::select() {
if (is_disabled()) {
return;
}
EventZRelocationSetGroup event;
if (is_selectable()) {
select_inner();
}
// Send event
event.commit(_page_type, _stats.npages(), _stats.total(), _stats.empty(),
_stats.compacting_from(), _stats.compacting_to());
}
ZRelocationSetSelector::ZRelocationSetSelector() :
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
type | ZPageTypeType | Type Consider contributing a description to jfreventcollector. |
pages | ulong 17 until JDK 21 | Pages |
total | ulong: bytes | Total |
empty | ulong: bytes | Empty |
compactingFrom | ulong: bytes until JDK 16 | Compacting From |
compactingTo | ulong: bytes until JDK 16 | Compacting To |
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/z/zTracer.inline.hpp:
#ifndef SHARE_GC_Z_ZTRACER_INLINE_HPP
#define SHARE_GC_Z_ZTRACER_INLINE_HPP
#include "gc/z/zStat.hpp"
#include "gc/z/zTracer.hpp"
#include "jfr/jfrEvents.hpp"
inline ZTracer* ZTracer::tracer() {
return _tracer;
}
inline void ZTracer::report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void ZTracer::report_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
src/hotspot/share/gc/z/zTracer.cpp:
ZTracer::ZTracer() :
GCTracer(Z) {}
void ZTracer::initialize() {
assert(_tracer == NULL, "Already initialized");
_tracer = new (ResourceObj::C_HEAP, mtGC) ZTracer();
JFR_ONLY(register_jfr_type_serializers());
}
void ZTracer::send_stat_counter(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/z/zTracer.inline.hpp:
inline ZTracer* ZTracer::tracer() {
return _tracer;
}
inline void ZTracer::report_stat_counter(const ZStatCounter& counter, uint64_t increment, uint64_t value) {
if (EventZStatisticsCounter::is_enabled()) {
send_stat_counter(counter, increment, value);
}
}
inline void ZTracer::report_stat_sampler(const ZStatSampler& sampler, uint64_t value) {
if (EventZStatisticsSampler::is_enabled()) {
send_stat_sampler(sampler, value);
}
}
inline void ZTracer::report_thread_phase(const char* name, const Ticks& start, const Ticks& end) {
if (EventZThreadPhase::is_enabled()) {
send_thread_phase(name, start, end);
}
}
inline ZTraceThreadPhase::ZTraceThreadPhase(const char* name) :
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 | GC Locker Stall
|
---|---|---|
startTime | long: millis | 1030583166
|
value | ulong | 0
|
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/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 ZTraceThreadPhase::ZTraceThreadPhase(const char* name) :
_start(Ticks::now()),
_name(name) {}
inline ZTraceThreadPhase::~ZTraceThreadPhase() {
ZTracer::tracer()->report_thread_phase(_name, _start, Ticks::now());
}
src/hotspot/share/gc/z/zTracer.cpp:
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);
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();
}
}
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/z/zUncommitter.cpp:
bool ZUncommitter::should_continue() const {
ZLocker<ZConditionLock> locker(&_lock);
return !_stop;
}
void ZUncommitter::run_service() {
uint64_t timeout = 0;
while (wait(timeout)) {
EventZUncommit event;
size_t uncommitted = 0;
while (should_continue()) {
// Uncommit chunk
const size_t flushed = _page_allocator->uncommit(&timeout);
if (flushed == 0) {
// Done
break;
}
uncommitted += flushed;
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
uncommitted | ulong: bytes | Uncommitted |
ZUnmap
default profiling startTime duration eventThread 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/z/zUnmapper.cpp:
ZPage* const page = _queue.remove_first();
if (page != NULL) {
return page;
}
_lock.wait();
}
}
void ZUnmapper::do_unmap_and_destroy_page(ZPage* page) const {
EventZUnmap event;
const size_t unmapped = page->size();
// Unmap and destroy
_page_allocator->unmap_page(page);
_page_allocator->destroy_page(page);
// Send event
event.commit(unmapped);
}
void ZUnmapper::unmap_and_destroy_page(ZPage* page) {
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
unmapped | ulong: bytes | Unmapped |
ShenandoahHeapRegionStateChange
Category: Java Virtual Machine / GC / Detailed
Appearing in: ShenandoahGC
Missing in: G1GC, ParallelGC, SerialGC, ZGC
Information about a Shenandoah heap region state change
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp:
void ShenandoahHeapRegion::do_uncommit() {
ShenandoahHeap* heap = ShenandoahHeap::heap();
if (!heap->is_heap_region_special() && !os::uncommit_memory((char *) bottom(), RegionSizeBytes)) {
report_java_out_of_memory("Unable to uncommit region");
}
if (!heap->uncommit_bitmap_slice(this)) {
report_java_out_of_memory("Unable to uncommit bitmaps for region");
}
heap->decrease_committed(ShenandoahHeapRegion::region_size_bytes());
}
void ShenandoahHeapRegion::set_state(RegionState to) {
EventShenandoahHeapRegionStateChange evt;
if (evt.should_commit()){
evt.set_index((unsigned) index());
evt.set_start((uintptr_t)bottom());
evt.set_used(used());
evt.set_from(_state);
evt.set_to(to);
evt.commit();
}
_state = to;
}
Configuration | enabled |
---|---|
default | false |
profiling | false |
Field | Type | Description |
---|---|---|
index | uint | Index |
from | ShenandoahHeapRegionState | From Consider contributing a description to jfreventcollector. |
to | ShenandoahHeapRegionState | To Consider contributing a description to jfreventcollector. |
start | ulong: address | Start |
used | ulong: bytes | Used |
Examples 1
from | ShenandoahHeapRegionState | Regular
|
---|---|---|
index | uint | 3
|
start | ulong: address | 30071062528
|
startTime | long: millis | 805901125
|
to | ShenandoahHeapRegionState | Collection Set
|
used | ulong: bytes | 2097152
|
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
JVM: GC: Heap
GCHeapSummary
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:
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 | 908
|
---|---|---|
heapSpace | VirtualSpace | |
committedEnd | ulong: address | 32250003456
|
committedSize | ulong: bytes | 2185232384
|
reservedEnd | ulong: address | 34359738368
|
reservedSize | ulong: bytes | 4294967296
|
start | ulong: address | 30064771072
|
heapUsed | ulong: bytes | 1529829888
|
startTime | long: millis | 847943268042
|
when | GCWhen | Before GC
|
gcId | uint | 2
|
---|---|---|
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 | 24524832
|
startTime | long: millis | 1015476542
|
when | GCWhen | After GC
|
gcId | uint | 32
|
---|---|---|
heapSpace | VirtualSpace | |
committedEnd | ulong: address | 31643926528
|
committedSize | ulong: bytes | 1579155456
|
reservedEnd | ulong: address | 34359738368
|
reservedSize | ulong: bytes | 4294967296
|
start | ulong: address | 30064771072
|
heapUsed | ulong: bytes | 385298072
|
startTime | long: millis | 19724654458
|
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:
static JfrStructMetaspaceSizes to_struct(const MetaspaceSizes& sizes) {
JfrStructMetaspaceSizes meta_sizes;
meta_sizes.set_committed(sizes.committed());
meta_sizes.set_used(sizes.used());
meta_sizes.set_reserved(sizes.reserved());
return meta_sizes;
}
void GCTracer::send_meta_space_summary_event(GCWhen::Type when, const MetaspaceSummary& meta_space_summary) const {
EventMetaspaceSummary e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_when((u1) when);
e.set_gcThreshold(meta_space_summary.capacity_until_GC());
e.set_metaspace(to_struct(meta_space_summary.meta_space()));
e.set_dataSpace(to_struct(meta_space_summary.data_space()));
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
when | GCWhen | When Consider contributing a description to jfreventcollector. |
gcThreshold | ulong: bytes | GC Threshold |
metaspace | MetaspaceSizes struct | Total Consider contributing a description to jfreventcollector. |
dataSpace | MetaspaceSizes struct | Data Consider contributing a description to jfreventcollector. |
classSpace | MetaspaceSizes struct | Class Consider contributing a description to jfreventcollector. |
Examples 3
classSpace | MetaspaceSizes | |
---|---|---|
committed | ulong: bytes | 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 | 3
|
gcThreshold | ulong: bytes | 22020096
|
metaspace | MetaspaceSizes | |
committed | ulong: bytes | 22020096
|
reserved | ulong: bytes | 1140850688
|
used | ulong: bytes | 21860024
|
startTime | long: millis | 970106000
|
when | GCWhen | Before GC
|
classSpace | MetaspaceSizes | |
---|---|---|
committed | ulong: bytes | 87556096
|
reserved | ulong: bytes | 1073741824
|
used | ulong: bytes | 86041024
|
dataSpace | MetaspaceSizes | |
committed | ulong: bytes | 553254912
|
reserved | ulong: bytes | 603979776
|
used | ulong: bytes | 551538296
|
gcId | uint | 898
|
gcThreshold | ulong: bytes | 1068040192
|
metaspace | MetaspaceSizes | |
committed | ulong: bytes | 640811008
|
reserved | ulong: bytes | 1677721600
|
used | ulong: bytes | 637579320
|
startTime | long: millis | 842437782125
|
when | GCWhen | After GC
|
classSpace | MetaspaceSizes | |
---|---|---|
committed | ulong: bytes | 2621440
|
reserved | ulong: bytes | 1073741824
|
used | ulong: bytes | 2506856
|
dataSpace | MetaspaceSizes | |
committed | ulong: bytes | 21102592
|
reserved | ulong: bytes | 67108864
|
used | ulong: bytes | 20963272
|
gcId | uint | 19
|
gcThreshold | ulong: bytes | 38338560
|
metaspace | MetaspaceSizes | |
committed | ulong: bytes | 23724032
|
reserved | ulong: bytes | 1140850688
|
used | ulong: bytes | 23470128
|
startTime | long: millis | 1820945583
|
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 | 32995540992
|
size | ulong: bytes | 67108864
|
start | ulong: address | 32928432128
|
used | ulong: bytes | 0
|
fromSpace | ObjectSpace | |
end | ulong: address | 33017561088
|
size | ulong: bytes | 11010048
|
start | ulong: address | 33006551040
|
used | ulong: bytes | 3843952
|
gcId | uint | 2
|
oldObjectSpace | ObjectSpace | |
end | ulong: address | 30244077568
|
size | ulong: bytes | 179306496
|
start | ulong: address | 30064771072
|
used | ulong: bytes | 2707584
|
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 | 970096458
|
toSpace | ObjectSpace | |
end | ulong: address | 33006551040
|
size | ulong: bytes | 11010048
|
start | ulong: address | 32995540992
|
used | ulong: bytes | 0
|
when | GCWhen | After GC
|
youngSpace | VirtualSpace | |
committedEnd | ulong: address | 33017561088
|
committedSize | ulong: bytes | 89128960
|
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_numberOfRegions(g1_heap_summary->numberOfRegions());
e.commit();
}
}
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
when | GCWhen | When Consider contributing a description to jfreventcollector. |
edenUsedSize | ulong: bytes | Eden Used Size |
edenTotalSize | ulong: bytes | Eden Total Size |
survivorUsedSize | ulong: bytes | Survivor Used Size |
numberOfRegions | uint | Number of Regions |
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 | 1
|
---|---|---|
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 | 436368083
|
when | GCWhen | After GC
|
gcId | uint | 870
|
---|---|---|
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 | 798808833042
|
when | GCWhen | After GC
|
gcId | uint | 33
|
---|---|---|
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 | 1997781417
|
when | GCWhen | Before GC
|
JVM: GC: Phases
GCPhasePause
default profiling startTime duration eventThread 11 17 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:
e.set_gcThreshold(meta_space_summary.capacity_until_GC());
e.set_metaspace(to_struct(meta_space_summary.meta_space()));
e.set_dataSpace(to_struct(meta_space_summary.data_space()));
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels for ConcurrentPhase");
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
GCPhasePauseLevel1
default profiling startTime duration eventThread 11 17 21 23 24
Category: Java Virtual Machine / GC / Phases
Appearing in: G1GC, ParallelGC, SerialGC, ShenandoahGC
Missing in: ZGC
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_metaspace(to_struct(meta_space_summary.meta_space()));
e.set_dataSpace(to_struct(meta_space_summary.data_space()));
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
GCPhasePauseLevel2
default profiling startTime duration eventThread 11 17 21 23 24
Category: Java Virtual Machine / GC / Phases
Appearing in: G1GC, ParallelGC, SerialGC
Missing in: ShenandoahGC, ZGC
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_dataSpace(to_struct(meta_space_summary.data_space()));
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
GCPhasePauseLevel3
startTime duration eventThread 11 17 21 23 24
Category: Java Virtual Machine / GC / Phases
Appearing in: G1GC, ParallelGC, SerialGC
Missing in: ShenandoahGC, ZGC
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.set_classSpace(to_struct(meta_space_summary.class_space()));
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
GCPhasePauseLevel4
startTime duration eventThread 11 17 21 23 24
Category: Java Virtual Machine / GC / Phases
Appearing in: G1GC, ParallelGC
Missing in: SerialGC, ShenandoahGC, ZGC
No additional description available. Write your own and contribute it to jfreventcollector or directly to the OpenJDK.
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/gc/shared/gcTraceSend.cpp:
e.commit();
}
}
class PhaseSender : public PhaseVisitor {
void visit_pause(GCPhase* phase) {
assert(phase->level() < PhasesStack::PHASE_LEVELS, "Need more event types for PausePhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhasePause>(phase); break;
case 1: send_phase<EventGCPhasePauseLevel1>(phase); break;
case 2: send_phase<EventGCPhasePauseLevel2>(phase); break;
case 3: send_phase<EventGCPhasePauseLevel3>(phase); break;
case 4: send_phase<EventGCPhasePauseLevel4>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
void visit_concurrent(GCPhase* phase) {
assert(phase->level() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
default: /* Ignore sending this phase */ break;
Configuration | enabled | threshold |
---|---|---|
default | false | 0 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
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:
ShenandoahWorkerSession(uint worker_id);
~ShenandoahWorkerSession();
public:
static inline uint worker_id() {
Thread* thr = Thread::current();
uint id = ShenandoahThreadLocalData::worker_id(thr);
assert(id != ShenandoahThreadLocalData::INVALID_WORKER_ID, "Worker session has not been created");
return 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() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
public:
template<typename T>
void send_phase(GCPhase* phase) {
T event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
Examples 3
GCPhaseConcurrentLevel1
default profiling startTime duration eventThread 15 17 21 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() < 2, "There is only two levels for ConcurrentPhase");
switch (phase->level()) {
case 0: send_phase<EventGCPhaseConcurrent>(phase); break;
case 1: send_phase<EventGCPhaseConcurrentLevel1>(phase); break;
default: /* Ignore sending this phase */ break;
}
}
public:
template<typename T>
void send_phase(GCPhase* phase) {
T event(UNTIMED);
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_name(phase->name());
Configuration | enabled | threshold |
---|---|---|
default | true | 0 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
name | string | Name |
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/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) {
src/hotspot/share/gc/g1/heapRegionManager.cpp:
_worker_freelists[worker].~FreeRegionList();
}
FREE_C_HEAP_ARRAY(FreeRegionList, _worker_freelists);
}
FreeRegionList* worker_freelist(uint worker) {
return &_worker_freelists[worker];
}
// Each worker creates a free list for a chunk of the heap. The chunks won't
// be overlapping so we don't need to do any claiming.
void work(uint worker_id) {
Ticks start_time = Ticks::now();
EventGCPhaseParallel event;
uint start = worker_id * _worker_chunk_size;
uint end = MIN2(start + _worker_chunk_size, _hrm->max_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/g1RemSet.cpp:
MemRegion mr(MAX2(card_start, _scanned_to), scan_end);
_scanned_to = scan_memregion(region_idx_for_card, mr);
_cards_scanned += num_cards;
}
ALWAYSINLINE void do_card_block(uint const region_idx, size_t const first_card, size_t const num_cards) {
_ct->mark_as_scanned(first_card, num_cards);
do_claimed_block(region_idx, first_card, num_cards);
_blocks_scanned++;
}
void scan_heap_roots(HeapRegion* r) {
EventGCPhaseParallel event;
uint const region_idx = r->hrm_index();
ResourceMark rm;
G1CardTableChunkClaimer claim(_scan_state, region_idx);
// Set the current scan "finger" to NULL for every heap region to scan. Since
// the claim value is monotonically increasing, the check to not scan below this
// will filter out objects spanning chunks within the region too then, as opposed
// to resetting this value for every claim.
_scanned_to = NULL;
src/hotspot/share/gc/g1/g1RemSet.cpp:
uint _worker_id;
size_t _opt_refs_scanned;
size_t _opt_refs_memory_used;
Tickspan _strong_code_root_scan_time;
Tickspan _strong_code_trim_partially_time;
Tickspan _rem_set_opt_root_scan_time;
Tickspan _rem_set_opt_trim_partially_time;
void scan_opt_rem_set_roots(HeapRegion* r) {
EventGCPhaseParallel event;
G1OopStarChunkedList* opt_rem_set_list = _pss->oops_into_optional_region(r);
G1ScanCardClosure scan_cl(G1CollectedHeap::heap(), _pss);
G1ScanRSForOptionalClosure cl(G1CollectedHeap::heap(), &scan_cl);
_opt_refs_scanned += opt_rem_set_list->oops_do(&cl, _pss->closures()->strong_oops());
_opt_refs_memory_used += opt_rem_set_list->used_memory();
event.commit(GCId::current(), _worker_id, G1GCPhaseTimes::phase_name(_scan_phase));
}
src/hotspot/share/gc/g1/g1RemSet.cpp:
_rem_set_opt_trim_partially_time() { }
bool do_heap_region(HeapRegion* r) {
uint const region_idx = r->hrm_index();
// The individual references for the optional remembered set are per-worker, so we
// always need to scan them.
if (r->has_index_in_opt_cset()) {
G1EvacPhaseWithTrimTimeTracker timer(_pss, _rem_set_opt_root_scan_time, _rem_set_opt_trim_partially_time);
scan_opt_rem_set_roots(r);
}
if (_scan_state->claim_collection_set_region(region_idx)) {
EventGCPhaseParallel event;
G1EvacPhaseWithTrimTimeTracker timer(_pss, _strong_code_root_scan_time, _strong_code_trim_partially_time);
// Scan the strong code root list attached to the current region
r->strong_code_roots_do(_pss->closures()->weak_codeblobs());
event.commit(GCId::current(), _worker_id, G1GCPhaseTimes::phase_name(_code_roots_phase));
}
return false;
}
src/hotspot/share/gc/g1/g1CollectedHeap.cpp:
_evacuation_failed = true;
}
_evacuation_failed_info_array[worker_id].register_copy_failure(obj->size());
_preserved_marks_set.get(worker_id)->push_if_necessary(obj, m);
}
bool G1ParEvacuateFollowersClosure::offer_termination() {
EventGCPhaseParallel event;
G1ParScanThreadState* const pss = par_scan_state();
start_term_time();
const bool res = terminator()->offer_termination();
end_term_time();
event.commit(GCId::current(), pss->worker_id(), G1GCPhaseTimes::phase_name(G1GCPhaseTimes::Termination));
return res;
}
void G1ParEvacuateFollowersClosure::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());
}
void G1CollectedHeap::complete_cleaning(BoolObjectClosure* is_alive,
bool class_unloading_occurred) {
src/hotspot/share/gc/g1/g1CollectedHeap.cpp:
_rs_length += r->rem_set()->occupied();
}
};
// Closure applied to all regions in the collection set.
class FreeCSetClosure : public HeapRegionClosure {
// Helper to send JFR events for regions.
class JFREventForRegion {
EventGCPhaseParallel _event;
public:
JFREventForRegion(HeapRegion* region, uint worker_id) : _event() {
_event.set_gcId(GCId::current());
_event.set_gcWorkerId(worker_id);
if (region->is_young()) {
_event.set_name(G1GCPhaseTimes::phase_name(G1GCPhaseTimes::YoungFreeCSet));
} else {
src/hotspot/share/gc/g1/g1CollectedHeap.cpp:
for (uint worker = 0; worker < _active_workers; worker++) {
_worker_stats[worker].~FreeCSetStats();
}
FREE_C_HEAP_ARRAY(FreeCSetStats, _worker_stats);
_g1h->phase_times()->record_serial_free_cset_time_ms((Ticks::now() - serial_time).seconds() * 1000.0);
}
virtual void work(uint worker_id) {
EventGCPhaseParallel event;
Ticks start = Ticks::now();
FreeCSetClosure cl(_surviving_young_words, worker_id, worker_stats(worker_id));
_g1h->collection_set_par_iterate_all(&cl, &_claimer, worker_id);
// Report the total parallel time along with some more detailed metrics.
cl.report_timing(Ticks::now() - start);
event.commit(GCId::current(), worker_id, G1GCPhaseTimes::phase_name(G1GCPhaseTimes::ParFreeCSet));
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 _must_record;
public:
G1GCParPhaseTimesTracker(G1GCPhaseTimes* phase_times, G1GCPhaseTimes::GCParPhases phase, uint worker_id, bool must_record = true);
virtual ~G1GCParPhaseTimesTracker();
};
class G1EvacPhaseTimesTracker : public G1GCParPhaseTimesTracker {
Tickspan _total_time;
Tickspan _trim_time;
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:
if (event.should_commit()) {
event.set_gcId(GCId::current());
event.set_name(_shared_gc_info.name());
event.set_cause((u2) _shared_gc_info.cause());
event.set_sumOfPauses(_shared_gc_info.sum_of_pauses());
event.set_longestPause(_shared_gc_info.longest_pause());
event.set_starttime(_shared_gc_info.start_timestamp());
event.set_endtime(_shared_gc_info.end_timestamp());
event.commit();
}
}
void GCTracer::send_reference_stats_event(ReferenceType type, size_t count) const {
EventGCReferenceStatistics e;
if (e.should_commit()) {
e.set_gcId(GCId::current());
e.set_type((u1)type);
e.set_count(count);
e.commit();
}
}
void GCTracer::send_metaspace_chunk_free_list_summary(GCWhen::Type when, Metaspace::MetadataType mdtype,
const MetaspaceChunkFreeListSummary& summary) const {
EventMetaspaceChunkFreeListSummary e;
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
gcId | uint | GC Identifier |
type | ReferenceType | Type Consider contributing a description to jfreventcollector. |
count | ulong | Total Count |
Examples 3
count | ulong | 0
|
---|---|---|
gcId | uint | 889
|
startTime | long: millis | 837020588333
|
type | ReferenceType | Soft reference
|
count | ulong | 11
|
---|---|---|
gcId | uint | 4
|
startTime | long: millis | 1119187625
|
type | ReferenceType | Weak reference
|
count | ulong | 0
|
---|---|---|
gcId | uint | 18
|
startTime | long: millis | 1807677125
|
type | ReferenceType | Weak reference
|
JVM: Profiling
OldObjectSample
cutoff default profiling startTime eventThread stackTrace 11 17 21 23 24
Category: Java Virtual Machine / Profiling
A potential memory leak
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/leakprofiler/checkpoint/eventEmitter.cpp:
if (edge == NULL) {
edge = edge_store->get(UnifiedOopRef::encode_in_native(sample->object_addr()));
} else {
gc_root_id = edge_store->gc_root_id(edge);
}
assert(edge != NULL, "invariant");
const traceid object_id = edge_store->get_id(edge);
assert(object_id != 0, "invariant");
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_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
// onto the thread local data structure of the emitter thread (for the duration
src/hotspot/share/jfr/leakprofiler/sampling/objectSampler.cpp:
if (!tl->has_thread_blob()) {
JfrCheckpointManager::create_thread_blob(thread);
}
assert(tl->has_thread_blob(), "invariant");
return tl->thread_id();
}
class RecordStackTrace {
private:
JavaThread* _jt;
bool _enabled;
public:
RecordStackTrace(JavaThread* jt) : _jt(jt),
_enabled(JfrEventSetting::has_stacktrace(EventOldObjectSample::eventId)) {
if (_enabled) {
JfrStackTraceRepository::record_for_leak_profiler(jt);
}
}
~RecordStackTrace() {
if (_enabled) {
_jt->jfr_thread_local()->clear_cached_stack_trace();
}
}
};
src/hotspot/share/jfr/jni/jfrJniMethod.cpp:
NO_TRANSITION(jlong, jfr_elapsed_counter(JNIEnv* env, jobject jvm))
return JfrTicks::now();
NO_TRANSITION_END
NO_TRANSITION(void, jfr_retransform_classes(JNIEnv* env, jobject jvm, jobjectArray classes))
JfrJvmtiAgent::retransform_classes(env, classes, JavaThread::thread_from_jni_environment(env));
NO_TRANSITION_END
NO_TRANSITION(void, jfr_set_enabled(JNIEnv* env, jobject jvm, jlong event_type_id, jboolean enabled))
JfrEventSetting::set_enabled(event_type_id, JNI_TRUE == enabled);
if (EventOldObjectSample::eventId == event_type_id) {
ThreadInVMfromNative transition(JavaThread::thread_from_jni_environment(env));
if (JNI_TRUE == enabled) {
LeakProfiler::start(JfrOptionSet::old_object_queue_size());
} else {
LeakProfiler::stop();
}
}
NO_TRANSITION_END
NO_TRANSITION(void, jfr_set_file_notification(JNIEnv* env, jobject jvm, jlong threshold))
JfrChunkRotation::set_threshold(threshold);
Configuration | cutoff | enabled | stackTrace |
---|---|---|---|
default | 0 ns | true | false |
profiling | 0 ns | true | true |
Field | Type | Description |
---|---|---|
allocationTime | Ticks | Allocation Time Consider contributing a description to jfreventcollector. |
objectAge | Tickspan 14+ | Object Age Consider contributing a description to jfreventcollector. |
lastKnownHeapUsage | ulong: bytes | Last Known Heap Usage |
object | OldObject | Object Consider contributing a description to jfreventcollector. |
arrayElements | int | Array Elements If the object is an array, the number of elements, or -1 if it is not an array |
root | OldObjectGcRoot | GC Root Consider contributing a description to jfreventcollector. |
Examples 3
allocationTime | Ticks | 900913696042
|
---|---|---|
arrayElements | int | 2717
|
lastKnownHeapUsage | ulong: bytes | 280109232
|
object | OldObject | |
address | ulong: address | 30302269048
|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1041
|
name | string | [I
|
package | Package | null
|
objectAge | Tickspan | 39951986375
|
root | OldObjectGcRoot | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 217
|
lineNumber | int | 1740
|
method | Method | |
descriptor | string | (I)V
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | initCEN
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 10
|
name | string | java/util/zip/ZipFile$Source
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/util/zip
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 940865682417
|
allocationTime | Ticks | 77603893875
|
---|---|---|
arrayElements | int | -2147483648
|
lastKnownHeapUsage | ulong: bytes | 121099168
|
object | OldObject | |
address | ulong: address | 30164644496
|
description | string | Size: 1
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/lang/ThreadLocal$ThreadLocalMap
|
package | Package | |
exported | boolean | 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 | 16463016375
|
root | OldObjectGcRoot | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 1
|
lineNumber | int | 317
|
method | Method | |
descriptor | string | (Ljava/lang/Thread;Ljava/lang/Object;)V
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | createMap
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/ThreadLocal
|
package | Package | |
exported | boolean | 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 | 94066910250
|
allocationTime | Ticks | 835370958
|
---|---|---|
arrayElements | int | 5332
|
lastKnownHeapUsage | ulong: bytes | 2698432
|
object | OldObject | |
address | ulong: address | 31501989920
|
description | string | null
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | [B
|
package | Package | null
|
objectAge | Tickspan | 98132626750
|
root | OldObjectGcRoot | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 10
|
lineNumber | int | 3863
|
method | Method | |
descriptor | string | ([BII)[B
|
hidden | boolean | false
|
modifiers | int | 10
|
name | string | copyOfRangeByte
|
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 | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 98967997708
|
ExecutionSample
default profiling startTime every chunk 11 17 21 23 24
Category: Java Virtual Machine / Profiling
Snapshot of a threads state
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
case _thread_in_native_trans:
break;
case _thread_in_native:
return true;
default:
ShouldNotReachHere();
break;
}
return false;
}
class JfrThreadSampleClosure {
public:
JfrThreadSampleClosure(EventExecutionSample* events, EventNativeMethodSample* events_native);
~JfrThreadSampleClosure() {}
EventExecutionSample* next_event() { return &_events[_added_java++]; }
EventNativeMethodSample* next_event_native() { return &_events_native[_added_native++]; }
void commit_events(JfrSampleType type);
bool do_sample_thread(JavaThread* thread, JfrStackFrame* frames, u4 max_frames, JfrSampleType type);
uint java_entries() { return _added_java; }
uint native_entries() { return _added_native; }
private:
bool sample_thread_in_java(JavaThread* thread, JfrStackFrame* frames, u4 max_frames);
bool sample_thread_in_native(JavaThread* thread, JfrStackFrame* frames, u4 max_frames);
EventExecutionSample* _events;
EventNativeMethodSample* _events_native;
Thread* _self;
uint _added_java;
uint _added_native;
};
class OSThreadSampler : public os::SuspendedThreadTask {
public:
OSThreadSampler(JavaThread* thread,
JfrThreadSampleClosure& closure,
JfrStackFrame *frames,
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
// Skip sample if we signaled a thread that moved to other state
if (!thread_state_in_java(jth)) {
return;
}
JfrGetCallTrace trace(true, jth);
frame topframe;
if (trace.get_topframe(context.ucontext(), topframe)) {
if (_stacktrace.record_thread(*jth, topframe)) {
/* If we managed to get a topframe and a stacktrace, create an event
* and put it into our array. We can't call Jfr::_stacktraces.add()
* here since it would allocate memory using malloc. Doing so while
* the stopped thread is inside malloc would deadlock. */
_success = true;
EventExecutionSample *ev = _closure.next_event();
ev->set_starttime(_suspend_time);
ev->set_endtime(_suspend_time); // fake to not take an end time
ev->set_sampledThread(JFR_THREAD_ID(jth));
ev->set_state(java_lang_Thread::get_thread_status(jth->threadObj()));
}
}
}
void OSThreadSampler::take_sample() {
run();
}
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
bool JfrThreadSampleClosure::sample_thread_in_java(JavaThread* thread, JfrStackFrame* frames, u4 max_frames) {
OSThreadSampler sampler(thread, *this, frames, max_frames);
sampler.take_sample();
/* We don't want to allocate any memory using malloc/etc while the thread
* is stopped, so everything is stored in stack allocated memory until this
* point where the thread has been resumed again, if the sampling was a success
* we need to store the stacktrace in the stacktrace repository and update
* the event with the id that was returned. */
if (!sampler.success()) {
return false;
}
EventExecutionSample *event = &_events[_added_java - 1];
traceid id = JfrStackTraceRepository::add(sampler.stacktrace());
assert(id != 0, "Stacktrace id should not be 0");
event->set_stackTrace(id);
return true;
}
bool JfrThreadSampleClosure::sample_thread_in_native(JavaThread* thread, JfrStackFrame* frames, u4 max_frames) {
JfrNativeSamplerCallback cb(*this, thread, frames, max_frames);
if (JfrOptionSet::sample_protection()) {
os::ThreadCrashProtection crash_protection;
if (!crash_protection.call(cb)) {
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
assert(_added_java > 0 && _added_java <= MAX_NR_OF_JAVA_SAMPLES, "invariant");
for (uint i = 0; i < _added_java; ++i) {
_events[i].commit();
}
} else {
assert(NATIVE_SAMPLE == type, "invariant");
assert(_added_native > 0 && _added_native <= MAX_NR_OF_NATIVE_SAMPLES, "invariant");
for (uint i = 0; i < _added_native; ++i) {
_events_native[i].commit();
}
}
}
JfrThreadSampleClosure::JfrThreadSampleClosure(EventExecutionSample* events, EventNativeMethodSample* events_native) :
_events(events),
_events_native(events_native),
_self(Thread::current()),
_added_java(0),
_added_native(0) {
}
class JfrThreadSampler : public NonJavaThread {
friend class JfrThreadSampling;
private:
Semaphore _sample;
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
last_native_ms = get_monotonic_ms();
}
}
}
void JfrThreadSampler::post_run() {
this->NonJavaThread::post_run();
delete this;
}
void JfrThreadSampler::task_stacktrace(JfrSampleType type, JavaThread** last_thread) {
ResourceMark rm;
EventExecutionSample samples[MAX_NR_OF_JAVA_SAMPLES];
EventNativeMethodSample samples_native[MAX_NR_OF_NATIVE_SAMPLES];
JfrThreadSampleClosure sample_task(samples, samples_native);
const uint sample_limit = JAVA_SAMPLE == type ? MAX_NR_OF_JAVA_SAMPLES : MAX_NR_OF_NATIVE_SAMPLES;
uint num_samples = 0;
JavaThread* start = NULL;
{
elapsedTimer sample_time;
sample_time.start();
{
src/hotspot/share/jfr/jni/jfrJniMethod.cpp:
JVM_ENTRY_NO_ENV(void, jfr_subscribe_log_level(JNIEnv* env, jobject jvm, jobject log_tag, jint id))
JfrJavaLog::subscribe_log_level(log_tag, id, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_set_output(JNIEnv* env, jobject jvm, jstring path))
JfrRepository::set_chunk_path(path, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_set_method_sampling_interval(JNIEnv* env, jobject jvm, jlong type, jlong intervalMillis))
if (intervalMillis < 0) {
intervalMillis = 0;
}
JfrEventId typed_event_id = (JfrEventId)type;
assert(EventExecutionSample::eventId == typed_event_id || EventNativeMethodSample::eventId == typed_event_id, "invariant");
if (intervalMillis > 0) {
JfrEventSetting::set_enabled(typed_event_id, true); // ensure sampling event is enabled
}
if (EventExecutionSample::eventId == type) {
JfrThreadSampling::set_java_sample_interval(intervalMillis);
} else {
JfrThreadSampling::set_native_sample_interval(intervalMillis);
}
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_store_metadata_descriptor(JNIEnv* env, jobject jvm, jbyteArray descriptor))
JfrMetadataEvent::update(descriptor);
JVM_END
// trace thread id for a thread object
Configuration | enabled | period |
---|---|---|
default | true | 20 ms |
profiling | true | 10 ms |
Field | Type | Description |
---|---|---|
sampledThread | Thread | Thread Consider contributing a description to jfreventcollector. |
stackTrace | StackTrace | Stack Trace Consider contributing a description to jfreventcollector. |
state | ThreadState | Thread State |
Examples 3
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | Executor task launch worker for task 1.0 in stage 22.0 (TID 156)
|
javaThreadId | long | 1646
|
osName | string | Executor task launch worker for task 1.0 in stage 22.0 (TID 156)
|
osThreadId | long | 138519
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 376
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljava/lang/String;ID[DII[DI)V
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | dspr
|
type | Class | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | org/netlib/blas/Dspr
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/net/URLClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/net
|
location | string | null
|
name | string | null
|
version | string | null
|
name | string | org/netlib/blas
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 801779566958
|
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 | 124
|
lineNumber | int | 619
|
method | Method | |
descriptor | string | (Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | computeIfAbsent
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/util/TreeMap
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 1617401208
|
state | ThreadState | STATE_RUNNABLE
|
sampledThread | 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
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 9
|
lineNumber | int | -1
|
method | Method | |
descriptor | string | (Ljava/lang/Object;Ljava/lang/Object;)V
|
hidden | boolean | true
|
modifiers | int | 1
|
name | string | accept
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | true
|
modifiers | int | 4144
|
name | string | java.util.stream.Collectors$$Lambda+0x0000000800252c98/415232454
|
package | Package | |
exported | boolean | 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 | 1706272833
|
state | ThreadState | STATE_RUNNABLE
|
NativeMethodSample
default profiling startTime every chunk 11 17 21 23 24
Category: Java Virtual Machine / Profiling
Snapshot of a threads state when in native
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
case _thread_in_native_trans:
break;
case _thread_in_native:
return true;
default:
ShouldNotReachHere();
break;
}
return false;
}
class JfrThreadSampleClosure {
public:
JfrThreadSampleClosure(EventExecutionSample* events, EventNativeMethodSample* events_native);
~JfrThreadSampleClosure() {}
EventExecutionSample* next_event() { return &_events[_added_java++]; }
EventNativeMethodSample* next_event_native() { return &_events_native[_added_native++]; }
void commit_events(JfrSampleType type);
bool do_sample_thread(JavaThread* thread, JfrStackFrame* frames, u4 max_frames, JfrSampleType type);
uint java_entries() { return _added_java; }
uint native_entries() { return _added_native; }
private:
bool sample_thread_in_java(JavaThread* thread, JfrStackFrame* frames, u4 max_frames);
bool sample_thread_in_native(JavaThread* thread, JfrStackFrame* frames, u4 max_frames);
EventExecutionSample* _events;
EventNativeMethodSample* _events_native;
Thread* _self;
uint _added_java;
uint _added_native;
};
class OSThreadSampler : public os::SuspendedThreadTask {
public:
OSThreadSampler(JavaThread* thread,
JfrThreadSampleClosure& closure,
JfrStackFrame *frames,
u4 max_frames) : os::SuspendedThreadTask((Thread*)thread),
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
virtual void call();
bool success() { return _success; }
JfrStackTrace& stacktrace() { return _stacktrace; }
private:
JfrThreadSampleClosure& _closure;
JavaThread* _jt;
JfrStackTrace _stacktrace;
bool _success;
};
static void write_native_event(JfrThreadSampleClosure& closure, JavaThread* jt) {
EventNativeMethodSample *ev = closure.next_event_native();
ev->set_starttime(JfrTicks::now());
ev->set_sampledThread(JFR_THREAD_ID(jt));
ev->set_state(java_lang_Thread::get_thread_status(jt->threadObj()));
}
void JfrNativeSamplerCallback::call() {
// When a thread is only attach it will be native without a last java frame
if (!_jt->has_last_Java_frame()) {
return;
}
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
bool JfrThreadSampleClosure::sample_thread_in_native(JavaThread* thread, JfrStackFrame* frames, u4 max_frames) {
JfrNativeSamplerCallback cb(*this, thread, frames, max_frames);
if (JfrOptionSet::sample_protection()) {
os::ThreadCrashProtection crash_protection;
if (!crash_protection.call(cb)) {
log_error(jfr)("Thread method sampler crashed for native");
}
} else {
cb.call();
}
if (!cb.success()) {
return false;
}
EventNativeMethodSample *event = &_events_native[_added_native - 1];
traceid id = JfrStackTraceRepository::add(cb.stacktrace());
assert(id != 0, "Stacktrace id should not be 0");
event->set_stackTrace(id);
return true;
}
static const uint MAX_NR_OF_JAVA_SAMPLES = 5;
static const uint MAX_NR_OF_NATIVE_SAMPLES = 1;
void JfrThreadSampleClosure::commit_events(JfrSampleType type) {
if (JAVA_SAMPLE == type) {
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
assert(_added_java > 0 && _added_java <= MAX_NR_OF_JAVA_SAMPLES, "invariant");
for (uint i = 0; i < _added_java; ++i) {
_events[i].commit();
}
} else {
assert(NATIVE_SAMPLE == type, "invariant");
assert(_added_native > 0 && _added_native <= MAX_NR_OF_NATIVE_SAMPLES, "invariant");
for (uint i = 0; i < _added_native; ++i) {
_events_native[i].commit();
}
}
}
JfrThreadSampleClosure::JfrThreadSampleClosure(EventExecutionSample* events, EventNativeMethodSample* events_native) :
_events(events),
_events_native(events_native),
_self(Thread::current()),
_added_java(0),
_added_native(0) {
}
class JfrThreadSampler : public NonJavaThread {
friend class JfrThreadSampling;
private:
Semaphore _sample;
src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp:
void JfrThreadSampler::post_run() {
this->NonJavaThread::post_run();
delete this;
}
void JfrThreadSampler::task_stacktrace(JfrSampleType type, JavaThread** last_thread) {
ResourceMark rm;
EventExecutionSample samples[MAX_NR_OF_JAVA_SAMPLES];
EventNativeMethodSample samples_native[MAX_NR_OF_NATIVE_SAMPLES];
JfrThreadSampleClosure sample_task(samples, samples_native);
const uint sample_limit = JAVA_SAMPLE == type ? MAX_NR_OF_JAVA_SAMPLES : MAX_NR_OF_NATIVE_SAMPLES;
uint num_samples = 0;
JavaThread* start = NULL;
{
elapsedTimer sample_time;
sample_time.start();
{
MutexLocker tlock(Threads_lock);
src/hotspot/share/jfr/jni/jfrJniMethod.cpp:
JVM_ENTRY_NO_ENV(void, jfr_subscribe_log_level(JNIEnv* env, jobject jvm, jobject log_tag, jint id))
JfrJavaLog::subscribe_log_level(log_tag, id, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_set_output(JNIEnv* env, jobject jvm, jstring path))
JfrRepository::set_chunk_path(path, thread);
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_set_method_sampling_interval(JNIEnv* env, jobject jvm, jlong type, jlong intervalMillis))
if (intervalMillis < 0) {
intervalMillis = 0;
}
JfrEventId typed_event_id = (JfrEventId)type;
assert(EventExecutionSample::eventId == typed_event_id || EventNativeMethodSample::eventId == typed_event_id, "invariant");
if (intervalMillis > 0) {
JfrEventSetting::set_enabled(typed_event_id, true); // ensure sampling event is enabled
}
if (EventExecutionSample::eventId == type) {
JfrThreadSampling::set_java_sample_interval(intervalMillis);
} else {
JfrThreadSampling::set_native_sample_interval(intervalMillis);
}
JVM_END
JVM_ENTRY_NO_ENV(void, jfr_store_metadata_descriptor(JNIEnv* env, jobject jvm, jbyteArray descriptor))
Configuration | enabled | period |
---|---|---|
default | true | 20 ms |
profiling | true | 20 ms |
Field | Type | Description |
---|---|---|
sampledThread | Thread | Thread Consider contributing a description to jfreventcollector. |
stackTrace | StackTrace | Stack Trace Consider contributing a description to jfreventcollector. |
state | ThreadState | Thread State |
Examples 3
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | 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 | (Ljava/lang/Class;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 257
|
name | string | allocateInstance
|
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 | true
|
startTime | long: millis | 1891806708
|
state | ThreadState | STATE_RUNNABLE
|
sampledThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | finagle/netty4
|
parent | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | finagle/netty4-2-16
|
javaThreadId | long | 1292
|
osName | string | finagle/netty4-2-16
|
osThreadId | long | 46627
|
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 | 794245440250
|
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 | ([BII)I
|
hidden | boolean | false
|
modifiers | int | 258
|
name | string | readBytes0
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/io/RandomAccessFile
|
package | Package | |
exported | boolean | 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 | Native
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 2394028083
|
state | ThreadState | STATE_RUNNABLE
|
JVM: Runtime
BiasedLockRevocation
default profiling startTime duration eventThread stackTrace 11 17 until JDK 18
Category: Java Virtual Machine / Runtime
Revoked bias of object
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/biasedLocking.cpp:
static void post_self_revocation_event(EventBiasedLockSelfRevocation* event, Klass* k) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_lockClass(k);
event->commit();
}
static void post_revocation_event(EventBiasedLockRevocation* event, Klass* k, RevokeOneBias* op) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(op != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_lockClass(k);
event->set_safepointId(0);
event->set_previousOwner(op->biased_locker());
event->commit();
}
static void post_class_revocation_event(EventBiasedLockClassRevocation* event, Klass* k, VM_BulkRevokeBias* op) {
src/hotspot/share/runtime/biasedLocking.cpp:
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(op != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_revokedClass(k);
event->set_disableBiasing(!op->is_bulk_rebias());
event->set_safepointId(op->safepoint_id());
event->commit();
}
BiasedLocking::Condition BiasedLocking::single_revoke_with_handshake(Handle obj, JavaThread *requester, JavaThread *biaser) {
EventBiasedLockRevocation event;
if (PrintBiasedLockingStatistics) {
Atomic::inc(handshakes_count_addr());
}
log_info(biasedlocking, handshake)("JavaThread " INTPTR_FORMAT " handshaking JavaThread "
INTPTR_FORMAT " to revoke object " INTPTR_FORMAT, p2i(requester),
p2i(biaser), p2i(obj()));
RevokeOneBias revoke(obj, requester, biaser);
bool executed = Handshake::execute_direct(&revoke, biaser);
if (revoke.status_code() == NOT_REVOKED) {
return NOT_REVOKED;
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
lockClass | Class | Lock Class Class of object whose biased lock was revoked |
safepointId | ulong | Safepoint Identifier |
previousOwner | Thread | Previous Owner Thread owning the bias before revocation |
BiasedLockSelfRevocation
default profiling startTime duration eventThread stackTrace 11 17 until JDK 18
Category: Java Virtual Machine / Runtime
Revoked bias of object biased towards own thread
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/biasedLocking.cpp:
_status_code = BiasedLocking::NOT_REVOKED;
}
BiasedLocking::Condition status_code() const {
return _status_code;
}
traceid biased_locker() const {
return _biased_locker_id;
}
};
static void post_self_revocation_event(EventBiasedLockSelfRevocation* event, Klass* k) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_lockClass(k);
event->commit();
}
static void post_revocation_event(EventBiasedLockRevocation* event, Klass* k, RevokeOneBias* op) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(op != NULL, "invariant");
src/hotspot/share/runtime/biasedLocking.cpp:
JavaThread* thread = (JavaThread*)THREAD;
markWord mark = obj->mark();
if (!mark.has_bias_pattern()) {
return;
}
Klass *k = obj->klass();
assert(mark.biased_locker() == thread &&
k->prototype_header().bias_epoch() == mark.bias_epoch(), "Revoke failed, unhandled biased lock state");
ResourceMark rm;
log_info(biasedlocking)("Revoking bias by walking my own stack:");
EventBiasedLockSelfRevocation event;
BiasedLocking::walk_stack_and_revoke(obj(), (JavaThread*) thread);
thread->set_cached_monitor_info(NULL);
assert(!obj->mark().has_bias_pattern(), "invariant");
if (event.should_commit()) {
post_self_revocation_event(&event, k);
}
}
void BiasedLocking::revoke(Handle obj, TRAPS) {
assert(!SafepointSynchronize::is_at_safepoint(), "must not be called while at safepoint");
src/hotspot/share/runtime/biasedLocking.cpp:
HeuristicsResult heuristics = update_heuristics(obj());
if (heuristics == HR_NOT_BIASED) {
return;
} else if (heuristics == HR_SINGLE_REVOKE) {
JavaThread *blt = mark.biased_locker();
assert(blt != NULL, "invariant");
if (blt == THREAD) {
// A thread is trying to revoke the bias of an object biased
// toward it, again likely due to an identity hash code
// computation. We can again avoid a safepoint/handshake in this case
// since we are only going to walk our own stack. There are no
// races with revocations occurring in other threads because we
// reach no safepoints in the revocation path.
EventBiasedLockSelfRevocation event;
ResourceMark rm;
walk_stack_and_revoke(obj(), blt);
blt->set_cached_monitor_info(NULL);
assert(!obj->mark().has_bias_pattern(), "invariant");
if (event.should_commit()) {
post_self_revocation_event(&event, obj->klass());
}
return;
} else {
BiasedLocking::Condition cond = single_revoke_with_handshake(obj, (JavaThread*)THREAD, blt);
if (cond != NOT_REVOKED) {
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
lockClass | Class | Lock Class Class of object whose biased lock was revoked |
BiasedLockClassRevocation
default profiling startTime duration eventThread stackTrace 11 17 until JDK 18
Category: Java Virtual Machine / Runtime
Revoked biases for all instances of a class
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/biasedLocking.cpp:
static void post_revocation_event(EventBiasedLockRevocation* event, Klass* k, RevokeOneBias* op) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(op != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_lockClass(k);
event->set_safepointId(0);
event->set_previousOwner(op->biased_locker());
event->commit();
}
static void post_class_revocation_event(EventBiasedLockClassRevocation* event, Klass* k, VM_BulkRevokeBias* op) {
assert(event != NULL, "invariant");
assert(k != NULL, "invariant");
assert(op != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_revokedClass(k);
event->set_disableBiasing(!op->is_bulk_rebias());
event->set_safepointId(op->safepoint_id());
event->commit();
}
src/hotspot/share/runtime/biasedLocking.cpp:
if (event.should_commit()) {
post_self_revocation_event(&event, obj->klass());
}
return;
} else {
BiasedLocking::Condition cond = single_revoke_with_handshake(obj, (JavaThread*)THREAD, blt);
if (cond != NOT_REVOKED) {
return;
}
}
} else {
assert((heuristics == HR_BULK_REVOKE) ||
(heuristics == HR_BULK_REBIAS), "?");
EventBiasedLockClassRevocation event;
VM_BulkRevokeBias bulk_revoke(&obj, (JavaThread*)THREAD,
(heuristics == HR_BULK_REBIAS));
VMThread::execute(&bulk_revoke);
if (event.should_commit()) {
post_class_revocation_event(&event, obj->klass(), &bulk_revoke);
}
return;
}
}
}
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 0 ms |
profiling | true | true | 0 ms |
Field | Type | Description |
---|---|---|
revokedClass | Class | Revoked Class Class whose biased locks were revoked |
disableBiasing | boolean | Disable Further Biasing Whether further biasing for instances of this class will be allowed |
safepointId | ulong | Safepoint Identifier |
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 != NULL; sd = sd->sender()) {
method = sd->method();
if (method != NULL && method->has_reserved_stack_access()) {
found = true;
}
}
}
}
if (found) {
activation = fr;
warning("Potentially dangerous stack overflow in "
"ReservedStackAccess annotated method %s [%d]",
method->name_and_sig_as_C_string(), count++);
EventReservedStackActivation event;
if (event.should_commit()) {
event.set_method(method);
event.commit();
}
}
if (fr.is_first_java_frame()) {
break;
} else {
fr = fr.java_sender();
}
}
Configuration | enabled | stackTrace |
---|---|---|
default | true | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
method | Method | Java Method |
SafepointBegin
default profiling startTime duration eventThread 11 17 21 23 24
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:
OrderAccess::storestore(); // storestore, global state -> local state
for (JavaThreadIteratorWithHandle jtiwh; JavaThread *cur = jtiwh.next(); ) {
// Make sure the threads start polling, it is time to yield.
SafepointMechanism::arm_local_poll(cur);
}
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:
event.set_totalThreadCount(thread_count);
event.set_jniCriticalThreadCount(critical_thread_count);
event.commit();
}
}
static void post_safepoint_cleanup_event(EventSafepointCleanup& event, uint64_t safepoint_id) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.commit();
}
}
static void post_safepoint_synchronize_event(EventSafepointStateSynchronization& event,
uint64_t safepoint_id,
int initial_number_of_threads,
int threads_waiting_to_block,
uint64_t iterations) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_initialThreadCount(initial_number_of_threads);
event.set_runningThreadCount(threads_waiting_to_block);
event.set_iterations(iterations);
event.commit();
}
src/hotspot/share/runtime/safepoint.cpp:
_current_jni_active_count = 0;
// Set number of threads to wait for
_waiting_to_block = nof_threads;
jlong safepoint_limit_time = 0;
if (SafepointTimeout) {
// Set the limit time, so that it can be compared to see if this has taken
// too long to complete.
safepoint_limit_time = SafepointTracing::start_of_safepoint() + (jlong)SafepointTimeoutDelay * (NANOUNITS / MILLIUNITS);
timeout_error_printed = false;
}
EventSafepointStateSynchronization sync_event;
int initial_running = 0;
// Arms the safepoint, _current_jni_active_count and _waiting_to_block must be set before.
arm_safepoint();
// Will spin until all threads are safe.
int iterations = synchronize_threads(safepoint_limit_time, nof_threads, &initial_running);
assert(_waiting_to_block == 0, "No thread should be running");
#ifndef PRODUCT
if (safepoint_limit_time != 0) {
Configuration | enabled | threshold |
---|---|---|
default | false | 10 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | ulong | Safepoint Identifier |
initialThreadCount | int | Initial Threads The number of threads running at the beginning of state check |
runningThreadCount | int | Running Threads The number of threads still running |
iterations | int | Iterations Number of state check iterations |
Examples 3
SafepointCleanup
startTime duration eventThread 11 17 21 until JDK 23
Category: Java Virtual Machine / Runtime / Safepoint
Safepointing begin running cleanup tasks
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/safepoint.cpp:
static void post_safepoint_begin_event(EventSafepointBegin& event,
uint64_t safepoint_id,
int thread_count,
int critical_thread_count) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_totalThreadCount(thread_count);
event.set_jniCriticalThreadCount(critical_thread_count);
event.commit();
}
}
static void post_safepoint_cleanup_event(EventSafepointCleanup& event, uint64_t safepoint_id) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.commit();
}
}
static void post_safepoint_synchronize_event(EventSafepointStateSynchronization& event,
uint64_t safepoint_id,
int initial_number_of_threads,
int threads_waiting_to_block,
uint64_t iterations) {
src/hotspot/share/runtime/safepoint.cpp:
// Update the count of active JNI critical regions
GCLocker::set_jni_lock_count(_current_jni_active_count);
post_safepoint_synchronize_event(sync_event,
_safepoint_id,
initial_running,
_waiting_to_block, iterations);
SafepointTracing::synchronized(nof_threads, initial_running, _nof_threads_hit_polling_page);
// We do the safepoint cleanup first since a GC related safepoint
// needs cleanup to be completed before running the GC op.
EventSafepointCleanup cleanup_event;
do_cleanup_tasks();
post_safepoint_cleanup_event(cleanup_event, _safepoint_id);
post_safepoint_begin_event(begin_event, _safepoint_id, nof_threads, _current_jni_active_count);
SafepointTracing::cleanup();
}
void SafepointSynchronize::disarm_safepoint() {
uint64_t active_safepoint_counter = _safepoint_counter;
{
JavaThreadIteratorWithHandle jtiwh;
Configuration | enabled | threshold |
---|---|---|
default | false | 10 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | ulong | Safepoint Identifier |
SafepointCleanupTask
startTime duration eventThread 11 17 21 until JDK 23
Category: Java Virtual Machine / Runtime / Safepoint
Safepointing begin running cleanup tasks
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/safepoint.cpp:
uint64_t safepoint_id,
int initial_number_of_threads,
int threads_waiting_to_block,
uint64_t iterations) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_initialThreadCount(initial_number_of_threads);
event.set_runningThreadCount(threads_waiting_to_block);
event.set_iterations(iterations);
event.commit();
}
}
static void post_safepoint_cleanup_task_event(EventSafepointCleanupTask& event,
uint64_t safepoint_id,
const char* name) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_name(name);
event.commit();
}
}
static void post_safepoint_end_event(EventSafepointEnd& event, uint64_t safepoint_id) {
if (event.should_commit()) {
src/hotspot/share/runtime/safepoint.cpp:
AbstractGangTask("Parallel Safepoint Cleanup"),
_subtasks(SafepointSynchronize::SAFEPOINT_CLEANUP_NUM_TASKS),
_cleanup_threads_cl(ParallelSPCleanupThreadClosure(counters)),
_num_workers(num_workers),
_counters(counters) {}
void work(uint worker_id) {
uint64_t safepoint_id = SafepointSynchronize::safepoint_id();
// All threads deflate monitors and mark nmethods (if necessary).
Threads::possibly_parallel_threads_do(true, &_cleanup_threads_cl);
if (_subtasks.try_claim_task(SafepointSynchronize::SAFEPOINT_CLEANUP_DEFLATE_MONITORS)) {
const char* name = "deflating global idle monitors";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
// AsyncDeflateIdleMonitors only uses DeflateMonitorCounters
// when a special cleanup has been requested.
// Note: This logging output will include global idle monitor
// elapsed times, but not global idle monitor deflation count.
ObjectSynchronizer::do_safepoint_work(_counters);
post_safepoint_cleanup_task_event(event, safepoint_id, name);
}
if (_subtasks.try_claim_task(SafepointSynchronize::SAFEPOINT_CLEANUP_UPDATE_INLINE_CACHES)) {
const char* name = "updating inline caches";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
InlineCacheBuffer::update_inline_caches();
post_safepoint_cleanup_task_event(event, safepoint_id, name);
}
if (_subtasks.try_claim_task(SafepointSynchronize::SAFEPOINT_CLEANUP_COMPILATION_POLICY)) {
const char* name = "compilation policy safepoint handler";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
CompilationPolicy::policy()->do_safepoint_work();
post_safepoint_cleanup_task_event(event, safepoint_id, name);
}
if (_subtasks.try_claim_task(SafepointSynchronize::SAFEPOINT_CLEANUP_SYMBOL_TABLE_REHASH)) {
if (SymbolTable::needs_rehashing()) {
const char* name = "rehashing symbol table";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
SymbolTable::rehash_table();
post_safepoint_cleanup_task_event(event, safepoint_id, name);
}
}
if (_subtasks.try_claim_task(SafepointSynchronize::SAFEPOINT_CLEANUP_STRING_TABLE_REHASH)) {
if (StringTable::needs_rehashing()) {
const char* name = "rehashing string table";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
StringTable::rehash_table();
post_safepoint_cleanup_task_event(event, safepoint_id, name);
}
}
if (_subtasks.try_claim_task(SafepointSynchronize::SAFEPOINT_CLEANUP_SYSTEM_DICTIONARY_RESIZE)) {
if (Dictionary::does_any_dictionary_needs_resizing()) {
const char* name = "resizing system dictionaries";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
ClassLoaderDataGraph::resize_dictionaries();
post_safepoint_cleanup_task_event(event, safepoint_id, name);
}
}
if (_subtasks.try_claim_task(SafepointSynchronize::SAFEPOINT_CLEANUP_REQUEST_OOPSTORAGE_CLEANUP)) {
// Don't bother reporting event or time for this very short operation.
// To have any utility we'd also want to report whether needed.
OopStorage::trigger_cleanup_if_needed();
Configuration | enabled | threshold |
---|---|---|
default | false | 10 ms |
profiling | false | 0 ms |
Field | Type | Description |
---|---|---|
safepointId | ulong | Safepoint Identifier |
name | string | Task Name The task name |
Examples 3
SafepointEnd
startTime duration eventThread 11 17 21 23 24
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:
static void post_safepoint_cleanup_task_event(EventSafepointCleanupTask& event,
uint64_t safepoint_id,
const char* name) {
if (event.should_commit()) {
event.set_safepointId(safepoint_id);
event.set_name(name);
event.commit();
}
}
static void post_safepoint_end_event(EventSafepointEnd& event, uint64_t safepoint_id) {
if (event.should_commit()) {
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
Category: Java Virtual Machine / Runtime
Execution of a VM Operation
Code Context
The event is likely defined and utilized in the following locations within the OpenJDK source code, which is licensed under the GPLv2, excluding any XML or configuration files:
src/hotspot/share/runtime/vmThread.cpp:
// otherwise we will hang, since there is no one can end the safepoint.
// Wait until VM thread is terminated
// Note: it should be OK to use Terminator_lock here. But this is called
// at a very delicate time (VM shutdown) and we are operating in non- VM
// thread at Safepoint. It's safer to not share lock with other threads.
{ 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 != NULL, "invariant");
assert(event->should_commit(), "invariant");
assert(op != NULL, "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);
}
// Mark as completed
Configuration | enabled | threshold |
---|---|---|
default | true | 10 ms |
profiling | true | 0 ms |
Field | Type | Description |
---|---|---|
operation | VMOperationType | Operation Consider contributing a description to jfreventcollector. |
safepoint | boolean | At Safepoint If the operation occured at a safepoint |
blocking | boolean | Caller Blocked If the calling thread was blocked until the operation was complete |
caller | Thread | Caller Thread requesting operation. If non-blocking, will be set to 0 indicating thread is unknown |
safepointId | ulong | Safepoint Identifier The safepoint (if any) under which this operation was completed |
Examples 3
blocking | boolean | true
|
---|---|---|
caller | Thread | |
group | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | JFR Recorder Thread
|
javaThreadId | long | 19
|
osName | string | JFR Recorder Thread
|
osThreadId | long | 27395
|
virtual | boolean | false
|
operation | VMOperationType | JFRCheckpoint
|
safepoint | boolean | true
|
safepointId | ulong | 1906
|
startTime | long: millis | 795906504917
|
blocking | boolean | true
|
---|---|---|
caller | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | ForkJoinPool.commonPool-worker-1
|
javaThreadId | long | 31
|
osName | string | ForkJoinPool.commonPool-worker-1
|
osThreadId | long | 30983
|
virtual | boolean | false
|
operation | VMOperationType | ParallelGCFailedAllocation
|
safepoint | boolean | true
|
safepointId | ulong | 44
|
startTime | long: millis | 6355090708
|
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 | 63
|
startTime | long: millis | 4626462458
|
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/jfr/recorder/repository/jfrEmergencyDump.cpp:
void transition_to_native() {
if (_jt != NULL) {
assert(_jt->thread_state() == _thread_in_vm, "invariant");
_jt->set_thread_state(_thread_in_native);
}
}
};
static void post_events(bool exception_handler, Thread* thread) {
DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(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();
}
src/hotspot/share/prims/jvm.cpp:
// java.lang.Runtime /////////////////////////////////////////////////////////////////////////
extern volatile jint vm_created;
JVM_ENTRY_NO_ENV(void, JVM_BeforeHalt())
JVMWrapper("JVM_BeforeHalt");
// Link all classes for dynamic CDS dumping before vm exit.
if (DynamicDumpSharedSpaces) {
MetaspaceShared::link_and_cleanup_shared_classes(THREAD);
}
EventShutdown event;
if (event.should_commit()) {
event.set_reason("Shutdown requested from Java");
event.commit();
}
JVM_END
JVM_ENTRY_NO_ENV(void, JVM_Halt(jint code))
before_exit(thread);
vm_exit(code);
JVM_END
src/hotspot/share/runtime/thread.cpp:
JavaThread* thread = JavaThread::current();
#ifdef ASSERT
_vm_complete = false;
#endif
// Wait until we are the last non-daemon thread to execute
{ MonitorLocker nu(Threads_lock);
while (Threads::number_of_non_daemon_threads() > 1)
// This wait should make safepoint checks, wait without a timeout,
// and wait as a suspend-equivalent condition.
nu.wait(0, Mutex::_as_suspend_equivalent_flag);
}
EventShutdown e;
if (e.should_commit()) {
e.set_reason("No remaining non-daemon Java threads");
e.commit();
}
// Hang forever on exit if we are reporting an error.
if (ShowMessageBoxOnError && VMError::is_error_reported()) {
os::infinite_sleep();
}
os::wait_for_keypress_at_exit();
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(PlaceholderTableStatistics) {
TableStatistics statistics = SystemDictionary::placeholders_statistics();
emit_table_statistics<EventPlaceholderTableStatistics>(statistics);
}
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 | 5.020691
|
bucketCountMaximum | ulong | 18
|
bucketCountStandardDeviation | float | 2.2593527
|
bucketCountVariance | float | 5.1046743
|
entryCount | ulong | 164518
|
insertionRate | float | 3.701437
|
removalRate | float | 0.9740624
|
startTime | long: millis | 98631548708
|
totalFootprint | ulong: bytes | 14301672
|
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(PlaceholderTableStatistics) {
TableStatistics statistics = SystemDictionary::placeholders_statistics();
emit_table_statistics<EventPlaceholderTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(LoaderConstraintsTableStatistics) {
TableStatistics statistics = SystemDictionary::loader_constraints_statistics();
emit_table_statistics<EventLoaderConstraintsTableStatistics>(statistics);
}
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 | 1.722702
|
bucketCountMaximum | ulong | 9
|
bucketCountStandardDeviation | float | 1.30967
|
bucketCountVariance | float | 1.7152354
|
entryCount | ulong | 112899
|
insertionRate | float | 679.15454
|
removalRate | float | 15.449375
|
startTime | long: millis | 906628285042
|
totalFootprint | ulong: bytes | 12580448
|
bucketCount | ulong | 65536
|
---|---|---|
bucketCountAverage | float | 0.54649353
|
bucketCountMaximum | ulong | 6
|
bucketCountStandardDeviation | float | 0.7300648
|
bucketCountVariance | float | 0.5329946
|
entryCount | ulong | 35815
|
insertionRate | float | 568.8381
|
removalRate | float | 34.001476
|
startTime | long: millis | 84147251708
|
totalFootprint | ulong: bytes | 3016720
|
bucketCount | ulong | 65536
|
---|---|---|
bucketCountAverage | float | 0.36930847
|
bucketCountMaximum | ulong | 6
|
bucketCountStandardDeviation | float | 0.60415214
|
bucketCountVariance | float | 0.3649998
|
entryCount | ulong | 24203
|
insertionRate | float | 85.41393
|
removalRate | float | 53.478752
|
startTime | long: millis | 67214986583
|
totalFootprint | ulong: bytes | 2736128
|
PlaceholderTableStatistics
default profiling startTime duration every chunk 17 until JDK 20
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:
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(PlaceholderTableStatistics) {
TableStatistics statistics = SystemDictionary::placeholders_statistics();
emit_table_statistics<EventPlaceholderTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(LoaderConstraintsTableStatistics) {
TableStatistics statistics = SystemDictionary::loader_constraints_statistics();
emit_table_statistics<EventLoaderConstraintsTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(ProtectionDomainCacheTableStatistics) {
TableStatistics statistics = SystemDictionary::protection_domain_cache_statistics();
emit_table_statistics<EventProtectionDomainCacheTableStatistics>(statistics);
}
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) |
LoaderConstraintsTableStatistics
default profiling startTime duration every chunk 17 until JDK 20
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:
TRACE_REQUEST_FUNC(StringTableStatistics) {
TableStatistics statistics = StringTable::get_table_statistics();
emit_table_statistics<EventStringTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(PlaceholderTableStatistics) {
TableStatistics statistics = SystemDictionary::placeholders_statistics();
emit_table_statistics<EventPlaceholderTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(LoaderConstraintsTableStatistics) {
TableStatistics statistics = SystemDictionary::loader_constraints_statistics();
emit_table_statistics<EventLoaderConstraintsTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(ProtectionDomainCacheTableStatistics) {
TableStatistics statistics = SystemDictionary::protection_domain_cache_statistics();
emit_table_statistics<EventProtectionDomainCacheTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(CompilerStatistics) {
EventCompilerStatistics event;
event.set_compileCount(CompileBroker::get_total_compile_count());
event.set_bailoutCount(CompileBroker::get_total_bailout_count());
Configuration | enabled | period |
---|---|---|
default | true | 10 s |
profiling | true | 10 s |
Field | Type | Description |
---|---|---|
bucketCount | ulong | Bucket Count |
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) |
ProtectionDomainCacheTableStatistics
default profiling startTime duration every chunk 17 until JDK 20
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:
TRACE_REQUEST_FUNC(PlaceholderTableStatistics) {
TableStatistics statistics = SystemDictionary::placeholders_statistics();
emit_table_statistics<EventPlaceholderTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(LoaderConstraintsTableStatistics) {
TableStatistics statistics = SystemDictionary::loader_constraints_statistics();
emit_table_statistics<EventLoaderConstraintsTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(ProtectionDomainCacheTableStatistics) {
TableStatistics statistics = SystemDictionary::protection_domain_cache_statistics();
emit_table_statistics<EventProtectionDomainCacheTableStatistics>(statistics);
}
TRACE_REQUEST_FUNC(CompilerStatistics) {
EventCompilerStatistics event;
event.set_compileCount(CompileBroker::get_total_compile_count());
event.set_bailoutCount(CompileBroker::get_total_bailout_count());
event.set_invalidatedCount(CompileBroker::get_total_invalidated_count());
event.set_osrCompileCount(CompileBroker::get_total_osr_compile_count());
event.set_standardCompileCount(CompileBroker::get_total_standard_compile_count());
event.set_osrBytesCompiled(CompileBroker::get_sum_osr_bytes_compiled());
event.set_standardBytesCompiled(CompileBroker::get_sum_standard_bytes_compiled());
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) |
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 jfrSamples.cpp
*/
TRACE_REQUEST_FUNC(ExecutionSample) {
}
TRACE_REQUEST_FUNC(NativeMethodSample) {
}
TRACE_REQUEST_FUNC(ThreadDump) {
ResourceMark rm;
EventThreadDump event;
event.set_result(JfrDcmdEvent::thread_dump());
event.commit();
}
static int _native_library_callback(const char* name, address base, address top, void *param) {
EventNativeLibrary event(UNTIMED);
event.set_name(name);
event.set_baseAddress((u8)base);
event.set_topAddress((u8)top);
event.set_endtime(*(JfrTicks*) param);
event.commit();
src/hotspot/share/jfr/periodic/jfrThreadDumpEvent.cpp:
Thread* THREAD = Thread::current();
assert(!HAS_PENDING_EXCEPTION, "dcmd does not expect pending exceptions on entry!");
// delegate to DCmd execution
DCmd::parse_and_execute(DCmd_Source_Internal, &st, cmd, ' ', THREAD);
if (HAS_PENDING_EXCEPTION) {
log_debug(jfr, system)("unable to create jfr event for DCMD %s", cmd);
log_debug(jfr, system)("exception type: %s", PENDING_EXCEPTION->klass()->external_name());
// don't unwind this exception
CLEAR_PENDING_EXCEPTION;
// if exception occurred,
// reset stream.
st.reset();
return false;
}
return true;
}
// caller needs ResourceMark
const char* JfrDcmdEvent::thread_dump() {
assert(EventThreadDump::is_enabled(), "invariant");
bufferedStream st;
execute_dcmd(st, "Thread.print");
return st.as_string();
}
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | 60 s |
Field | Type | Description |
---|---|---|
result | string | Thread Dump |
Examples 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
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(ExecutionSample) {
}
TRACE_REQUEST_FUNC(NativeMethodSample) {
}
TRACE_REQUEST_FUNC(ThreadDump) {
ResourceMark rm;
EventThreadDump event;
event.set_result(JfrDcmdEvent::thread_dump());
event.commit();
}
static int _native_library_callback(const char* name, address base, address top, void *param) {
EventNativeLibrary event(UNTIMED);
event.set_name(name);
event.set_baseAddress((u8)base);
event.set_topAddress((u8)top);
event.set_endtime(*(JfrTicks*) param);
event.commit();
return 0;
}
TRACE_REQUEST_FUNC(NativeLibrary) {
JfrTicks ts= JfrTicks::now();
os::get_loaded_modules_info(&_native_library_callback, (void *)&ts);
Configuration | enabled | period |
---|---|---|
default | true | everyChunk |
profiling | true | everyChunk |
Field | Type | Description |
---|---|---|
name | string | Name |
baseAddress | ulong: address | Base Address Starting address of the module |
topAddress | ulong: address | Top Address Ending address of the module |
Examples 3
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_endtime(invocation_time);
event.set_source((const ModuleEntry* const)from_module);
event.set_requiredModule(to_module);
event.commit();
}
static void write_module_export_event(const void* package, const ModuleEntry* qualified_export) {
EventModuleExport event(UNTIMED);
event.set_endtime(invocation_time);
event.set_exportedPackage((const PackageEntry*)package);
event.set_targetModule(qualified_export);
Configuration | enabled | period |
---|---|---|
default | true | endChunk |
profiling | true | endChunk |
Field | Type | Description |
---|---|---|
source | Module | Source Module |
requiredModule | Module | Required Module Consider contributing a description to jfreventcollector. |
Examples 3
requiredModule | Module | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
source | Module | |
classLoader | ClassLoader | |
name | string | platform
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 10
|
name | string | jdk/internal/loader/ClassLoaders$PlatformClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | jdk/internal/loader
|
location | string | jrt:/java.scripting
|
name | string | java.scripting
|
version | string | 22
|
startTime | long: millis | 795760285625
|
requiredModule | Module | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
source | Module | |
classLoader | ClassLoader | |
name | string | platform
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | jdk/internal/loader/ClassLoaders$PlatformClassLoader
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | jdk/internal/loader
|
location | string | jrt:/jdk.localedata
|
name | string | jdk.localedata
|
version | string | 21.0.1
|
startTime | long: millis | 16763952708
|
requiredModule | Module | |
---|---|---|
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.xml
|
name | string | java.xml
|
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.unsupported.desktop
|
name | string | jdk.unsupported.desktop
|
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:
ModuleExportClosure(const PackageEntry* pkg, EventFunc ef) : ModuleEventCallbackClosure(ef), _package(pkg) {}
void do_module(ModuleEntry* entry);
};
static void write_module_dependency_event(const void* from_module, const ModuleEntry* to_module) {
EventModuleRequire event(UNTIMED);
event.set_endtime(invocation_time);
event.set_source((const ModuleEntry* const)from_module);
event.set_requiredModule(to_module);
event.commit();
}
static void write_module_export_event(const void* package, const ModuleEntry* qualified_export) {
EventModuleExport event(UNTIMED);
event.set_endtime(invocation_time);
event.set_exportedPackage((const PackageEntry*)package);
event.set_targetModule(qualified_export);
event.commit();
}
void ModuleDependencyClosure::do_module(ModuleEntry* to_module) {
assert_locked_or_safepoint(Module_lock);
assert(to_module != NULL, "invariant");
assert(_module != NULL, "invariant");
assert(_event_func != NULL, "invariant");
Configuration | enabled | period |
---|---|---|
default | true | endChunk |
profiling | true | endChunk |
Field | Type | Description |
---|---|---|
exportedPackage | Package | Exported Package Consider contributing a description to jfreventcollector. |
targetModule | Module | Target Module Module to which the package is qualifiedly exported. If null or N/A, the package is unqualifiedly exported |
Examples 3
exportedPackage | Package | |
---|---|---|
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 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/util
|
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/math
|
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 | org/apache/hadoop/shaded/com/ctc/wstx/stax
|
startTime | long: millis | 795760593292
|
targetModule | Module | null
|
Java Application
ThreadStart
default profiling startTime eventThread stackTrace 11 17 21 23 24
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:
void JfrThreadLocal::set_thread_blob(const JfrBlobHandle& ref) {
assert(!_thread.valid(), "invariant");
_thread = ref;
}
const JfrBlobHandle& JfrThreadLocal::thread_blob() const {
return _thread;
}
static void send_java_thread_start_event(JavaThread* jt) {
EventThreadStart event;
event.set_thread(jt->jfr_thread_local()->thread_id());
event.set_parentThread(jt->jfr_thread_local()->parent_thread_id());
event.commit();
}
void JfrThreadLocal::on_start(Thread* t) {
assert(t != NULL, "invariant");
assert(Thread::current() == t, "invariant");
JfrJavaSupport::on_thread_start(t);
if (JfrRecorder::is_recording()) {
JfrCheckpointManager::write_thread_checkpoint(t);
src/hotspot/share/prims/jni.cpp:
#if INCLUDE_JNI_CHECK
if (CheckJNICalls) return jni_functions_check();
#endif // INCLUDE_JNI_CHECK
return &jni_NativeInterface;
}
// Returns the function structure
struct JNINativeInterface_* jni_functions_nocheck() {
return &jni_NativeInterface;
}
static void post_thread_start_event(const JavaThread* jt) {
assert(jt != NULL, "invariant");
EventThreadStart event;
if (event.should_commit()) {
event.set_thread(JFR_THREAD_ID(jt));
event.set_parentThread((traceid)0);
#if INCLUDE_JFR
if (EventThreadStart::is_stacktrace_enabled()) {
jt->jfr_thread_local()->set_cached_stack_trace_id((traceid)0);
event.commit();
jt->jfr_thread_local()->clear_cached_stack_trace();
} else
#endif
{
event.commit();
}
}
}
src/hotspot/share/prims/jvm.cpp:
if (native_thread->osthread() == NULL) {
// No one should hold a reference to the 'native_thread'.
native_thread->smr_delete();
if (JvmtiExport::should_post_resource_exhausted()) {
JvmtiExport::post_resource_exhausted(
JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR | JVMTI_RESOURCE_EXHAUSTED_THREADS,
os::native_thread_creation_failed_msg());
}
THROW_MSG(vmSymbols::java_lang_OutOfMemoryError(),
os::native_thread_creation_failed_msg());
}
#if INCLUDE_JFR
if (Jfr::is_recording() && EventThreadStart::is_enabled() &&
EventThreadStart::is_stacktrace_enabled()) {
JfrThreadLocal* tl = native_thread->jfr_thread_local();
// skip Thread.start() and Thread.start0()
tl->set_cached_stack_trace_id(JfrStackTraceRepository::record(thread, 2));
}
#endif
Thread::start(native_thread);
JVM_END
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 | 845394977000
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | shuffle-server-7-8
|
javaThreadId | long | 1841
|
osName | string | shuffle-server-7-8
|
osThreadId | long | 108071
|
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-4
|
javaThreadId | long | 43
|
osName | string | UCT-akka.actor.default-dispatcher-4
|
osThreadId | long | 26895
|
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 | 6847215083
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.default-dispatcher-19
|
javaThreadId | long | 63
|
osName | string | UCT-akka.actor.default-dispatcher-19
|
osThreadId | long | 38403
|
virtual | boolean | false
|
parentThread | Thread | |
---|---|---|
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.internal-dispatcher-2
|
javaThreadId | long | 48
|
osName | string | UCT-akka.actor.internal-dispatcher-2
|
osThreadId | long | 42767
|
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 | 10735603583
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.internal-dispatcher-20
|
javaThreadId | long | 95
|
osName | string | UCT-akka.actor.internal-dispatcher-20
|
osThreadId | long | 58883
|
virtual | boolean | false
|
ThreadEnd
default profiling startTime eventThread 11 17 21 23 24
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:
if (t->jfr_thread_local()->has_cached_stack_trace()) {
t->jfr_thread_local()->clear_cached_stack_trace();
}
}
static void send_java_thread_end_events(traceid id, JavaThread* jt) {
assert(jt != NULL, "invariant");
assert(Thread::current() == jt, "invariant");
assert(jt->jfr_thread_local()->trace_id() == id, "invariant");
if (JfrRecorder::is_recording()) {
EventThreadEnd event;
event.set_thread(id);
event.commit();
JfrThreadCPULoadEvent::send_event_for_thread(jt);
}
}
void JfrThreadLocal::release(Thread* t) {
if (has_java_event_writer()) {
assert(t->is_Java_thread(), "invariant");
JfrJavaSupport::destroy_global_jni_handle(java_event_writer());
_java_event_writer = NULL;
src/hotspot/share/runtime/java.cpp:
#if INCLUDE_JVMCI
JVMCI::shutdown();
#endif
// Hang forever on exit if we're reporting an error.
if (ShowMessageBoxOnError && VMError::is_error_reported()) {
os::infinite_sleep();
}
EventThreadEnd event;
if (event.should_commit()) {
event.set_thread(JFR_THREAD_ID(thread));
event.commit();
}
JFR_ONLY(Jfr::on_vm_shutdown();)
// Stop the WatcherThread. We do this before disenrolling various
// PeriodicTasks to reduce the likelihood of races.
if (PeriodicTask::num_tasks() > 0) {
WatcherThread::stop();
Configuration | enabled |
---|---|
default | true |
profiling | true |
Field | Type | Description |
---|---|---|
thread | Thread | Java Thread |
Examples 3
startTime | long: millis | 11837752292
|
---|---|---|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.default-dispatcher-10
|
javaThreadId | long | 84
|
osName | string | UCT-akka.actor.default-dispatcher-10
|
osThreadId | long | 48899
|
virtual | boolean | false
|
startTime | long: millis | 821003015542
|
---|---|---|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | block-manager-storage-async-thread-pool-45
|
javaThreadId | long | 1739
|
osName | string | block-manager-storage-async-thread-pool-45
|
osThreadId | long | 135439
|
virtual | boolean | false
|
startTime | long: millis | 17494176125
|
---|---|---|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.internal-dispatcher-4
|
javaThreadId | long | 93
|
osName | string | UCT-akka.actor.internal-dispatcher-4
|
osThreadId | long | 41991
|
virtual | boolean | false
|
ThreadSleep
default profiling startTime duration eventThread stackTrace 11 17 21 23 24
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/jvm.cpp:
// Implied else: If the JavaThread hasn't started yet, then the
// priority set in the java.lang.Thread object above will be pushed
// down when it does start.
JVM_END
JVM_ENTRY(void, JVM_Yield(JNIEnv *env, jclass threadClass))
JVMWrapper("JVM_Yield");
if (os::dont_yield()) return;
HOTSPOT_THREAD_YIELD();
os::naked_yield();
JVM_END
static void post_thread_sleep_event(EventThreadSleep* event, jlong millis) {
assert(event != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_time(millis);
event->commit();
}
JVM_ENTRY(void, JVM_Sleep(JNIEnv* env, jclass threadClass, jlong millis))
JVMWrapper("JVM_Sleep");
if (millis < 0) {
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "timeout value is negative");
}
if (thread->is_interrupted(true) && !HAS_PENDING_EXCEPTION) {
THROW_MSG(vmSymbols::java_lang_InterruptedException(), "sleep interrupted");
}
// Save current thread state and restore it at the end of this block.
// And set new thread state to SLEEPING.
JavaThreadSleepState jtss(thread);
HOTSPOT_THREAD_SLEEP_BEGIN(millis);
EventThreadSleep event;
if (millis == 0) {
os::naked_yield();
} else {
ThreadState old_state = thread->osthread()->get_state();
thread->osthread()->set_state(SLEEPING);
if (!thread->sleep(millis)) { // interrupted
// An asynchronous exception (e.g., ThreadDeathException) could have been thrown on
// us while we were sleeping. We do not overwrite those.
if (!HAS_PENDING_EXCEPTION) {
if (event.should_commit()) {
Configuration | enabled | stackTrace | threshold |
---|---|---|---|
default | true | true | 20 ms |
profiling | true | true | 10 ms |
Field | Type | Description |
---|---|---|
time | long: millis | Sleep Time |
Examples 3
stackTrace | StackTrace | |
---|---|---|
frames | StackFrame | |
bytecodeIndex | int | 5
|
lineNumber | int | 474
|
method | Method | |
descriptor | string | (Ljdk/internal/event/ThreadSleepEvent;)V
|
hidden | boolean | false
|
modifiers | int | 10
|
name | string | afterSleep
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/Thread
|
package | Package | |
exported | boolean | 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 | 8014319250
|
time | long: millis | 8000000
|
stackTrace | StackTrace | |
---|---|---|
frames | StackFrame | |
bytecodeIndex | int | 91
|
lineNumber | int | 600
|
method | Method | |
descriptor | string | ()J
|
hidden | boolean | false
|
modifiers | int | 2
|
name | string | waitForNextTick
|
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 | 18
|
name | string | io/netty/util/HashedWheelTimer$Worker
|
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 | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 794153171208
|
time | long: millis | 10000000
|
stackTrace | StackTrace | |
---|---|---|
frames | StackFrame | |
bytecodeIndex | int | 5
|
lineNumber | int | 474
|
method | Method | |
descriptor | string | (Ljdk/internal/event/ThreadSleepEvent;)V
|
hidden | boolean | false
|
modifiers | int | 10
|
name | string | afterSleep
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/Thread
|
package | Package | |
exported | boolean | 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 | 7554195792
|
time | long: millis | 8000000
|
ThreadPark
default profiling startTime duration eventThread stackTrace 11 17 21 23 24
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(jboolean, Unsafe_CompareAndSetLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) {
oop p = JNIHandles::resolve(obj);
GuardUnsafeAccess guard(thread);
if (p == NULL) {
volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset);
return RawAccess<>::atomic_cmpxchg(addr, e, x) == e;
} else {
assert_field_offset_sane(p, offset);
return HeapAccess<>::atomic_cmpxchg_at(p, (ptrdiff_t)offset, 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 != NULL, "invariant");
assert(event->should_commit(), "invariant");
event->set_parkedClass((obj != NULL) ? obj->klass() : NULL);
event->set_timeout(timeout_nanos);
event->set_until(until_epoch_millis);
event->set_address((obj != NULL) ? (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 | 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 | 4823023583
|
timeout | long: nanos | -9223372036854775808
|
until | long: epochmillis | -9223372036854775808
|
address | ulong: address | 30121432160
|
---|---|---|
parkedClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 24
|
name | string | java/util/concurrent/SynchronousQueue$Transferer
|
package | Package | |
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
|
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 | 791549616125
|
timeout | long: nanos | 59999998750
|
until | long: epochmillis | -9223372036854775808
|
address | ulong: address | 30064838920
|
---|---|---|
parkedClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
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 | 21.0.1
|
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 | 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 | 436966833
|
timeout | long: nanos | 59999997167
|
until | long: epochmillis | -9223372036854775808
|
JavaMonitorEnter
default profiling startTime duration eventThread stackTrace 11 17 21 23 24
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:
// above lost the race to async deflation. Undo the work and
// force the caller to retry.
const oop l_object = (oop)object();
if (l_object != NULL) {
// 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);
}
Self->_Stalled = 0;
add_to_contentions(-1);
return false;
}
JFR_ONLY(JfrConditionalFlushWithStacktrace<EventJavaMonitorEnter> flush(jt);)
EventJavaMonitorEnter event;
if (event.should_commit()) {
event.set_monitorClass(((oop)this->object())->klass());
event.set_address((uintptr_t)(this->object_addr()));
}
{ // Change java thread status to indicate blocked on monitor enter.
JavaThreadBlockedOnMonitorEnterState jtbmes(jt, this);
Self->set_current_pending_monitor(this);
DTRACE_MONITOR_PROBE(contended__enter, this, object(), jt);
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 = NULL;
#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(Self);
}
#endif
for (;;) {
assert(THREAD == _owner, "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 | 105553345197888
|
---|---|---|
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
|
previousOwner | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | Executor task launch worker-1
|
javaThreadId | long | 1938
|
osName | string | Executor task launch worker-1
|
osThreadId | long | 261155
|
virtual | boolean | false
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 7
|
lineNumber | int | 572
|
method | Method | |
descriptor | string | (Ljava/lang/String;Z)Ljava/lang/Class;
|
hidden | boolean | false
|
modifiers | int | 4
|
name | string | loadClass
|
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 | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 869872954083
|
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-15
|
javaThreadId | long | 67
|
osName | string | UCT-akka.actor.default-dispatcher-15
|
osThreadId | long | 39939
|
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 | 7372045125
|
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-10
|
javaThreadId | long | 52
|
osName | string | UCT-akka.actor.default-dispatcher-10
|
osThreadId | long | 41987
|
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 | 7294975750
|
JavaMonitorWait
default profiling startTime duration eventThread stackTrace 11 17 21 23 24
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:
void* cur = Atomic::load(&_owner);
if (cur == THREAD) {
return true;
}
if (THREAD->is_lock_owned((address)cur)) {
set_owner_from_BasicLock(cur, THREAD); // Convert from BasicLock* to Thread*.
_recursions = 0;
return true;
}
THROW_MSG_(vmSymbols::java_lang_IllegalMonitorStateException(),
"current thread is not owner", false);
}
static void post_monitor_wait_event(EventJavaMonitorWait* event,
ObjectMonitor* monitor,
jlong notifier_tid,
jlong timeout,
bool timedout) {
assert(event != NULL, "invariant");
assert(monitor != NULL, "invariant");
event->set_monitorClass(((oop)monitor->object())->klass());
event->set_timeout(timeout);
event->set_address((uintptr_t)monitor->object_addr());
event->set_notifier(notifier_tid);
event->set_timedOut(timedout);
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) {
Thread * const Self = THREAD;
assert(Self->is_Java_thread(), "Must be Java thread!");
JavaThread *jt = (JavaThread *)THREAD;
assert(InitDone, "Unexpectedly not initialized");
CHECK_OWNER(); // Throws IMSE if not owner.
EventJavaMonitorWait event;
// check for a pending interrupt
if (interruptible && jt->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(jt, 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 | 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
|
notifier | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.default-dispatcher-9
|
javaThreadId | long | 216
|
osName | string | UCT-akka.actor.default-dispatcher-9
|
osThreadId | long | 59151
|
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 | 19527384125
|
timedOut | boolean | false
|
timeout | long: millis | 0
|
address | ulong: address | 105553435724432
|
---|---|---|
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-36
|
javaThreadId | long | 365
|
osName | string | Thread-36
|
osThreadId | long | 58895
|
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 | 75962806250
|
timedOut | boolean | false
|
timeout | long: millis | 0
|
address | ulong: address | 105553345634640
|
---|---|---|
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-1
|
javaThreadId | long | 1938
|
osName | string | Executor task launch worker-1
|
osThreadId | long | 261155
|
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 | 880512912833
|
timedOut | boolean | false
|
timeout | long: millis | 0
|
JavaMonitorInflate
profiling startTime duration eventThread stackTrace 11 17 21 23 24
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 (log_is_enabled(Debug, monitorinflation)) {
ls = &lsh_debug;
} else if ((free_count != 0 || in_use_count != 0) &&
log_is_enabled(Info, monitorinflation)) {
ls = &lsh_info;
}
if (ls != NULL) {
ls->print_cr("om_flush: jt=" INTPTR_FORMAT ", free_count=%d"
", in_use_count=%d" ", om_free_provision=%d",
p2i(self), free_count, in_use_count, self->om_free_provision);
}
}
static void post_monitor_inflate_event(EventJavaMonitorInflate* event,
const oop obj,
ObjectSynchronizer::InflateCause cause) {
assert(event != NULL, "invariant");
assert(event->should_commit(), "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
src/hotspot/share/runtime/synchronizer.cpp:
assert(dmw.is_neutral(), "sanity check: header=" INTPTR_FORMAT, dmw.value());
return;
}
(void)inflate(Thread::current(), obj, inflate_cause_vm_internal);
}
ObjectMonitor* ObjectSynchronizer::inflate(Thread* self, oop object,
const InflateCause cause) {
// Inflate mutates the heap ...
// Relaxing assertion for bug 6320749.
assert(Universe::verify_in_progress() ||
!SafepointSynchronize::is_at_safepoint(), "invariant");
EventJavaMonitorInflate event;
for (;;) {
const markWord mark = object->mark();
assert(!mark.has_bias_pattern(), "invariant");
// The mark can be in one of the following states:
// * Inflated - just return
// * Stack-locked - coerce it to inflated
// * INFLATING - busy wait for conversion to complete
// * Neutral - aggressively inflate the object.
// * BIASED - Illegal. We should never see this
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
profiling startTime eventThread stackTrace 11 17 21 23 24
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, Thread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(obj, alloc_size, 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, Thread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(obj, alloc_size, thread);)
EventObjectAllocationInNewTLAB event;
if (event.should_commit()) {
event.set_objectClass(klass);
event.set_allocationSize(alloc_size);
event.set_tlabSize(tlab_size);
event.commit();
}
}
void AllocTracer::send_allocation_requiring_gc_event(size_t size, uint gcId) {
EventAllocationRequiringGC event;
if (event.should_commit()) {
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | true | 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 | 24
|
---|---|---|
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 | true
|
modifiers | int | 4112
|
name | string | org.apache.spark.scheduler.CompressedMapStatus$$Lambda+0x000007f8062dbc88/845984580
|
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
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 12
|
lineNumber | int | 500
|
method | Method | |
descriptor | string | (Ljava/lang/Object;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 8
|
name | string | allocateInstance
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/lang/invoke/DirectMethodHandle
|
package | Package | |
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/invoke
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 792226705417
|
tlabSize | ulong: bytes | 1014560
|
allocationSize | ulong: bytes | 64
|
---|---|---|
objectClass | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/util/LinkedHashMap
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 31
|
lineNumber | int | 1078
|
method | Method | |
descriptor | string | (I)Ljava/util/LinkedHashMap;
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | newLinkedHashMap
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/util/LinkedHashMap
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | java/util
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 547158042
|
tlabSize | ulong: bytes | 1433984
|
allocationSize | ulong: bytes | 24
|
---|---|---|
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 | 7
|
lineNumber | int | 752
|
method | 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
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 986602042
|
tlabSize | ulong: bytes | 1342200
|
ObjectAllocationOutsideTLAB
profiling 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, Thread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(obj, alloc_size, 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, Thread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(obj, alloc_size, thread);)
EventObjectAllocationInNewTLAB event;
if (event.should_commit()) {
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | true | true |
Field | Type | Description |
---|---|---|
objectClass | Class | Object Class Class of allocated object |
allocationSize | ulong: bytes | Allocation Size |
Examples 3
allocationSize | ulong: bytes | 16216
|
---|---|---|
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 | 2020423875
|
allocationSize | ulong: bytes | 1048592
|
---|---|---|
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 | 6
|
lineNumber | int | 71
|
method | Method | |
descriptor | string | (IILjava/lang/foreign/MemorySegment;)V
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/nio/HeapByteBuffer
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/nio
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 799057699208
|
allocationSize | ulong: bytes | 32
|
---|---|---|
objectClass | 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
|
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 | 16992450333
|
JavaErrorThrow
default profiling startTime duration stackTrace 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 | 'int java.lang.invoke.DirectMethodHandle$Holder.invokeVirtual(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object)'
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 7
|
lineNumber | int | 68
|
method | Method | |
descriptor | string | (Ljava/lang/String;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/Error
|
package | Package | |
exported | boolean | 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 | 4047119750
|
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 | 'void java.lang.invoke.DirectMethodHandle$Holder.invokeInterface(java.lang.Object, java.lang.Object, int)'
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 7
|
lineNumber | int | 68
|
method | Method | |
descriptor | string | (Ljava/lang/String;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/Error
|
package | Package | |
exported | boolean | 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 | true
|
startTime | long: millis | 1512076208
|
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 | static Lorg/apache/spark/sql/types/ByteType;.<clinit>()V
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 16
|
lineNumber | int | 74
|
method | Method | |
descriptor | string | (Ljava/lang/String;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/Error
|
package | Package | |
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 | Inlined
|
… | ||
truncated | boolean | true
|
startTime | long: millis | 869711334875
|
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
|
FileForce
default profiling startTime duration stackTrace 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/internal/handlers/EventHandler.java:
public boolean setRegistered(boolean registered) {
return platformEventType.setRegistered(registered);
}
public void write(long start, long duration, String host, String address, int port, long timeout, long bytesRead, boolean endOfSTream) {
throwError("SocketReadEvent");
}
public void write(long start, long duration, String host, String address, int port, long bytesWritten) {
throwError("SocketWriteEvent");
}
public void write(long start, long duration, String path, boolean metadata) {
throwError("FileForceEvent");
}
public void write(long start, long duration, String path, long bytesRead, boolean endOfFile) {
throwError("FileReadEvent");
}
public void write(long start, long duration, String path, long bytesWritten) {
throwError("FileWriteEvent");
}
public void write(long start, long duration, String path, Class<?> exceptionClass) {
src/jdk.jfr/share/classes/jdk/jfr/events/Handlers.java:
package jdk.jfr.events;
import jdk.jfr.internal.handlers.EventHandler;
import jdk.jfr.internal.Utils;
public final class Handlers {
public final static EventHandler SOCKET_READ = Utils.getHandler(SocketReadEvent.class);
public final static EventHandler SOCKET_WRITE = Utils.getHandler(SocketWriteEvent.class);
public final static EventHandler FILE_READ = Utils.getHandler(FileReadEvent.class);
public final static EventHandler FILE_WRITE = Utils.getHandler(FileWriteEvent.class);
public final static EventHandler FILE_FORCE = Utils.getHandler(FileForceEvent.class);
public final static EventHandler ERROR_THROWN = Utils.getHandler(ErrorThrownEvent.class);
public final static EventHandler EXCEPTION_THROWN = Utils.getHandler(ExceptionThrownEvent.class);
}
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.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 AbstractJDKEvent {
// The order of these fields must be the same as the parameters in
// EventHandler::write(..., 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/instrument/JDKEvents.java:
public final class JDKEvents {
private static final Class<?>[] mirrorEventClasses = {
SecurityPropertyModificationEvent.class,
TLSHandshakeEvent.class,
X509CertificateEvent.class,
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
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 stackTrace 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/internal/handlers/EventHandler.java:
public boolean isRegistered() {
return platformEventType.isRegistered();
}
public boolean setRegistered(boolean registered) {
return platformEventType.setRegistered(registered);
}
public void write(long start, long duration, String host, String address, int port, long timeout, long bytesRead, boolean endOfSTream) {
throwError("SocketReadEvent");
}
public void write(long start, long duration, String host, String address, int port, long bytesWritten) {
throwError("SocketWriteEvent");
}
public void write(long start, long duration, String path, boolean metadata) {
throwError("FileForceEvent");
}
public void write(long start, long duration, String path, long bytesRead, boolean endOfFile) {
throwError("FileReadEvent");
}
public void write(long start, long duration, String path, long bytesWritten) {
src/jdk.jfr/share/classes/jdk/jfr/events/Handlers.java:
package jdk.jfr.events;
import jdk.jfr.internal.handlers.EventHandler;
import jdk.jfr.internal.Utils;
public final class Handlers {
public final static EventHandler SOCKET_READ = Utils.getHandler(SocketReadEvent.class);
public final static EventHandler SOCKET_WRITE = Utils.getHandler(SocketWriteEvent.class);
public final static EventHandler FILE_READ = Utils.getHandler(FileReadEvent.class);
public final static EventHandler FILE_WRITE = Utils.getHandler(FileWriteEvent.class);
public final static EventHandler FILE_FORCE = Utils.getHandler(FileForceEvent.class);
public final static EventHandler ERROR_THROWN = Utils.getHandler(ErrorThrownEvent.class);
public final static EventHandler EXCEPTION_THROWN = Utils.getHandler(ExceptionThrownEvent.class);
}
src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.DataAmount;
import jdk.jfr.Name;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "SocketWrite")
@Label("Socket Write")
@Category("Java Application")
@Description("Writing data to a socket")
public final class SocketWriteEvent extends AbstractJDKEvent {
// The order of these fields must be the same as the parameters in
// EventHandler::write(..., String, String, int, long)
@Label("Remote Host")
public String host;
@Label("Remote Address")
public String address;
@Label("Remote Port")
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
private static final Class<?>[] mirrorEventClasses = {
SecurityPropertyModificationEvent.class,
TLSHandshakeEvent.class,
X509CertificateEvent.class,
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class,
jdk.internal.event.ProcessStartEvent.class,
DirectBufferStatisticsEvent.class
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
address | string | 127.0.0.1
|
---|---|---|
bytesWritten | long: bytes | 100
|
host | string | localhost
|
port | int | 56443
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 52
|
lineNumber | int | 134
|
method | Method | |
descriptor | string | (JJJLjava/net/SocketAddress;)V
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | emit
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | jdk/internal/event/SocketWriteEvent
|
package | Package | |
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/event
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | true
|
startTime | long: millis | 926933218500
|
address | string | 127.0.0.1
|
---|---|---|
bytesWritten | long: bytes | 50
|
host | string | |
port | int | 52658
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 584
|
lineNumber | int | 191
|
method | Method | |
descriptor | string | ([Ljava/nio/ByteBuffer;II)J
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | write
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | sun/nio/ch/SocketChannelImpl
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | sun/nio/ch
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | true
|
startTime | long: millis | 44014186833
|
address | string | 127.0.0.1
|
---|---|---|
bytesWritten | long: bytes | 10
|
host | string | |
port | int | 52394
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 584
|
lineNumber | int | 191
|
method | Method | |
descriptor | string | ([Ljava/nio/ByteBuffer;II)J
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | write
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | sun/nio/ch/SocketChannelImpl
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | sun/nio/ch
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 80208289458
|
JavaExceptionThrow
startTime duration stackTrace 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 | scala.collection.immutable.ArraySeq$ofUnit
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 40
|
lineNumber | int | 298
|
method | Method | |
descriptor | string | (Ljava/lang/String;Ljava/lang/Throwable;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/Throwable
|
package | Package | |
exported | boolean | 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 | 591996583
|
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.immutable.SeqOps
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 40
|
lineNumber | int | 298
|
method | Method | |
descriptor | string | (Ljava/lang/String;Ljava/lang/Throwable;)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/lang/Throwable
|
package | Package | |
exported | boolean | 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 | 659005833
|
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 | null
|
---|---|---|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 71
|
lineNumber | int | 395
|
method | Method | |
descriptor | string | (Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
|
hidden | boolean | false
|
modifiers | int | 4
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/Throwable
|
package | Package | |
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 | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 792248644333
|
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
|
FileWrite
default profiling startTime duration stackTrace 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/FileWriteEvent.java
Category: Java Application
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/handlers/EventHandler.java:
public void write(long start, long duration, String host, String address, int port, long bytesWritten) {
throwError("SocketWriteEvent");
}
public void write(long start, long duration, String path, boolean metadata) {
throwError("FileForceEvent");
}
public void write(long start, long duration, String path, long bytesRead, boolean endOfFile) {
throwError("FileReadEvent");
}
public void write(long start, long duration, String path, long bytesWritten) {
throwError("FileWriteEvent");
}
public void write(long start, long duration, String path, Class<?> exceptionClass) {
throwError("ExceptionThrownEvent or ErrorThrownEvent");
}
private void throwError(String classes) {
throw new InternalError("Method parameters don't match fields in class " + classes);
}
}
src/jdk.jfr/share/classes/jdk/jfr/events/FileWriteEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.DataAmount;
import jdk.jfr.Name;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "FileWrite")
@Label("File Write")
@Category("Java Application")
@Description("Writing data to a file")
public final class FileWriteEvent extends AbstractJDKEvent {
// The order of these fields must be the same as the parameters in
// EventHandler::write(..., String, long)
@Label("Path")
@Description("Full path of the file")
public String path;
@Label("Bytes Written")
@Description("Number of bytes written to the file")
@DataAmount
src/jdk.jfr/share/classes/jdk/jfr/events/Handlers.java:
package jdk.jfr.events;
import jdk.jfr.internal.handlers.EventHandler;
import jdk.jfr.internal.Utils;
public final class Handlers {
public final static EventHandler SOCKET_READ = Utils.getHandler(SocketReadEvent.class);
public final static EventHandler SOCKET_WRITE = Utils.getHandler(SocketWriteEvent.class);
public final static EventHandler FILE_READ = Utils.getHandler(FileReadEvent.class);
public final static EventHandler FILE_WRITE = Utils.getHandler(FileWriteEvent.class);
public final static EventHandler FILE_FORCE = Utils.getHandler(FileForceEvent.class);
public final static EventHandler ERROR_THROWN = Utils.getHandler(ErrorThrownEvent.class);
public final static EventHandler EXCEPTION_THROWN = Utils.getHandler(ExceptionThrownEvent.class);
}
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
public final class JDKEvents {
private static final Class<?>[] mirrorEventClasses = {
SecurityPropertyModificationEvent.class,
TLSHandshakeEvent.class,
X509CertificateEvent.class,
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class,
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 |
bytesWritten | long: bytes | Bytes Written Number of bytes written to the file |
Examples 3
bytesWritten | long: bytes | 8192
|
---|---|---|
path | string | harness-141003-16632656921422798882/apache-spark/log-regression/input.txt
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 678
|
lineNumber | int | 154
|
method | Method | |
descriptor | string | (Ljava/nio/ByteBuffer;)I
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | write
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | sun/nio/ch/FileChannelImpl
|
package | Package | |
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 | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 865197036833
|
bytesWritten | long: bytes | 120
|
---|---|---|
path | string | null
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 171
|
lineNumber | int | 103
|
method | Method | |
descriptor | string | ([BII)V
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | write
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/io/FileOutputStream
|
package | Package | |
exported | boolean | 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 | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 56404662458
|
bytesWritten | long: bytes | 16384
|
---|---|---|
path | string | harness-124802-11372319207631724376/apache-spark/lib/spark-sql_2.13-3.2.0.jar
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 678
|
lineNumber | int | 154
|
method | Method | |
descriptor | string | (Ljava/nio/ByteBuffer;)I
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | write
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | sun/nio/ch/FileChannelImpl
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | sun/nio/ch
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 2721627083
|
SocketRead
default profiling startTime duration stackTrace 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/handlers/EventHandler.java:
private final void readObject(ObjectInputStream in) throws IOException {
throw new IOException("Class cannot be deserialized");
}
public boolean isRegistered() {
return platformEventType.isRegistered();
}
public boolean setRegistered(boolean registered) {
return platformEventType.setRegistered(registered);
}
public void write(long start, long duration, String host, String address, int port, long timeout, long bytesRead, boolean endOfSTream) {
throwError("SocketReadEvent");
}
public void write(long start, long duration, String host, String address, int port, long bytesWritten) {
throwError("SocketWriteEvent");
}
public void write(long start, long duration, String path, boolean metadata) {
throwError("FileForceEvent");
}
public void write(long start, long duration, String path, long bytesRead, boolean endOfFile) {
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 AbstractJDKEvent {
// The order of these fields must be the same as the parameters in
// EventHandler::write(..., String, String, int, long, long, boolean)
@Label("Remote Host")
public String host;
@Label("Remote Address")
public String address;
@Label("Remote Port")
src/jdk.jfr/share/classes/jdk/jfr/events/Handlers.java:
package jdk.jfr.events;
import jdk.jfr.internal.handlers.EventHandler;
import jdk.jfr.internal.Utils;
public final class Handlers {
public final static EventHandler SOCKET_READ = Utils.getHandler(SocketReadEvent.class);
public final static EventHandler SOCKET_WRITE = Utils.getHandler(SocketWriteEvent.class);
public final static EventHandler FILE_READ = Utils.getHandler(FileReadEvent.class);
public final static EventHandler FILE_WRITE = Utils.getHandler(FileWriteEvent.class);
public final static EventHandler FILE_FORCE = Utils.getHandler(FileForceEvent.class);
public final static EventHandler ERROR_THROWN = Utils.getHandler(ErrorThrownEvent.class);
public final static EventHandler EXCEPTION_THROWN = Utils.getHandler(ExceptionThrownEvent.class);
}
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
private static final Class<?>[] mirrorEventClasses = {
SecurityPropertyModificationEvent.class,
TLSHandshakeEvent.class,
X509CertificateEvent.class,
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class,
jdk.internal.event.ProcessStartEvent.class,
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
address | string | 127.0.0.1
|
---|---|---|
bytesRead | long: bytes | 65
|
endOfStream | boolean | false
|
host | string | |
port | int | 52289
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 846
|
lineNumber | int | 72
|
method | Method | |
descriptor | string | (Ljava/nio/ByteBuffer;)I
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | read
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | sun/nio/ch/SocketChannelImpl
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | sun/nio/ch
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 36473815250
|
timeout | long: millis | 0
|
address | string | 127.0.0.1
|
---|---|---|
bytesRead | long: bytes | 26
|
endOfStream | boolean | false
|
host | string | 127.0.0.1
|
port | int | 56489
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 70
|
lineNumber | int | 142
|
method | Method | |
descriptor | string | (JJJLjava/net/SocketAddress;J)V
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | emit
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | jdk/internal/event/SocketReadEvent
|
package | Package | |
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/event
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 933488506792
|
timeout | long: millis | 0
|
address | string | 127.0.0.1
|
---|---|---|
bytesRead | long: bytes | 65
|
endOfStream | boolean | false
|
host | string | |
port | int | 52658
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 846
|
lineNumber | int | 72
|
method | Method | |
descriptor | string | (Ljava/nio/ByteBuffer;)I
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | read
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | sun/nio/ch/SocketChannelImpl
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 21.0.1
|
name | string | sun/nio/ch
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 51026146875
|
timeout | long: millis | 0
|
FileRead
default profiling startTime duration stackTrace 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/FileReadEvent.java
Category: Java Application
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/handlers/EventHandler.java:
public void write(long start, long duration, String host, String address, int port, long timeout, long bytesRead, boolean endOfSTream) {
throwError("SocketReadEvent");
}
public void write(long start, long duration, String host, String address, int port, long bytesWritten) {
throwError("SocketWriteEvent");
}
public void write(long start, long duration, String path, boolean metadata) {
throwError("FileForceEvent");
}
public void write(long start, long duration, String path, long bytesRead, boolean endOfFile) {
throwError("FileReadEvent");
}
public void write(long start, long duration, String path, long bytesWritten) {
throwError("FileWriteEvent");
}
public void write(long start, long duration, String path, Class<?> exceptionClass) {
throwError("ExceptionThrownEvent or ErrorThrownEvent");
}
private void throwError(String classes) {
src/jdk.jfr/share/classes/jdk/jfr/events/Handlers.java:
package jdk.jfr.events;
import jdk.jfr.internal.handlers.EventHandler;
import jdk.jfr.internal.Utils;
public final class Handlers {
public final static EventHandler SOCKET_READ = Utils.getHandler(SocketReadEvent.class);
public final static EventHandler SOCKET_WRITE = Utils.getHandler(SocketWriteEvent.class);
public final static EventHandler FILE_READ = Utils.getHandler(FileReadEvent.class);
public final static EventHandler FILE_WRITE = Utils.getHandler(FileWriteEvent.class);
public final static EventHandler FILE_FORCE = Utils.getHandler(FileForceEvent.class);
public final static EventHandler ERROR_THROWN = Utils.getHandler(ErrorThrownEvent.class);
public final static EventHandler EXCEPTION_THROWN = Utils.getHandler(ExceptionThrownEvent.class);
}
src/jdk.jfr/share/classes/jdk/jfr/events/FileReadEvent.java:
package jdk.jfr.events;
import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Label;
import jdk.jfr.DataAmount;
import jdk.jfr.Name;
import jdk.jfr.internal.Type;
@Name(Type.EVENT_NAME_PREFIX + "FileRead")
@Label("File Read")
@Category("Java Application")
@Description("Reading data from a file")
public final class FileReadEvent extends AbstractJDKEvent {
// The order of these fields must be the same as the parameters in
// EventHandler::write(..., String, long, boolean)
@Label("Path")
@Description("Full path of the file")
public String path;
@Label("Bytes Read")
@Description("Number of bytes read from the file (possibly 0)")
@DataAmount
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
public final class JDKEvents {
private static final Class<?>[] mirrorEventClasses = {
SecurityPropertyModificationEvent.class,
TLSHandshakeEvent.class,
X509CertificateEvent.class,
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
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 |
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
bytesRead | long: bytes | 65536
|
---|---|---|
endOfFile | boolean | false
|
path | string | [...]/code/experiments/jfreventcollector/harness-141003-16632656921422798882/apache-spark/log-regression/input.txt
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 162
|
lineNumber | int | 113
|
method | Method | |
descriptor | string | ([BII)I
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | read
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/io/FileInputStream
|
package | Package | |
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
|
type | FrameType | JIT compiled
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 871912060917
|
bytesRead | long: bytes | 4
|
---|---|---|
endOfFile | boolean | false
|
path | string | [...]/code/experiments/jfreventcollector/harness-124931-6974251686310067154/apache-spark/lib/curator-recipes-2.13.0.jar
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 114
|
lineNumber | int | 114
|
method | Method | |
descriptor | string | ([BII)I
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | read
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/io/RandomAccessFile
|
package | Package | |
exported | boolean | 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 | 30635721500
|
bytesRead | long: bytes | 4
|
---|---|---|
endOfFile | boolean | false
|
path | string | [...]/code/experiments/jfreventcollector/harness-124622-12434569844652140370/apache-spark/lib/avro-ipc-1.10.2.jar
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 114
|
lineNumber | int | 114
|
method | Method | |
descriptor | string | ([BII)I
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | read
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 33
|
name | string | java/io/RandomAccessFile
|
package | Package | |
exported | boolean | 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 | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 28227785042
|
Java Application Statistics
JavaThreadStatistics
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:
*
* 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(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(ClassLoadingStatistics) {
EventClassLoadingStatistics event;
event.set_loadedClassCount(ClassLoadingService::loaded_class_count());
event.set_unloadedClassCount(ClassLoadingService::unloaded_class_count());
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
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.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(ClassLoadingStatistics) {
EventClassLoadingStatistics event;
event.set_loadedClassCount(ClassLoadingService::loaded_class_count());
event.set_unloadedClassCount(ClassLoadingService::unloaded_class_count());
event.commit();
}
class JfrClassLoaderStatsClosure : public ClassLoaderStatsClosure {
public:
JfrClassLoaderStatsClosure() : ClassLoaderStatsClosure(NULL) {}
bool do_entry(oop const& key, ClassLoaderStats const& cls) {
const ClassLoaderData* this_cld = cls._class_loader != NULL ?
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:
event.set_unloadedClassCount(ClassLoadingService::unloaded_class_count());
event.commit();
}
class JfrClassLoaderStatsClosure : public ClassLoaderStatsClosure {
public:
JfrClassLoaderStatsClosure() : ClassLoaderStatsClosure(NULL) {}
bool do_entry(oop const& key, ClassLoaderStats const& cls) {
const ClassLoaderData* this_cld = cls._class_loader != NULL ?
java_lang_ClassLoader::loader_data_acquire(cls._class_loader) : NULL;
const ClassLoaderData* parent_cld = cls._parent != NULL ?
java_lang_ClassLoader::loader_data_acquire(cls._parent) : NULL;
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 | 7672
|
---|---|---|
chunkSize | ulong: bytes | 9216
|
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 | 105553268133792
|
hiddenBlockSize | ulong: bytes | 0
|
hiddenChunkSize | ulong: bytes | 0
|
hiddenClassCount | long | 0
|
parentClassLoader | ClassLoader | null
|
startTime | long: millis | 791772644833
|
blockSize | ulong: bytes | 17920976
|
---|---|---|
chunkSize | ulong: bytes | 18277376
|
classCount | long | 2538
|
classLoader | ClassLoader | null
|
classLoaderData | ulong: address | 105553176969696
|
hiddenBlockSize | ulong: bytes | 267936
|
hiddenChunkSize | ulong: bytes | 445440
|
hiddenClassCount | long | 145
|
parentClassLoader | ClassLoader | null
|
startTime | long: millis | 30201830167
|
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
|
ThreadAllocationStatistics
default profiling startTime 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:
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 != NULL, "invariant");
allocated.append(jt->cooked_allocated_bytes());
thread_ids.append(JFR_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_endtime(time_stamp);
event.commit();
}
}
/**
* PhysicalMemory event represents:
*
* @totalSize == The amount of physical memory (hw) installed and reported by the OS, in bytes.
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 | 51937792
|
---|---|---|
startTime | long: millis | 16763680292
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | UCT-akka.actor.default-dispatcher-7
|
javaThreadId | long | 148
|
osName | string | UCT-akka.actor.default-dispatcher-7
|
osThreadId | long | 58891
|
virtual | boolean | false
|
allocated | ulong: bytes | 661688
|
---|---|---|
startTime | long: millis | 791772808042
|
thread | Thread | |
group | ThreadGroup | |
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | dispatcher-event-loop-4
|
javaThreadId | long | 1601
|
osName | string | dispatcher-event-loop-4
|
osThreadId | long | 145443
|
virtual | boolean | false
|
allocated | ulong: bytes | 105279504
|
---|---|---|
startTime | long: millis | 14906032000
|
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 | 91
|
osName | string | UCT-akka.actor.internal-dispatcher-2
|
osThreadId | long | 40455
|
virtual | boolean | false
|
ExceptionStatistics
default profiling startTime duration stackTrace 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.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")
@StackTrace(false)
public final class ExceptionStatisticsEvent extends AbstractJDKEvent {
@Label("Exceptions Created")
public long throwables;
}
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
TLSHandshakeEvent.class,
X509CertificateEvent.class,
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class,
jdk.internal.event.ProcessStartEvent.class,
DirectBufferStatisticsEvent.class
};
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
private static boolean initializationTriggered;
@SuppressWarnings("unchecked")
public synchronized static void initialize() {
try {
if (initializationTriggered == false) {
for (Class<?> mirrorEventClass : mirrorEventClasses) {
SecuritySupport.registerMirror(((Class<? extends Event>)mirrorEventClass));
}
for (Class<?> eventClass : eventClasses) {
SecuritySupport.registerEvent((Class<? extends Event>) eventClass);
}
initializationTriggered = true;
RequestEngine.addTrustedJDKHook(ExceptionStatisticsEvent.class, emitExceptionStatistics);
RequestEngine.addTrustedJDKHook(DirectBufferStatisticsEvent.class, emitDirectBufferStatistics);
}
} catch (Exception e) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());
}
}
public static void addInstrumentation() {
try {
List<Class<?>> list = new ArrayList<>();
for (int i = 0; i < instrumentationClasses.length; i++) {
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
list.add(java.lang.Throwable.class);
list.add(java.lang.Error.class);
Logger.log(LogTag.JFR_SYSTEM, LogLevel.INFO, "Retransformed JDK classes");
jvm.retransformClasses(list.toArray(new Class<?>[list.size()]));
} catch (IllegalStateException ise) {
throw ise;
} catch (Exception e) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not add instrumentation for JDK events. " + e.getMessage());
}
}
private static void emitExceptionStatistics() {
ExceptionStatisticsEvent t = new ExceptionStatisticsEvent();
t.throwables = ThrowableTracer.numThrowables();
t.commit();
}
@SuppressWarnings("deprecation")
public static byte[] retransformCallback(Class<?> klass, byte[] oldBytes) throws Throwable {
if (java.lang.Throwable.class == klass) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.TRACE, "Instrumenting java.lang.Throwable");
return ConstructorTracerWriter.generateBytes(java.lang.Throwable.class, oldBytes);
}
Configuration | enabled | period |
---|---|---|
default | true | 1000 ms |
profiling | true | 1000 ms |
Field | Type | Description |
---|---|---|
throwables | long | Exceptions Created |
Examples 3
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/instrument/JDKEvents.java:
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
ActiveSettingEvent.class,
ActiveRecordingEvent.class,
jdk.internal.event.SecurityPropertyModificationEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
jdk.internal.event.X509ValidationEvent.class,
jdk.internal.event.ProcessStartEvent.class,
DirectBufferStatisticsEvent.class
};
// This is a list of the classes with instrumentation code that should be applied.
private static final Class<?>[] instrumentationClasses = new Class<?>[] {
FileInputStreamInstrumentor.class,
FileOutputStreamInstrumentor.class,
RandomAccessFileInstrumentor.class,
FileChannelImplInstrumentor.class,
SocketInputStreamInstrumentor.class,
SocketOutputStreamInstrumentor.class,
SocketChannelImplInstrumentor.class
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
@SuppressWarnings("unchecked")
public synchronized static void initialize() {
try {
if (initializationTriggered == false) {
for (Class<?> mirrorEventClass : mirrorEventClasses) {
SecuritySupport.registerMirror(((Class<? extends Event>)mirrorEventClass));
}
for (Class<?> eventClass : eventClasses) {
SecuritySupport.registerEvent((Class<? extends Event>) eventClass);
}
initializationTriggered = true;
RequestEngine.addTrustedJDKHook(ExceptionStatisticsEvent.class, emitExceptionStatistics);
RequestEngine.addTrustedJDKHook(DirectBufferStatisticsEvent.class, emitDirectBufferStatistics);
}
} catch (Exception e) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());
}
}
public static void addInstrumentation() {
try {
List<Class<?>> list = new ArrayList<>();
for (int i = 0; i < instrumentationClasses.length; i++) {
JIInstrumentationTarget tgt = instrumentationClasses[i].getAnnotation(JIInstrumentationTarget.class);
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
for (int i = 0; i < targetClasses.length; i++) {
if (targetClasses[i].equals(klass)) {
Class<?> c = instrumentationClasses[i];
if (Logger.shouldLog(LogTag.JFR_SYSTEM, LogLevel.TRACE)) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.TRACE, "Processing instrumentation class: " + c);
}
return new JIClassInstrumentation(instrumentationClasses[i], klass, oldBytes).getNewBytes();
}
}
return oldBytes;
}
public static void remove() {
RequestEngine.removeHook(JDKEvents::emitExceptionStatistics);
RequestEngine.removeHook(emitDirectBufferStatistics);
}
private static void emitDirectBufferStatistics() {
DirectBufferStatisticsEvent e = new DirectBufferStatisticsEvent();
e.commit();
}
}
Configuration | enabled | period |
---|---|---|
default | true | 5 s |
profiling | true | 5 s |
Examples 3
stackTrace | StackTrace | null
|
---|---|---|
startTime | long: millis | 27323890208
|
stackTrace | StackTrace | null
|
---|---|---|
startTime | long: millis | 93418778375
|
Java Development Kit
X509Certificate
startTime duration stackTrace 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;
@Category({"Java Development Kit", "Security"})
@Label("X509 Certificate")
@Name("jdk.X509Certificate")
@Description("Details of X.509 Certificate parsed by JDK")
@MirrorEvent(className = "jdk.internal.event.X509CertificateEvent")
public final class X509CertificateEvent extends AbstractJDKEvent {
@Label("Signature Algorithm")
public String algorithm;
@Label("Serial Number")
public String serialNumber;
@Label("Subject")
public String subject;
@Label("Issuer")
public String issuer;
@Label("Key Type")
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
public final class JDKEvents {
private static final Class<?>[] mirrorEventClasses = {
SecurityPropertyModificationEvent.class,
TLSHandshakeEvent.class,
X509CertificateEvent.class,
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
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 {
public String algorithm;
public String serialNumber;
public String subject;
public String issuer;
public String keyType;
public int keyLength;
public long certificateId;
public long validFrom;
public long validUntil;
}
src/java.base/share/classes/sun/security/provider/X509Factory.java:
length = (highByte << 24 ) | (nextByte << 16) |
(midByte << 8) | lowByte;
} else { // ignore longer length forms
throw new IOException("Invalid BER/DER data (too huge?)");
}
if (readFully(is, bout, length) != length) {
throw new IOException("Incomplete BER/DER data");
}
}
return tag;
}
private void commitEvent(X509CertImpl info) {
X509CertificateEvent xce = new X509CertificateEvent();
if (xce.shouldCommit() || EventHelper.isLoggingSecurity()) {
PublicKey pKey = info.getPublicKey();
String algId = info.getSigAlgName();
String serNum = info.getSerialNumber().toString(16);
String subject = info.getSubjectDN().getName();
String issuer = info.getIssuerDN().getName();
String keyType = pKey.getAlgorithm();
int length = KeyUtil.getKeySize(pKey);
int hashCode = info.hashCode();
long beginDate = info.getNotBefore().getTime();
long endDate = info.getNotAfter().getTime();
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 | long: certificateId | Certificate Id |
validFrom | long: epochmillis | Valid From |
validUntil | long: epochmillis | Valid Until |
Examples 1
algorithm | string | SHA1withDSA
|
---|---|---|
certificateId | long: 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
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 187
|
lineNumber | int | 127
|
method | Method | |
descriptor | string | (Ljava/security/cert/Certificate;)V
|
hidden | boolean | false
|
modifiers | int | 9
|
name | string | tryCommitCertEvent
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 17
|
name | string | sun/security/jca/JCAUtil
|
package | Package | |
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/security/jca
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 868429966042
|
subject | string | CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
|
validFrom | long: epochmillis | 1175461745000
|
validUntil | long: epochmillis | 4329061745000
|
TLSHandshake
startTime duration stackTrace 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java
Category: Java Development Kit / Security
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:
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;
@Category({"Java Development Kit", "Security"})
@Label("TLS Handshake")
@Name("jdk.TLSHandshake")
@Description("Parameters used in TLS Handshake")
@MirrorEvent(className = "jdk.internal.event.TLSHandshakeEvent")
public final class TLSHandshakeEvent extends AbstractJDKEvent {
@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/instrument/JDKEvents.java:
public final class JDKEvents {
private static final Class<?>[] mirrorEventClasses = {
SecurityPropertyModificationEvent.class,
TLSHandshakeEvent.class,
X509CertificateEvent.class,
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.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 peerCertificateId = 0;
try {
// use hash code for Id
peerCertificateId = session
.getCertificateChain()[0]
.hashCode();
} catch (SSLPeerUnverifiedException e) {
// not verified msg
}
if (event.shouldCommit()) {
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 | long: certificateId | Certificate Id Peer Certificate Id |
X509Validation
startTime duration stackTrace 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;
@Category({"Java Development Kit", "Security"})
@Label("X509 Validation")
@Name("jdk.X509Validation")
@Description("Serial numbers from X.509 Certificates forming chain of trust")
@MirrorEvent(className = "jdk.internal.event.X509ValidationEvent")
public final class X509ValidationEvent extends AbstractJDKEvent {
@CertificateId
@Label("Certificate Id")
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/instrument/JDKEvents.java:
public final class JDKEvents {
private static final Class<?>[] mirrorEventClasses = {
SecurityPropertyModificationEvent.class,
TLSHandshakeEvent.class,
X509CertificateEvent.class,
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
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;
}
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()) {
int[] certIds = params.certificates().stream()
.mapToInt(x -> x.hashCode())
.toArray();
int anchorCertId =
anchor.getTrustedCert().hashCode();
if (xve.shouldCommit()) {
xve.certificateId = anchorCertId;
int certificatePos = 1; //anchor cert
xve.certificatePosition = certificatePos;
xve.validationCounter = validationCounter.incrementAndGet();
Configuration | enabled | stackTrace |
---|---|---|
default | false | true |
profiling | false | true |
Field | Type | Description |
---|---|---|
certificateId | long: certificateId | Certificate Id |
certificatePosition | int | Certificate Position Certificate position in chain of trust, 1 = trust anchor |
validationCounter | long | Validation Counter |
SecurityPropertyModification
startTime duration stackTrace 11 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java
Category: Java Development Kit / Security
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/events/SecurityPropertyModificationEvent.java:
package jdk.jfr.events;
import jdk.jfr.*;
import jdk.jfr.internal.MirrorEvent;
@Category({"Java Development Kit", "Security"})
@Label("Security Property Modification")
@Name("jdk.SecurityPropertyModification")
@Description("Modification of Security property")
@MirrorEvent(className = "jdk.internal.event.SecurityPropertyModificationEvent")
public final class SecurityPropertyModificationEvent extends AbstractJDKEvent {
@Label("Key")
public String key;
@Label("Value")
public String value;
}
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
public final class JDKEvents {
private static final Class<?>[] mirrorEventClasses = {
SecurityPropertyModificationEvent.class,
TLSHandshakeEvent.class,
X509CertificateEvent.class,
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
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;
}
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 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);
}
}
/*
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. |
Operating System
OSInformation
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:
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_name = NEW_RESOURCE_ARRAY(char, 2048);
JfrOSInterface::os_version(&os_name);
EventOSInformation event;
event.set_osVersion(os_name);
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
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.commit();
}
TRACE_REQUEST_FUNC(OSInformation) {
ResourceMark rm;
char* os_name = NEW_RESOURCE_ARRAY(char, 2048);
JfrOSInterface::os_version(&os_name);
EventOSInformation event;
event.set_osVersion(os_name);
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
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/jfrOSInterface.cpp:
} else if (vrt == PowerFullPartitionMode) {
return "Power full partition";
}
return "No virtualization detected";
}
int JfrOSInterface::generate_initial_environment_variable_events() {
if (environ == NULL) {
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 = environ; *p != NULL; p++) {
char* variable = *p;
char* equal_sign = strchr(variable, '=');
if (equal_sign != NULL) {
// 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_endtime(time_stamp);
event.set_key(key);
event.set_value(value);
event.commit();
}
}
}
return OS_OK;
}
int JfrOSInterface::system_processes(SystemProcess** sys_processes, int* no_of_sys_processes) {
Configuration | enabled | period |
---|---|---|
default | true | beginChunk |
profiling | true | beginChunk |
Field | Type | Description |
---|---|---|
key | string | Key |
value | string | Value |
Examples 3
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 != NULL) {
SystemProcess* tmp = processes;
const char* info = processes->command_line();
if (info == NULL) {
info = processes->path();
}
if (info == NULL) {
info = processes->name();
}
if (info == NULL) {
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
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(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
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.commit();
}
}
TRACE_REQUEST_FUNC(ThreadCPULoad) {
JfrThreadCPULoadEvent::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 = NULL;
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
OS CPU Load
Code Context
The event is likely defined and utilized 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*)Thread::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 | 2.3451833E-4
|
---|---|---|
jvmUser | float: percentage | 0.004804558
|
machineTotal | float: percentage | 0.90932983
|
startTime | long: millis | 58103833292
|
jvmSystem | float: percentage | 6.5429875E-4
|
---|---|---|
jvmUser | float: percentage | 0.0038061142
|
machineTotal | float: percentage | 0.9950434
|
startTime | long: millis | 902927711208
|
jvmSystem | float: percentage | 3.0066687E-4
|
---|---|---|
jvmUser | float: percentage | 0.0043566697
|
machineTotal | float: percentage | 0.89692307
|
startTime | long: millis | 11595033667
|
ThreadCPULoad
default profiling startTime duration eventThread 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/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:
Thread* periodic_thread = Thread::current();
JfrThreadLocal* const periodic_thread_tl = periodic_thread->jfr_thread_local();
traceid periodic_thread_id = periodic_thread_tl->thread_id();
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 != NULL, "invariant");
++number_of_threads;
EventThreadCPULoad event(UNTIMED);
if (JfrThreadCPULoadEvent::update_event(event, jt, cur_wallclock_time, processor_count)) {
event.set_starttime(event_time);
if (jt != periodic_thread) {
// Commit reads the thread id from this thread's trace data, so put it there temporarily
periodic_thread_tl->set_thread_id(JFR_THREAD_ID(jt));
} else {
periodic_thread_tl->set_thread_id(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());
// Restore this thread's thread id
periodic_thread_tl->set_thread_id(periodic_thread_id);
}
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/allocation.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 | 845382183417
|
---|---|---|
system | float: percentage | 1.4312403E-5
|
user | float: percentage | 1.1620784E-4
|
startTime | long: millis | 10643453375
|
---|---|---|
system | float: percentage | 0.0011874962
|
user | float: percentage | 0.011394605
|
startTime | long: millis | 11595339875
|
---|---|---|
system | float: percentage | 3.588174E-4
|
user | float: percentage | 0.006239521
|
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*)Thread::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 != NULL) { \
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();
const JfrTickspan interval = last_sample_instant == 0 ? cur_time - cur_time : cur_time - last_sample_instant;
last_sample_instant = cur_time;
for (NetworkInterface *cur = network_interfaces; cur != NULL; cur = cur->next()) {
InterfaceEntry& entry = get_entry(cur);
if (interval.value() > 0) {
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 | lo0
|
---|---|---|
readRate | long: bits-per-second | 34336304
|
startTime | long: millis | 50339440667
|
writeRate | long: bits-per-second | 34336304
|
networkInterface | NetworkInterfaceName | lo0
|
---|---|---|
readRate | long: bits-per-second | 8088
|
startTime | long: millis | 916746363833
|
writeRate | long: bits-per-second | 8088
|
networkInterface | NetworkInterfaceName | ap1
|
---|---|---|
readRate | long: bits-per-second | 0
|
startTime | long: millis | 84103802000
|
writeRate | long: bits-per-second | 1624
|
PhysicalMemory
default profiling startTime duration every chunk 11 17 21 23 24
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(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 | 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
ProcessStart
default profiling startTime duration stackTrace 15 17 21 23 24
Source src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java
Category: Operating System
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/events/ProcessStartEvent.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;
@Category({"Operating System"})
@Label("Process Start")
@Name("jdk.ProcessStart")
@Description("Operating system process started")
@MirrorEvent(className = "jdk.internal.event.ProcessStartEvent")
public final class ProcessStartEvent extends AbstractJDKEvent {
@Label("Process Id")
public long pid;
@Label("Directory")
public String directory;
@Label("Command")
public String command;
}
src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java:
public final class JDKEvents {
private static final Class<?>[] mirrorEventClasses = {
SecurityPropertyModificationEvent.class,
TLSHandshakeEvent.class,
X509CertificateEvent.class,
X509ValidationEvent.class,
ProcessStartEvent.class
};
private static final Class<?>[] eventClasses = {
FileForceEvent.class,
FileReadEvent.class,
FileWriteEvent.class,
SocketReadEvent.class,
SocketWriteEvent.class,
ExceptionThrownEvent.class,
ExceptionStatisticsEvent.class,
ErrorThrownEvent.class,
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 (int i = 1; i < cmdarray.length; i++) {
if (cmdarray[i].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()) {
StringJoiner command = new StringJoiner(" ");
for (String s: cmdarray) {
command.add(s);
}
event.directory = dir;
event.command = command.toString();
event.pid = process.pid();
event.commit();
}
return process;
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
command | string | rm -rf [...]/code/experiments/jfreventcollector/harness-141003-16632656921422798882/apache-spark/gauss-mix/spark-f58721a2-6206-4716-9555-5f0b2c966476/userFiles-4cfe32a7-54fe-452e-9cac-9aa1f4911677
|
---|---|---|
directory | string | null
|
pid | long | 57856
|
stackTrace | StackTrace | |
frames | StackFrame | |
bytecodeIndex | int | 54
|
lineNumber | int | 161
|
method | Method | |
descriptor | string | (Ljava/io/File;)V
|
hidden | boolean | false
|
modifiers | int | 10
|
name | string | deleteRecursivelyUsingUnixNative
|
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/network/util/JavaUtils
|
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/network/util
|
type | FrameType | Interpreted
|
… | ||
truncated | boolean | false
|
startTime | long: millis | 894828634292
|
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 |
Examples 3
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 |
Examples 3
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: bytes | Region Refills Total memory wasted at the end of regions due to refill |
directAllocated | ulong: bytes | Allocated (direct) Total memory allocated using direct allocation outside of PLABs |
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
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. |
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 | 30164644496
|
---|---|---|
description | string | Size: 1
|
referrer | Reference | null
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 32
|
name | string | java/lang/ThreadLocal$ThreadLocalMap
|
package | Package | |
exported | boolean | 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
|
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 | 71
|
---|---|---|
lineNumber | int | 395
|
method | Method | |
descriptor | string | (Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
|
hidden | boolean | false
|
modifiers | int | 4
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/Throwable
|
package | Package | |
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 | JIT compiled
|
bytecodeIndex | int | 6
|
---|---|---|
lineNumber | int | 71
|
method | Method | |
descriptor | string | (IILjava/lang/foreign/MemorySegment;)V
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/nio/HeapByteBuffer
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/nio
|
type | FrameType | Inlined
|
bytecodeIndex | int | 12
|
---|---|---|
lineNumber | int | 500
|
method | Method | |
descriptor | string | (Ljava/lang/Object;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 8
|
name | string | allocateInstance
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/lang/invoke/DirectMethodHandle
|
package | Package | |
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/invoke
|
type | FrameType | Inlined
|
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 |
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 |
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 |
Examples 3
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
millis
Annotation: jdk.jfr.Timespan(MILLISECONDS)
nanos
Annotation: jdk.jfr.Timespan(NANOSECONDS)
percentage
tickspan
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 |
Examples 3
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
|
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/String;Ljava/lang/Throwable;ZZ)V
|
---|---|---|
hidden | boolean | false
|
modifiers | int | 4
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/Throwable
|
package | Package | |
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
|
descriptor | string | (Ljava/lang/Object;)Ljava/lang/Object;
|
---|---|---|
hidden | boolean | false
|
modifiers | int | 8
|
name | string | allocateInstance
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/lang/invoke/DirectMethodHandle
|
package | Package | |
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/invoke
|
descriptor | string | (IILjava/lang/foreign/MemorySegment;)V
|
---|---|---|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/nio/HeapByteBuffer
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/nio
|
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 | 71
|
lineNumber | int | 395
|
method | Method | |
descriptor | string | (Ljava/lang/String;Ljava/lang/Throwable;ZZ)V
|
hidden | boolean | false
|
modifiers | int | 4
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 1
|
name | string | java/lang/Throwable
|
package | Package | |
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 | JIT compiled
|
… | ||
truncated | boolean | false
|
frames | StackFrame | |
---|---|---|
bytecodeIndex | int | 6
|
lineNumber | int | 71
|
method | Method | |
descriptor | string | (IILjava/lang/foreign/MemorySegment;)V
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | <init>
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/nio/HeapByteBuffer
|
package | Package | |
exported | boolean | true
|
module | Module | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
location | string | jrt:/java.base
|
name | string | java.base
|
version | string | 22
|
name | string | java/nio
|
type | FrameType | Inlined
|
… | ||
truncated | boolean | false
|
frames | StackFrame | |
---|---|---|
bytecodeIndex | int | 12
|
lineNumber | int | 500
|
method | Method | |
descriptor | string | (Ljava/lang/Object;)Ljava/lang/Object;
|
hidden | boolean | false
|
modifiers | int | 8
|
name | string | allocateInstance
|
type | Class | |
classLoader | ClassLoader | |
name | string | bootstrap
|
type | Class | null
|
hidden | boolean | false
|
modifiers | int | 0
|
name | string | java/lang/invoke/DirectMethodHandle
|
package | Package | |
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/invoke
|
type | FrameType | Inlined
|
… | ||
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 | dispatcher-event-loop-4
|
javaThreadId | long | 1601
|
osName | string | dispatcher-event-loop-4
|
osThreadId | long | 145443
|
virtual | boolean | false
|
group | ThreadGroup | |
---|---|---|
name | string | main
|
parent | ThreadGroup | |
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | shuffle-server-7-8
|
javaThreadId | long | 1841
|
osName | string | shuffle-server-7-8
|
osThreadId | long | 108071
|
virtual | boolean | false
|
group | ThreadGroup | |
---|---|---|
name | string | system
|
parent | ThreadGroup | null
|
javaName | string | JFR Recorder Thread
|
javaThreadId | long | 19
|
osName | string | JFR Recorder Thread
|
osThreadId | long | 27395
|
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 |
ulong
unsigned
Parameter Type | u8 |
---|---|
Field Type | u8 |
Java Type | long |