Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/hotspot/share/jfr/metadata/metadata.xml
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,14 @@
<Field type="ClassLoader" name="definingClassLoader" label="Defining Class Loader" />
</Event>

<Event name="ClassFileDefine" category="Java Virtual Machine, Class Loading" label="ClassFile Definition" thread="true" stackTrace="true" startTime="false">
<Field type="Class" name="definedClass" label="Defined Class" />
<Field type="string" name="source" label="ClassFile Location" />
<Field type="string" name="package" label="Package Name" />
<Field type="string" name="module" label="Module Name" />
<Field type="ClassLoader" name="definingClassLoader" label="Defining Class Loader" />
</Event>

<Event name="ClassRedefinition" category="Java Virtual Machine, Class Loading" label="Class Redefinition" thread="false" stackTrace="false" startTime="false">
<Field type="Class" name="redefinedClass" label="Redefined Class" />
<Field type="int" name="classModificationCount" label="Class Modification Count" description="The number of times the class has changed"/>
Expand Down
22 changes: 19 additions & 3 deletions src/hotspot/share/prims/jvm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -860,8 +860,6 @@ static jclass jvm_define_class_common(const char *name,
jobject loader, const jbyte *buf,
jsize len, jobject pd, const char *source,
TRAPS) {
if (source == nullptr) source = "__JVM_DefineClass__";

JavaThread* jt = THREAD;

PerfClassTraceTime vmtimer(ClassLoader::perf_define_appclass_time(),
Expand All @@ -881,10 +879,13 @@ static jclass jvm_define_class_common(const char *name,
CHECK_NULL);

ResourceMark rm(THREAD);
ClassFileStream st((u1*)buf, len, source);
ClassFileStream st((u1*)buf, len, source != nullptr ? source : "__JVM_DefineClass__");
Handle class_loader (THREAD, JNIHandles::resolve(loader));
Handle protection_domain (THREAD, JNIHandles::resolve(pd));
ClassLoadInfo cl_info(protection_domain);

EventClassFileDefine cfd_evt;

Klass* k = SystemDictionary::resolve_from_stream(&st, class_name,
class_loader,
cl_info,
Expand All @@ -894,6 +895,21 @@ static jclass jvm_define_class_common(const char *name,
trace_class_resolution(k);
}

if (cfd_evt.should_commit()) {
cfd_evt.set_definedClass(k);
cfd_evt.set_source(source != nullptr ? source : "jrt://");
cfd_evt.set_definingClassLoader(k->class_loader_data());

const PackageEntry *const package = k->package();

cfd_evt.set_package(package->name()->as_C_string());
const ModuleEntry *const module = k->module();

cfd_evt.set_module(module->is_named() ? module->name()->as_C_string() : UNNAMED_MODULE);

cfd_evt.commit();
}

return (jclass) JNIHandles::make_local(THREAD, k->java_mirror());
}

Expand Down
5 changes: 5 additions & 0 deletions src/jdk.jfr/share/conf/jfr/default.jfc
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,11 @@
<setting name="stackTrace">true</setting>
</event>

<event name="jdk.ClassFileDefine">
<setting name="enabled" control="class-loading">false</setting>
<setting name="stackTrace">true</setting>
</event>

<event name="jdk.RedefineClasses">
<setting name="enabled">true</setting>
<setting name="stackTrace">true</setting>
Expand Down
5 changes: 5 additions & 0 deletions src/jdk.jfr/share/conf/jfr/profile.jfc
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,11 @@
<setting name="stackTrace">true</setting>
</event>

<event name="jdk.ClassFileDefine">
<setting name="enabled" control="class-loading">false</setting>
<setting name="stackTrace">true</setting>
</event>

<event name="jdk.RedefineClasses">
<setting name="enabled">true</setting>
<setting name="stackTrace">true</setting>
Expand Down