ClassLoader API to look up class files

Alan Bateman alan.bateman at oracle.com
Tue Sep 24 13:23:44 UTC 2024


On 24/09/2024 11:43, Rafael Winterhalter wrote:
>
> Without getting lost in specifics:
>
> Byte Buddy allows to transform classes and to store the transformed 
> state. Increasingly, this is done at build time to reduce start up 
> costs and to support AOT compilation. Java agents are the more common 
> option still, but I notice a shift to build time instrumentation, also 
> because of dynamic attach becoming less accessible. One consequence is 
> that the building JVM might not be of the same version as the 
> executing JVM.
>
> With this in mind, class files are read from either:
> - A folder
> - A JAR file
> - A ClassLoader (getResourceAsStream)
>
> In build tools, the last option is rather uncommon, but it exists. I 
> can only assume that the people that requested this use case have good 
> enough reasons for this (probably because URLs are remote and the 
> logic to fetch them is wired into a loader implementation, I am 
> guessing, though).
>
> If the build plugin now wants to create instrumented versions of class 
> files for a Java 17 JVM, while the build is run on a Java 21 JVM, I 
> can support this for JAR files, for folders, but I cannot fetch the 
> adequate resource when the underlying resource accessor is a class 
> loader. I do not think that I can work around this, or do I overlook 
> something?
>

Tooling that does static instrumentation leads itself to a --release N 
option. Assuming this isn't a training runs of sorts it's hard hard to 
picture a ClassLoader in that environment. How does the build tool now 
what to setup so that it matches the arrangement and visibility of 
runtime? Is it really a ClassLoader or something just locates the class 
bytes in the same way as a ClassLoader at runtime?

-Alan


More information about the core-libs-dev mailing list