RFR: 8139457: Array bases are aligned at HeapWord granularity

Aleksey Shipilev shade at openjdk.org
Mon Nov 21 11:07:22 UTC 2022


On Tue, 8 Nov 2022 20:18:09 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)

ARM32 seems to build well, passes `runtime/FieldLayout` tests, and bootcycles.

RISC-V needs more work:


$  make images test TEST=runtime/FieldLayout
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (0xe0000000), pid=454832, tid=454835
#  stop: len is not a multiple of BytesPerWord
#
# JRE version: OpenJDK Runtime Environment (20.0) (fastdebug build 20-internal-adhoc.shade.shipilev-jdk)
# Java VM: OpenJDK 64-Bit Server VM (fastdebug 20-internal-adhoc.shade.shipilev-jdk, mixed mode, tiered, compressed oops, g1 gc, linux-riscv64)
# Problematic frame:
# J 78 c1 java.util.Arrays.copyOfRange([BII)[B java.base at 20-internal (64 bytes) @ 0x0000003f84c8bf2c [0x0000003f84c8bdc0+0x000000000000016c]

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

PR: https://git.openjdk.org/jdk/pull/11044


More information about the hotspot-dev mailing list