On Sat, 8 Jun 2024 23:30:38 GMT, Shaojin Wen <d...@openjdk.org> wrote:
>> After PR #16245, C2 optimizes stores into primitive arrays by combining >> values into larger stores. In the UUID.toString method, >> ByteArrayLittleEndian can be removed, making the code more elegant and >> faster. > > Shaojin Wen has updated the pull request incrementally with one additional > commit since the last revision: > > change method name, putHex -> putHex4, and fix comments > I think we don't need to change them back everywhere, but only need to > rewrite `ByteArrayLittleEndian` and `ByteArray` so that they no longer use > `VarHandle`. > > Maybe I should rewrite #14636 without using `Unsafe`, so more people might > agree with it. You are right, ByteArray and ByteArrayLittleEndian have good performance after removing Unsafe. This is similar to the previous version of java.io.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); } } class HexDigits { public static void putHex4(byte[] array, int offset, int value) { // Prepare an int value so C2 generates a 4-byte write instead of two 2-byte writes ByteArrayLittleEndian.setInt( array, offset, (DIGITS[value & 0xff] << 16) | DIGITS[(value >> 8) & 0xff]); } } ------------- PR Comment: https://git.openjdk.org/jdk/pull/19610#issuecomment-2156255748