RFR: 8341141: Optimize DirectCodeBuilder [v4]

Chen Liang liach at openjdk.org
Sun Sep 29 22:48:35 UTC 2024


On Sun, 29 Sep 2024 13:35:14 GMT, Shaojin Wen <swen at openjdk.org> wrote:

>> Some DirectCodeBuilder related optimizations to improve startup and running performance:
>> 1. Merge calls, merge writeU1 and writeU2 into writeU3
>> 2. Merge calls, merge writeU1 and writeIndex operations
>> 3. Directly use writeU1 instead of writeBytecode
>> 4. Rewrite the implementation of load and store
>
> Shaojin Wen has updated the pull request incrementally with one additional commit since the last revision:
> 
>   use array instead of ArrayList

src/java.base/share/classes/jdk/internal/classfile/impl/BufWriterImpl.java line 124:

> 122:     }
> 123: 
> 124:     public void writeU3(int u1, int u2) {

This one should be `writeU1U2` or `write12`. If people use this as "write u2 and write u1" the higher byte of 1st arg will be truncated incorrectly.

The other `writeU2` and `writeU3` already have 3 args so it's easy to assume that they drop the more significant bytes and only use the least significant byte of each argument.

src/java.base/share/classes/jdk/internal/classfile/impl/BufWriterImpl.java line 144:

> 142:     }
> 143: 
> 144:     public void writeU4(int x1, int x2) {

Since we are writing 2 u2 instead of 1 u4, we should call this `writeU2U2` or just `write22` (unsigned or signed are the same). Same concern for byte truncation.

src/java.base/share/classes/jdk/internal/classfile/impl/DirectCodeBuilder.java line 605:

> 603:                                      int count) {
> 604:         bytecodesBufWriter.writeIndex(opcode.bytecode(), ref);
> 605:         bytecodesBufWriter.writeU2(count << 8);

Suggestion:

        bytecodesBufWriter.writeU2(count, 0);

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21243#discussion_r1779821432
PR Review Comment: https://git.openjdk.org/jdk/pull/21243#discussion_r1779821071
PR Review Comment: https://git.openjdk.org/jdk/pull/21243#discussion_r1779821719


More information about the core-libs-dev mailing list