RFR: 8305895: Implementation: JEP 450: Compact Object Headers (Experimental) [v7]
Feilong Jiang
fjiang at openjdk.org
Thu May 11 09:04:49 UTC 2023
On Wed, 10 May 2023 19:16:58 GMT, Roman Kennke <rkennke at openjdk.org> wrote:
>> This is the main body of the JEP 450: Compact Object Headers (Experimental).
>>
>> Main changes:
>> - Introduction of the (experimental) flag UseCompactObjectHeaders. All changes in this PR are protected by this flag.
>> - The compressed Klass* can now be stored in the mark-word of objects. In order to be able to do this, we are building on #10907, #13582 and #13779 to protect the relevant (upper 32) bits of the mark-word. Significant parts of this PR deal with loading the compressed Klass* from the mark-word, and dealing with (monitor-)locked objects. When the object is monitor-locked, we load the displaced mark-word from the monitor, and load the compressed Klass* from there. This PR also changes some code paths (mostly in GCs) to be more careful when accessing Klass* (or mark-word or size) to be able to fetch it from the forwardee in case the object is forwarded, and/or reach through to the monitor when the object is locked by a monitor.
>> - The identity hash-code is narrowed to 25 bits.
>> - Instances can now have their base-offset (the offset where the field layouter starts to place fields) at offset 8 (instead of 12 or 16).
>> - Arrays will can now store their length at offset 8. Due to alignment restrictions, array elements will still start at offset 16. #11044 will resolve that restriction and allow array elements to start at offset 12 (except for long, double and uncompressed oops, which are still required to start at an element-aligned offset).
>> - CDS can now write and read archives with the compressed header. However, it is not possible to read an archive that has been written with an opposite setting of UseCompactObjectHeaders.
>>
>> Testing:
>> (+UseCompactObjectHeaders tests are run with the flag hard-patched into the build, to also catch @flagless tests, and to avoid mismatches with CDS - see above.)
>> - [x] tier1 (x86_64)
>> - [x] tier2 (x86_64)
>> - [x] tier3 (x86_64)
>> - [ ] tier4 (x86_64)
>> - [x] tier1 (aarch64)
>> - [x] tier2 (aarch64)
>> - [x] tier3 (aarch64)
>> - [ ] tier4 (aarch64)
>> - [ ] tier1 (x86_64) +UseCompactObjectHeaders
>> - [ ] tier2 (x86_64) +UseCompactObjectHeaders
>> - [ ] tier3 (x86_64) +UseCompactObjectHeaders
>> - [ ] tier4 (x86_64) +UseCompactObjectHeaders
>> - [ ] tier1 (aarch64) +UseCompactObjectHeaders
>> - [ ] tier2 (aarch64) +UseCompactObjectHeaders
>> - [ ] tier3 (aarch64) +UseCompactObjectHeaders
>> - [ ] tier4 (aarch64) +UseCompactObjectHeaders
>
> Roman Kennke has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 28 commits:
>
> - Merge branch 'JDK-8305898' into JDK-8305895
> - @shipilev review, round 2
> - Fix build
> - @shipilev comments, round 1
> - Allow to resolve mark with LW locking
> - Use new lightweight locking with compact headers
> - Merge branch 'JDK-8305898' into JDK-8305895
> - Imporve GetObjectSizeIntrinsicsTest
> - Some GC fixes
> - Add BaseOffsets test
> - ... and 18 more: https://git.openjdk.org/jdk/compare/39c33727...58046e58
Hi, I'm trying to build JDK binary base on this pr on Linux-riscv64 (with GCC-11), but I got the following error:
=== Output from failing command(s) repeated here ===
* For target buildtools_interim_langtools_modules_java.compiler.interim__the.BUILD_java.compiler.interim_batch:
warning: unknown enum constant Feature.STRING_TEMPLATES
warning: unknown enum constant Feature.STRING_TEMPLATES
warning: unknown enum constant Feature.STRING_TEMPLATES
warning: unknown enum constant Feature.STRING_TEMPLATES
error: warnings found and -Werror specified
1 error
4 warnings
* All command lines available in /home/ubuntu/workspace/jdk/build/linux-riscv64-server-release/make-support/failure-logs.
=== End of repeated output ===
Here is my gcc info:
ubuntu at ubuntu-93:~/workspace/jdk$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/riscv64-linux-gnu/11/lto-wrapper
Target: riscv64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.3.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=riscv64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --disable-multilib --with-arch=rv64gc --with-abi=lp64d --enable-checking=release --build=riscv64-linux-gnu --host=riscv64-linux-gnu --target=riscv64-linux-gnu --with-buil
d-config=bootstrap-lto-lean --enable-link-serialization=4
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04)
``
-------------
PR Comment: https://git.openjdk.org/jdk/pull/13844#issuecomment-1543614743
More information about the shenandoah-dev
mailing list