[12] RFR(S) 8206963: [AOT] bug with multiple class loaders

Vladimir Kozlov vladimir.kozlov at oracle.com
Mon Oct 8 16:45:57 UTC 2018

Hi Andrew,

Yes, it could be done. But in what cost.

Currently AOT shares class pointers (got cells) for all methods in AOT library. It was intentional to improve 
performance and it is okay with "well behave" class loaders. To support custom class loaders, as you said, we would have 
to keep them separate per method (or per method's holder) and resolve them in each method. Also we would have to add 
checks for not only static fields accesses (as we do now) but regular fields as well. And we need classes checks before 
all inlined code. That is what we found and we may missed something. Based on this I prefer to support only most common 
cases when custom class loaders are not used.

We also compare class fingerprints but it is not enough (we don't record path and may be other things).


On 10/6/18 2:24 AM, Andrew Haley wrote:
> On 10/05/2018 03:36 PM, Vladimir Kozlov wrote:
>> After investigations and discussions I suggest that AOT should not support custom class loaders. The main issue is
>> during AOT compilation we don't know anything about them and their constrains. JAOTC uses only standard builtin loaders.
>> Otherwise we would have to add class runtime checks to all field accesses and inlined code and create separate memory
>> for class pointers (AOT 'got' cells) per method which may cause significant performance regression.
> For interest, we did get this working correctly in GCJ, regardless of
> class loader.  We used a cryptographic hash of the entire class file
> to look up the correct compiled code and then resolved the references
> from the code using the usual JVM rules. This is always correct, I
> think.

More information about the hotspot-compiler-dev mailing list