From 17503baaccb86d9f877d44be5d3613593ae8cf57 Mon Sep 17 00:00:00 2001 From: jingduanyang Date: Tue, 7 Apr 2026 10:57:53 +0800 Subject: [PATCH] Backport: 8261449: Micro-optimize JVM_LatestUserDefinedLoader --- src/hotspot/share/prims/jvm.cpp | 13 ++++--------- src/hotspot/share/runtime/vframe.cpp | 9 --------- src/hotspot/share/runtime/vframe.hpp | 5 ----- 3 files changed, 4 insertions(+), 23 deletions(-) diff --git a/src/hotspot/share/prims/jvm.cpp b/src/hotspot/share/prims/jvm.cpp index a6977473edf..f6389e9d897 100644 --- a/src/hotspot/share/prims/jvm.cpp +++ b/src/hotspot/share/prims/jvm.cpp @@ -3310,24 +3310,19 @@ JVM_END JVM_ENTRY(jobject, JVM_LatestUserDefinedLoader(JNIEnv *env)) for (vframeStream vfst(thread); !vfst.at_end(); vfst.next()) { -#if HOTSPOT_TARGET_CLASSLIB == 8 - // UseNewReflection - vfst.skip_reflection_related_frames(); // Only needed for 1.4 reflection - oop loader = vfst.method()->method_holder()->class_loader(); - if (loader != NULL && !SystemDictionary::is_ext_class_loader(Handle(THREAD, loader))) { - return JNIHandles::make_local(THREAD, loader); - } -#else InstanceKlass* ik = vfst.method()->method_holder(); oop loader = ik->class_loader(); +#if HOTSPOT_TARGET_CLASSLIB == 8 + if (loader != nullptr && !SystemDictionary::is_ext_class_loader(Handle(THREAD, loader))) { +#else if (loader != NULL && !SystemDictionary::is_platform_class_loader(loader)) { +#endif // HOTSPOT_TARGET_CLASSLIB == 8 // Skip reflection related frames if (!ik->is_subclass_of(vmClasses::reflect_MethodAccessorImpl_klass()) && !ik->is_subclass_of(vmClasses::reflect_ConstructorAccessorImpl_klass())) { return JNIHandles::make_local(THREAD, loader); } } -#endif // HOTSPOT_TARGET_CLASSLIB == 8 } return NULL; JVM_END diff --git a/src/hotspot/share/runtime/vframe.cpp b/src/hotspot/share/runtime/vframe.cpp index 9087e6a95b8..d51c842458e 100644 --- a/src/hotspot/share/runtime/vframe.cpp +++ b/src/hotspot/share/runtime/vframe.cpp @@ -604,15 +604,6 @@ javaVFrame* vframeStreamCommon::asJavaVFrame() { return result; } -#if HOTSPOT_TARGET_CLASSLIB == 8 -void vframeStreamCommon::skip_reflection_related_frames() { - while (!at_end() && - (method()->method_holder()->is_subclass_of(vmClasses::reflect_MethodAccessorImpl_klass()) || - method()->method_holder()->is_subclass_of(vmClasses::reflect_ConstructorAccessorImpl_klass()))) { - next(); - } -} -#endif #ifndef PRODUCT void vframe::print() { diff --git a/src/hotspot/share/runtime/vframe.hpp b/src/hotspot/share/runtime/vframe.hpp index 58c76a43309..9ae435a926d 100644 --- a/src/hotspot/share/runtime/vframe.hpp +++ b/src/hotspot/share/runtime/vframe.hpp @@ -335,11 +335,6 @@ class vframeStreamCommon : StackObj { // special security frames and prefixed native methods void security_get_caller_frame(int depth); -#if HOTSPOT_TARGET_CLASSLIB == 8 - // Helper routine for JVM_LatestUserDefinedLoader -- needed for 1.4 - // reflection implementation - void skip_reflection_related_frames(); -#endif }; class vframeStream : public vframeStreamCommon {