RFR: 8339290: Optimize ClassFile Utf8EntryImpl#writeTo [v10]
Claes Redestad
redestad at openjdk.org
Tue Sep 3 09:19:26 UTC 2024
On Tue, 3 Sep 2024 00:38:40 GMT, Shaojin Wen <swen at openjdk.org> wrote:
>> Use fast path for ascii characters 1 to 127 to improve the performance of writing Utf8Entry to BufferWriter.
>
> Shaojin Wen has updated the pull request incrementally with two additional commits since the last revision:
>
> - code style
> - remove unsafe
I think this is looking much better now, thanks! There's some polish I'd like to see made, though.
src/java.base/share/classes/java/lang/System.java line 2597:
> 2595: }
> 2596:
> 2597: public byte stringCoder(String s) {
I think it'd be better to do `boolean isLatin1(String s)` here. It's still somewhat leaky, but keeps things a bit more high-level, containing more of the low-level details. Seems all uses basically just checks `coder == 0` anyhow.
src/java.base/share/classes/jdk/internal/classfile/impl/BufWriterImpl.java line 182:
> 180: byte[] elems = this.elems;
> 181:
> 182: str.getBytes(0, countGreaterThanZero, elems, offset);
Might be beneficial to non-latin1 case to move this up into the latin1 block.
Could you verify the 256 limit is useful? Add a couple of cases to the micro with much longer latin1 strings; both ASCII and with non-ASCII at the end. Would be nice if we can keep this simple and the "too long" check feels a bit premature.
src/java.base/share/classes/jdk/internal/classfile/impl/BufWriterImpl.java line 201:
> 199: }
> 200: int utflen = offset - start - 2;
> 201: if (utflen > 65535) {
Previously we'd count bytes and throw before writing to the byte array. Perhaps this is still preferable, even if it comes at a cost.
test/micro/org/openjdk/bench/java/lang/classfile/Utf8EntryWriteTo.java line 76:
> 74: byte[] bytes = HexFormat.of().parseHex(
> 75: switch (charType) {
> 76: case "ascii" -> "78";
Might be good to randomize these inputs a bit.
-------------
Changes requested by redestad (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/20772#pullrequestreview-2276820291
PR Review Comment: https://git.openjdk.org/jdk/pull/20772#discussion_r1741719346
PR Review Comment: https://git.openjdk.org/jdk/pull/20772#discussion_r1741713216
PR Review Comment: https://git.openjdk.org/jdk/pull/20772#discussion_r1741717901
PR Review Comment: https://git.openjdk.org/jdk/pull/20772#discussion_r1741688429
More information about the core-libs-dev
mailing list