RFR: 8355177: Speed up StringBuilder::append(char[]) via UTF16::compress & Unsafe::copyMemory
Chen Liang
liach at openjdk.org
Mon Apr 21 15:30:46 UTC 2025
On Mon, 21 Apr 2025 07:00:36 GMT, Shaojin Wen <swen at openjdk.org> wrote:
> In BufferedReader.readLine and other similar scenarios, we need to use StringBuilder.append(char[]) to build the string.
>
> For these scenarios, we can use the intrinsic method StringUTF16.compress and Unsafe.copyMemory instead of the character copy of the char-by-char loop to improve the speed.
src/java.base/share/classes/java/lang/AbstractStringBuilder.java line 1773:
> 1771: int compressed = StringUTF16.compress(s, off, val, count, end - off);
> 1772: count += compressed;
> 1773: off += compressed;
Should we update `this.count` eagerly after compression?
src/java.base/share/classes/java/lang/StringUTF16.java line 1317:
> 1315: }
> 1316:
> 1317: private static void putChars(byte[] val, int index, char[] str, int off, int end) {
I recommend renaming this to `putCharsUnchecked` to indicate this has no bound checks.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/24773#discussion_r2052591347
PR Review Comment: https://git.openjdk.org/jdk/pull/24773#discussion_r2052597288
More information about the core-libs-dev
mailing list