RFR: 8139457: Array bases are aligned at HeapWord granularity [v50]

Roman Kennke rkennke at openjdk.org
Thu Aug 17 19:08:05 UTC 2023


On Wed, 12 Jul 2023 14:14:46 GMT, Roman Kennke <rkennke at openjdk.org> wrote:

>> See [JDK-8139457](https://bugs.openjdk.org/browse/JDK-8139457) for details.
>> 
>> Basically, when running with -XX:-UseCompressedClassPointers, arrays will have a gap between the length field and the first array element, because array elements will only start at word-aligned offsets. This is not necessary for smaller-than-word elements.
>> 
>> Also, while it is not very important now, it will become very important with Lilliput, which eliminates the Klass field and would always put the length field at offset 8, and leave a gap between offset 12 and 16.
>> 
>> Testing:
>>  - [x] runtime/FieldLayout/ArrayBaseOffsets.java (x86_64, x86_32, aarch64, arm, riscv, s390)
>>  - [x] bootcycle (x86_64, x86_32, aarch64, arm, riscv, s390)
>>  - [x] tier1 (x86_64, x86_32, aarch64, riscv)
>>  - [x] tier2 (x86_64, aarch64, riscv)
>>  - [x] tier3 (x86_64, riscv)
>
> Roman Kennke has updated the pull request incrementally with one additional commit since the last revision:
> 
>   RISCV fixes by @RealYFang

@albertnetymk I have moved the gap-clearing out of initialize_header() and into allocate_array() for aarch64 parts: https://github.com/openjdk/jdk/pull/11044/commits/7418fab09cad0d47efa5fd8ab487b4386e10bf76 
I couldn't move it into initialize_body() because that method is also used by initialize_object() and would require more work to get the len_in_bytes consistent. I added a TODO comment to that code block. If that is what you had in mind, I would do the same for x86_64 version of the code path.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/11044#issuecomment-1682814365


More information about the hotspot-dev mailing list