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