On 8/12/19 11:33 AM, Aleksey Shipilev wrote:
Alternatively, we can make bci an int (as Alekey suggests) that does not 
increase the object size:

    http://cr.openjdk.java.net/~mchung/jdk14/8193325/webrev.02/
@Stable seems meaningless here, for the reasons Daniel points out. I believe "final 
int bci" is just as good and clean.

I am happy to keep it final field and the comment already indicates that the field is set by the VM.  It's initialized to -1 in case any accident change that VM didn't set this field.


diff --git a/src/java.base/share/classes/java/lang/StackFrameInfo.java b/src/java.base/share/classes/java/lang/StackFrameInfo.java
--- a/src/java.base/share/classes/java/lang/StackFrameInfo.java
+++ b/src/java.base/share/classes/java/lang/StackFrameInfo.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2019, 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
@@ -26,28 +26,31 @@

 import jdk.internal.access.JavaLangInvokeAccess;
 import jdk.internal.access.SharedSecrets;
+import jdk.internal.vm.annotation.Stable;

 import java.lang.StackWalker.StackFrame;
 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 final int bci = -1;         // BCI 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();
     }


Reply via email to