8261449: Micro-optimize JVM_LatestUserDefinedLoader

Reviewed-by: dholmes, stuefe, alanb
This commit is contained in:
Aleksey Shipilev 2021-02-11 08:53:21 +00:00
parent 837bd8930d
commit 49cf13d2fb
3 changed files with 7 additions and 16 deletions
src/hotspot/share

@ -3287,10 +3287,14 @@ JVM_END
JVM_ENTRY(jobject, JVM_LatestUserDefinedLoader(JNIEnv *env))
for (vframeStream vfst(thread); !vfst.at_end(); vfst.next()) {
vfst.skip_reflection_related_frames(); // Only needed for 1.4 reflection
oop loader = vfst.method()->method_holder()->class_loader();
InstanceKlass* ik = vfst.method()->method_holder();
oop loader = ik->class_loader();
if (loader != NULL && !SystemDictionary::is_platform_class_loader(loader)) {
return JNIHandles::make_local(THREAD, loader);
// 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);
}
}
}
return NULL;

@ -562,15 +562,6 @@ void vframeStreamCommon::skip_prefixed_method_and_wrappers() {
}
}
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();
}
}
javaVFrame* vframeStreamCommon::asJavaVFrame() {
javaVFrame* result = NULL;
if (_mode == compiled_mode) {

@ -328,10 +328,6 @@ class vframeStreamCommon : StackObj {
// Implements security traversal. Skips depth no. of frame including
// special security frames and prefixed native methods
void security_get_caller_frame(int depth);
// Helper routine for JVM_LatestUserDefinedLoader -- needed for 1.4
// reflection implementation
void skip_reflection_related_frames();
};
class vframeStream : public vframeStreamCommon {