RFR 8209624: [JVMCI] Invalidate nmethods instead of directly unloading them when the InstalledCode is dropped

Tom Rodriguez tom.rodriguez at oracle.com
Fri Aug 17 20:46:01 UTC 2018


The NoSafepointVerifier in make_not_entrant_or_zombie is unhappy because 
we're in the middle of a GC.  I think it's fine to call it in that case. 
  We just don't want a new one starting in the middle of that code so 
I'm going to relax the GC part of the assert.

   // This can be called while the system is already at a safepoint 
which is ok
   NoSafepointVerifier nsv(true, !SafepointSynchronize::is_at_safepoint());

I'll send out an email if the next run is clean.

tom

Vladimir Kozlov wrote on 8/17/18 12:24 PM:
> Tom, you have tests failed.
> 
> Vladimir
> 
> On 8/17/18 11:52 AM, Tom Rodriguez wrote:
>> http://cr.openjdk.java.net/~never/8209624/webrev
>> https://bugs.openjdk.java.net/browse/JDK-8209624
>>
>> When the lifetime of an InstalledCode instance is used to control the 
>> lifetime of the corresponding nmethod it's possible for the nmethod 
>> still have live activations when the nmethod is unloaded.  This is 
>> because the weak semantics of the installed_code means it isn't 
>> visited in the nmethod::oops_do phase.  We would have to sometimes 
>> maintain a second strong reference which was visited in 
>> nmethod::oops_do to make that work.  Instead simply invalidate the 
>> nmethod and let the sweeper unload the nmethod once it no longer has 
>> activations.  Note that this issue doesn't affect normal compiles 
>> requested the CompilerBroker since the InstalledCode reference is weak 
>> in that case.  The fix was tested with a Truffle program that 
>> originally exposed the issue.  mach5 runs are in progress.
>>
>> tom


More information about the hotspot-compiler-dev mailing list