diff --git a/src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp b/src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp index bb91016e52223..2b8f4e55d5504 100644 --- a/src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp +++ b/src/hotspot/share/jfr/instrumentation/jfrEventClassTransformer.cpp @@ -1595,6 +1595,10 @@ static void rewrite_klass_pointer(InstanceKlass*& ik, InstanceKlass* new_ik, Cla assert(IS_EVENT_OR_HOST_KLASS(new_ik), "invariant"); assert(TRACE_ID(ik) == TRACE_ID(new_ik), "invariant"); assert(!thread->has_pending_exception(), "invariant"); + // Rewrite InstanceKlass* in associated Java mirror. + oop java_mirror = ik->java_mirror(); + assert(java_mirror != nullptr, "invariant"); + java_lang_Class::set_klass(java_mirror, new_ik); // Assign original InstanceKlass* back onto "its" parser object for proper destruction. parser.set_klass_to_deallocate(ik); // Finally rewrite the original pointer to the newly created InstanceKlass.