Class files in ByteBuffer
Brian Goetz
brian.goetz at oracle.com
Mon Mar 10 17:52:10 UTC 2025
It sounds like you are asking two questions. At the API level, you are
asking whether adding a Classfile.parse(ByteBuffer) method would be in
scope. But at the implementation level, you are asking whether we would
be OK to make ByteBuffer *the primitive* on which processing the byte[]
format is based, which is a more intrusive change.
My first reaction is that the first seems fine in theory, but if the
only reasonable implementation strategy is the latter, then I am pretty
skeptical.
A ByteBuffer-accepting factory that simply copied to a byte[] would be
fine (this is what we do with the existing Path-accepting factory, it's
a similar form of convenience), but it sounds like this would not make
you any happier.
On 3/10/2025 1:38 PM, David Lloyd wrote:
> When defining a class in the JDK, one may either use a byte array or a
> byte buffer to hold the contents of the class. The latter is useful
> when (for example) a JAR file containing uncompressed classes is
> mapped into memory. Thus, some class loaders depend on this form of
> the API for class definition.
>
> If I were to supplement such a class loader with a class
> transformation step based on the class file API, I would have to copy
> the bytes of each class on to the heap as a byte[] before I could
> begin parsing it. This is potentially expensive, and definitely awkward.
>
> After transformation, it doesn't really matter if you have a byte[] or
> ByteBuffer because either way, the class can be defined directly.
>
> It would be nice if the class file parser could accept either a byte[]
> or a ByteBuffer. I did a quick bit of exploratory work and it looks
> like porting the code to read from a ByteBuffer instead of a byte[]
> (using ByteBuffer.wrap() for the array case) would be largely
> straightforward *except* for the code which parses UTF-8 constants
> into strings. Also there could be some small performance differences
> (maybe positive, maybe negative) depending on how the buffer is accessed.
>
> Is this something that might be considered?
>
> --
> - DML • he/him
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/classfile-api-dev/attachments/20250310/e602ac67/attachment.htm>
More information about the classfile-api-dev
mailing list