--- old/src/hotspot/share/classfile/javaClasses.cpp 2017-11-04 15:52:28.884160554 -0700 +++ new/src/hotspot/share/classfile/javaClasses.cpp 2017-11-04 15:52:28.376160561 -0700 @@ -2258,8 +2258,9 @@ void java_lang_StackFrameInfo::to_stack_trace_element(Handle stackFrame, Handle stack_trace_element, TRAPS) { ResourceMark rm(THREAD); - Handle k (THREAD, stackFrame->obj_field(_declaringClass_offset)); - InstanceKlass* holder = InstanceKlass::cast(java_lang_Class::as_Klass(k())); + Handle mname(THREAD, stackFrame->obj_field(java_lang_StackFrameInfo::_memberName_offset)); + Klass* clazz = java_lang_Class::as_Klass(java_lang_invoke_MemberName::clazz(mname())); + InstanceKlass* holder = InstanceKlass::cast(clazz); Method* method = java_lang_StackFrameInfo::get_method(stackFrame, holder, CHECK); short version = stackFrame->short_field(_version_offset); @@ -2270,7 +2271,6 @@ void java_lang_StackFrameInfo::compute_offsets() { Klass* k = SystemDictionary::StackFrameInfo_klass(); - compute_offset(_declaringClass_offset, k, vmSymbols::declaringClass_name(), vmSymbols::class_signature()); compute_offset(_memberName_offset, k, vmSymbols::memberName_name(), vmSymbols::object_signature()); compute_offset(_bci_offset, k, vmSymbols::bci_name(), vmSymbols::short_signature()); STACKFRAMEINFO_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET); @@ -3679,7 +3679,6 @@ int java_lang_StackTraceElement::classLoaderName_offset; int java_lang_StackTraceElement::declaringClass_offset; int java_lang_StackTraceElement::declaringClassObject_offset; -int java_lang_StackFrameInfo::_declaringClass_offset; int java_lang_StackFrameInfo::_memberName_offset; int java_lang_StackFrameInfo::_bci_offset; int java_lang_StackFrameInfo::_version_offset; @@ -3732,11 +3731,6 @@ element->obj_field_put(declaringClassObject_offset, value); } -// Support for java_lang_StackFrameInfo -void java_lang_StackFrameInfo::set_declaringClass(oop element, oop value) { - element->obj_field_put(_declaringClass_offset, value); -} - void java_lang_StackFrameInfo::set_version(oop element, short value) { element->short_field_put(_version_offset, value); } --- old/src/hotspot/share/classfile/javaClasses.hpp 2017-11-04 15:52:29.484160546 -0700 +++ new/src/hotspot/share/classfile/javaClasses.hpp 2017-11-04 15:52:29.292160548 -0700 @@ -1370,7 +1370,6 @@ class java_lang_StackFrameInfo: AllStatic { private: - static int _declaringClass_offset; static int _memberName_offset; static int _bci_offset; static int _version_offset; @@ -1379,7 +1378,6 @@ public: // Setters - static void set_declaringClass(oop info, oop value); static void set_method_and_bci(Handle stackFrame, const methodHandle& method, int bci, TRAPS); static void set_bci(oop info, int value); --- old/src/hotspot/share/classfile/vmSymbols.hpp 2017-11-04 15:52:30.000160539 -0700 +++ new/src/hotspot/share/classfile/vmSymbols.hpp 2017-11-04 15:52:29.820160541 -0700 @@ -428,7 +428,6 @@ template(append_name, "append") \ template(klass_name, "klass") \ template(array_klass_name, "array_klass") \ - template(declaringClass_name, "declaringClass") \ template(memberName_name, "memberName") \ template(mid_name, "mid") \ template(cpref_name, "cpref") \ --- old/src/hotspot/share/prims/stackwalk.cpp 2017-11-04 15:52:30.580160531 -0700 +++ new/src/hotspot/share/prims/stackwalk.cpp 2017-11-04 15:52:30.348160534 -0700 @@ -272,9 +272,8 @@ return array_h; } -// Fill StackFrameInfo with declaringClass and bci and initialize memberName +// Fill StackFrameInfo with bci and initialize memberName void BaseFrameStream::fill_stackframe(Handle stackFrame, const methodHandle& method, TRAPS) { - java_lang_StackFrameInfo::set_declaringClass(stackFrame(), method->method_holder()->java_mirror()); java_lang_StackFrameInfo::set_method_and_bci(stackFrame, method, bci(), THREAD); } --- old/src/java.base/share/classes/java/lang/StackFrameInfo.java 2017-11-04 15:52:31.152160524 -0700 +++ new/src/java.base/share/classes/java/lang/StackFrameInfo.java 2017-11-04 15:52:30.948160526 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,8 +38,7 @@ // Footprint improvement: MemberName::clazz can replace // StackFrameInfo::declaringClass. - private final StackWalker walker; - private final Class declaringClass; + private final boolean retainClassRef; private final Object memberName; private final short bci; private volatile StackTraceElement ste; @@ -49,8 +48,7 @@ * to use */ StackFrameInfo(StackWalker walker) { - this.walker = walker; - this.declaringClass = null; + this.retainClassRef = walker.retainClassRef; this.bci = -1; this.memberName = JLIA.newMemberName(); } @@ -58,20 +56,20 @@ // package-private called by StackStreamFactory to skip // the capability check Class declaringClass() { - return declaringClass; + return JLIA.getDeclaringClass(memberName); } // ----- implementation of StackFrame methods @Override public String getClassName() { - return declaringClass.getName(); + return declaringClass().getName(); } @Override public Class getDeclaringClass() { - walker.ensureAccessEnabled(RETAIN_CLASS_REFERENCE); - return declaringClass; + ensureRetainClassRefEnabled(); + return declaringClass(); } @Override @@ -81,7 +79,7 @@ @Override public MethodType getMethodType() { - walker.ensureAccessEnabled(RETAIN_CLASS_REFERENCE); + ensureRetainClassRefEnabled(); return JLIA.getMethodType(memberName); } @@ -137,4 +135,10 @@ } return s; } + + private void ensureRetainClassRefEnabled() { + if (!retainClassRef) { + throw new UnsupportedOperationException("No access to RETAIN_CLASS_REFERENCE"); + } + } } --- old/src/java.base/share/classes/java/lang/StackWalker.java 2017-11-04 15:52:31.664160517 -0700 +++ new/src/java.base/share/classes/java/lang/StackWalker.java 2017-11-04 15:52:31.492160519 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -296,6 +296,7 @@ private final Set