RFR: 8339317: Optimize ClassFile writeBuffer [v3]

Chen Liang liach at openjdk.org
Tue Sep 3 13:57:21 UTC 2024


On Tue, 3 Sep 2024 12:23:50 GMT, Shaojin Wen <swen at openjdk.org> wrote:

>> A small optimization, optimize the BufferWriter implementation and use of ClassFile, provide faster patchInt and skip
>
> Shaojin Wen has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Update src/java.base/share/classes/jdk/internal/classfile/impl/BufWriterImpl.java
>   
>   Co-authored-by: Claes Redestad <claes.redestad at oracle.com>

This migration of write 0 to skip reveals that they are different. Good RFE. (Maybe we can make the BufWriterImpl buffer growth to allocate non-initialized array after the write 0 fixes)

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

> 190:     }
> 191: 
> 192:     public void skip(int skipSize) {

Conceptually I would prefer to make such an API return an int for skipped index so we can more easily patch later. But that is really optional.

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

> 238:     public void writeIndexOrZero(PoolEntry entry) {
> 239:         if (entry == null || entry.index() == 0)
> 240:             skip(2);

Writing `0` CP index for `null` is mandated by the attributes that do so. https://docs.oracle.com/javase/specs/jvms/se22/html/jvms-4.html#jvms-4.7.24-300-D-A.1

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

> 596:         bytecodesBufWriter.writeIndex(ref);
> 597:         bytecodesBufWriter.writeU1(count);
> 598:         bytecodesBufWriter.skip(1);

`0` is mandated: https://docs.oracle.com/javase/specs/jvms/se22/html/jvms-6.html#jvms-6.5.invokeinterface

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

> 602:         writeBytecode(INVOKEDYNAMIC);
> 603:         bytecodesBufWriter.writeIndex(ref);
> 604:         bytecodesBufWriter.skip(2);

`0` is mandated: https://docs.oracle.com/javase/specs/jvms/se22/html/jvms-6.html#jvms-6.5.invokedynamic

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

Changes requested by liach (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/20780#pullrequestreview-2277504778
PR Review Comment: https://git.openjdk.org/jdk/pull/20780#discussion_r1742099316
PR Review Comment: https://git.openjdk.org/jdk/pull/20780#discussion_r1742100573
PR Review Comment: https://git.openjdk.org/jdk/pull/20780#discussion_r1742102738
PR Review Comment: https://git.openjdk.org/jdk/pull/20780#discussion_r1742102983


More information about the core-libs-dev mailing list