On Mon, 10 Jun 2024 03:51:40 GMT, Glavo <d...@openjdk.org> wrote: >> Things have changed since https://github.com/openjdk/jdk/pull/14636 was >> closed, so let me reopen it. >> >> https://github.com/openjdk/jdk/pull/15386 confirmed that `VarHandle` in BALE >> caused a startup regression. In order to not have any more revert patches, >> it makes sense to optimize BALE. >> >> The optimization of https://github.com/openjdk/jdk/pull/16245 allows the >> traditional expression to have good performance, but BA and BALE save us >> from having to copy these lengthy expressions everywhere. So it makes sense >> to keep them. >> >> Now here's the question, should I rewrite this PR without `Unsafe`? I'll do >> some research (e.g. does `Unsafe` have better performance during warmup?), >> but I'd also like to take some advice. > > Glavo has updated the pull request incrementally with one additional commit > since the last revision: > > update copyright
#16245 combining values into larger store, Instead of using Unsafe, can we implement it as follows, similar to the early versions of java.nio.Bits? class ByteArrayLittleEndian { // ... public static void setInt(byte[] array, int offset, int value) { array[offset ] = (byte) value; array[offset + 1] = (byte) (value >> 8); array[offset + 2] = (byte) (value >> 16); array[offset + 3] = (byte) (value >> 24); } public static void setLong(byte[] bytes, int off, long value) { array[offset] = (byte) value; array[offset + 1] = (byte) (value >> 8); array[offset + 2] = (byte) (value >> 16); array[offset + 3] = (byte) (value >> 24); array[offset + 4] = (byte) (value >> 32); array[offset + 5] = (byte) (value >> 40); array[offset + 6] = (byte) (value >> 48); array[offset + 7] = (byte) (value >> 56); } // ... } ------------- PR Comment: https://git.openjdk.org/jdk/pull/19616#issuecomment-2158447800