--- old/src/java.base/share/classes/java/lang/StackFrameInfo.java 2017-12-12 15:35:05.000000000 -0800 +++ new/src/java.base/share/classes/java/lang/StackFrameInfo.java 2017-12-12 15:35:04.000000000 -0800 @@ -32,23 +32,25 @@ import java.lang.invoke.MethodType; class StackFrameInfo implements StackFrame { - private final byte RETAIN_CLASS_REF = 0x01; + private final static byte RETAIN_CLASS_REF = 0x01; private final static JavaLangInvokeAccess JLIA = SharedSecrets.getJavaLangInvokeAccess(); private final byte flags; - private final Object memberName; - private final short bci; + private final Object memberName; // MemberName initialized by VM + private short bci; // unsigned 16-bit value set by VM private volatile StackTraceElement ste; /* - * Create StackFrameInfo for StackFrameTraverser and LiveStackFrameTraverser - * to use + * Construct an empty StackFrameInfo object that will be filled by the VM + * during stack walking. + * + * @see StackStreamFactory.AbstractStackWalker#callStackWalk + * @see StackStreamFactory.AbstractStackWalker#fetchStackFrames */ StackFrameInfo(StackWalker walker) { this.flags = walker.retainClassRef ? RETAIN_CLASS_REF : 0; - this.bci = -1; this.memberName = JLIA.newMemberName(); } @@ -93,7 +95,7 @@ if (isNativeMethod()) return -1; - return bci; + return bci & 0xffff; } @Override