RFR JDK-8193325: StackFrameInfo::getByteCodeIndex returns wrong value if bci > 32767

Aleksey Shipilev shade at redhat.com
Thu Aug 15 19:43:43 UTC 2019


On 8/15/19 9:11 PM, Mandy Chung wrote:
> On 8/15/19 11:59 AM, Aleksey Shipilev wrote:
>> On 8/14/19 9:42 PM, Mandy Chung wrote:
>>>     http://cr.openjdk.java.net/~mchung/jdk14/8193325/webrev.05/
>> Looks good.
>>
>> So, to reiterate, we do not need to initialize bci to -1 for StackFrameInfo, because it is not
>> exposed anywhere?
>>
> No, it is only exposed via public API after the StackFrameInfo is filled by the VM.
> 
> If the uninitialized value is observed, the MemberName may not be uninitialized either.   Both bci
> and MemberName fields should be handled if the race becomes an issue.

Okay then.

I checked the object footprints before/after the patch, and they are the same. After-patch version
has a single byte to spare for something else, if we ever needed it. (The first gap is VM-injected
"version" field).

== x86_64, -XX:+UseCompressedOops

java.lang.StackFrameInfo object internals:
 OFFSET  SIZE                          TYPE DESCRIPTION                               VALUE
      0    12                               (object header)                           N/A
     12     4                           int StackFrameInfo.bci                        N/A
     16     2                               (alignment/padding gap)
     18     1                       boolean StackFrameInfo.retainClassRef             N/A
     19     1                               (alignment/padding gap)
     20     4              java.lang.Object StackFrameInfo.memberName                 N/A
     24     4   java.lang.StackTraceElement StackFrameInfo.ste                        N/A
     28     4                               (loss due to the next object alignment)
Instance size: 32 bytes

== x86_64, -XX:-UseCompressedOops

java.lang.StackFrameInfo object internals:
 OFFSET  SIZE                          TYPE DESCRIPTION                               VALUE
      0    16                               (object header)                           N/A
     16     4                           int StackFrameInfo.bci                        N/A
     20     2                               (alignment/padding gap)
     22     1                       boolean StackFrameInfo.retainClassRef             N/A
     23     1                               (alignment/padding gap)
     24     8              java.lang.Object StackFrameInfo.memberName                 N/A
     32     8   java.lang.StackTraceElement StackFrameInfo.ste                        N/A
Instance size: 40 bytes
Space losses: 3 bytes internal + 0 bytes external = 3 bytes total

== x86_32:

java.lang.StackFrameInfo object internals:
 OFFSET  SIZE                          TYPE DESCRIPTION                               VALUE
      0     8                               (object header)                           N/A
      8     4                           int StackFrameInfo.bci                        N/A
     12     2                               (alignment/padding gap)
     14     1                       boolean StackFrameInfo.retainClassRef             N/A
     15     1                               (alignment/padding gap)
     16     4              java.lang.Object StackFrameInfo.memberName                 N/A
     20     4   java.lang.StackTraceElement StackFrameInfo.ste                        N/A
Instance size: 24 bytes
Space losses: 3 bytes internal + 0 bytes external = 3 bytes total


-- 
Thanks,
-Aleksey



More information about the core-libs-dev mailing list