RFR: 8139457: Array bases are aligned at HeapWord granularity [v17]
Coleen Phillimore
coleenp at openjdk.org
Fri Jan 27 17:15:28 UTC 2023
On Fri, 27 Jan 2023 16:33:47 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:
>
> Use uint64_t
I'm following occurrences of header_size() in the code because that might be where we have assumptions about where the payload for oops starts. Ignoring the occurrences from metadata, there is one unused one in instanceOop.hpp, not related to your change that I think should be removed. The one OopDesc::header_size() is used by min_dummy_object_size and min_fill_size in CollectedHeap. These usages look okay to me but if they were rewritten to use heap_word_size(), maybe that would be better.
I ran tier1-8 on this for linux-x64-debug with no failures.
-------------
PR: https://git.openjdk.org/jdk/pull/11044
More information about the hotspot-dev
mailing list