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

Vladimir Kozlov vladimir.kozlov at oracle.com
Fri Oct 5 22:23:07 UTC 2018


Thank you, Dean

Vladimir

On 10/5/18 2:33 PM, dean.long at oracle.com wrote:
> On 10/5/18 2:19 PM, Vladimir Kozlov wrote:
>> On 10/5/18 1:16 PM, dean.long at oracle.com wrote:
>>> What about the case where the AOT code has dependencies on classes that are loaded by a custom class loader?  
>>> Wouldn't we need to disable the AOT code in that case? I'm trying to come up with a test case for that.
>>
>> If method is compiled it means all referenced classes were resolved during compilation when standard builtin loaders 
>> are used. The should not be references to classes from custom class loaders. We don't have any information about 
>> custom loaders during compilation - who we can depend on them?
>>
>> Even if there is a reference for class loaded by custom class loader, with this fix corresponding got cells will not 
>> be initialized and referenced in aot methods classes will be resolved during method execution. At that time method's 
>> execution context holder class + its loader and domain will be used to find a class. And it will find one in standard 
>> classes (custom class loaders will not be searched). If it is not found runtime will throw NCFE.
>>
>> For passed argument (or static field) we should have checkcast check which should fail because the constant it is 
>> compared to will be from standard class.
>>
>> Class search for metadata (debug info) is also done using current aot method's context.
>>
>> What I am trying to say is that all runtime searches will find only standard classes or theow NCFE. We should never 
>> have got cells reference a class which is loaded by custom loader. Because of that we don't need to deoptimize.
>>
> 
> OK, the AOT code will resolve references using a system classloader.  We can assume system classloaders are well-behaved 
> and don't delegate to custom classloaders.  So there's no problem.  Your change looks good.
> 
> dl
> 
>> Thanks,
>> Vladimir
>>
>>>
>>> dl
>>>
>>>
>>> On 10/5/18 7:36 AM, Vladimir Kozlov wrote:
>>>> http://cr.openjdk.java.net/~kvn/8206963/webrev.01/
>>>> https://bugs.openjdk.java.net/browse/JDK-8206963
>>>>
>>>> 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.
>>>>
>>>> I will update limitations in AOT JEP.
>>>>
>>>> Changes passed tier1-3 and Xcomp testing.
>>>>
>>>
> 


More information about the hotspot-compiler-dev mailing list