Is there interest in optimizing StringLatin1.getChars(long, int, byte[]) for large (larger than int) long values[1]? We can change this to work with 8 digits at a time, which reduces the amount of 64 bit arithmetic required.
if (i <= -1_000_000_000) { long q = i / 100_000_000; charPos -= 8; write4DigitPairs(buf, charPos, (int) ((q * 100_000_000) - i)); i = q; if (i <= -1_000_000_000) { q = i / 100_000_000; charPos -= 8; write4DigitPairs(buf, charPos, (int) ((q * 100_000_000) - i)); i = q; } } A simple implementation of write4DigitPairs would just call the existing writeDigitPair method 4 times: private static void write4DigitPairs(byte[] buf, int idx, int value) { int v = value; int v2 = v / 100; writeDigitPair(buf, idx + 6, v - (v2 * 100)); v = v2; v2 = v / 100; writeDigitPair(buf, idx + 4, v - (v2 * 100)); v = v2; v2 = v / 100; writeDigitPair(buf, idx + 2, v - (v2 * 100)); v = v2; v2 = v / 100; writeDigitPair(buf, idx, v - (v2 * 100)); } There is the option to OR the 4 short values together into a long and leverage a ByteArrayLittleEndian.setLong call, but I see that the previous usage of ByteArrayLittleEndian.setShort was removed[2]. A small benchmark of longs which would qualify shows up to 20% improvement. Presumably a similar change could make sense for StringUTF16, but I have not spent any time benchmarking it. Brett [1] - https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/lang/StringLatin1.java#L163-L168 [2] - https://github.com/openjdk/jdk/commit/913e43fea995b746fb9e1b25587d254396c7c3c9