From d61155000d0a9597583a383e9322cd16cc9a55c6 Mon Sep 17 00:00:00 2001 From: "zhengyu.gu" Date: Fri, 30 May 2025 09:12:49 -0400 Subject: [PATCH] 8348228: Major performance regression in GetMethodDeclaringClass and other JVMTI Method functions --- hotspot/src/share/vm/oops/method.cpp | 3 --- hotspot/src/share/vm/prims/jniCheck.cpp | 5 +++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hotspot/src/share/vm/oops/method.cpp b/hotspot/src/share/vm/oops/method.cpp index 9e58c012681..7a63f3632e5 100644 --- a/hotspot/src/share/vm/oops/method.cpp +++ b/hotspot/src/share/vm/oops/method.cpp @@ -1903,9 +1903,6 @@ bool Method::is_method_id(jmethodID mid) { Method* Method::checked_resolve_jmethod_id(jmethodID mid) { if (mid == NULL) return NULL; - if (!Method::is_method_id(mid)) { - return NULL; - } Method* o = resolve_jmethod_id(mid); if (o == NULL || o == JNIMethodBlock::_free_method || !((Metadata*)o)->is_method()) { return NULL; diff --git a/hotspot/src/share/vm/prims/jniCheck.cpp b/hotspot/src/share/vm/prims/jniCheck.cpp index 593ca8a1e34..bf8fd91b8db 100644 --- a/hotspot/src/share/vm/prims/jniCheck.cpp +++ b/hotspot/src/share/vm/prims/jniCheck.cpp @@ -468,6 +468,11 @@ Method* jniCheck::validate_jmethod_id(JavaThread* thr, jmethodID method_id) { if (moop == NULL) { ReportJNIFatalError(thr, fatal_wrong_class_or_method); } + // jmethodIDs are supposed to be weak handles in the class loader data, + // but that can be expensive so check it last + else if (!Method::is_method_id(method_id)) { + ReportJNIFatalError(thr, fatal_non_weak_method); + } return moop; }