On Thu, 14 Oct 2021 22:02:43 GMT, Coleen Phillimore <cole...@openjdk.org> wrote:

>> Ok, I see - grow the table.
>> 
>> I'm not sure if you need to ask ik->is_loader_alive() or not, but I think 
>> you do.  The InstanceKlass is removed from your table during class unloading 
>> but before that during concurrent class unloading, the class might not be 
>> alive while you look at it and concurrent class unloading hasn't gotten 
>> around to removing it yet.  Since you save classes regardless of CLD, you 
>> have to check if it's alive.  See classLoaderDataGraph.cpp 
>> ClassLoaderDataGraphIterator for example.  The CLDG_lock only keeps the 
>> graph from not getting modified, but the classes in it might be dead.
>
> That said, I don't see where you return an InstanceKlass in the table, which 
> would need this check.  Not in class_unloading_do because this follows the 
> _unloading list.

So there is already support for concurrent class unloading today in JFR, and 
the protocol is built around the CLDG_lock. If JFR holds it, concurrent class 
unloading cannot run. If GC holds it, JFR cannot inspect classes. That's why 
the table inspection is guarded via the CLDG_lock, for mutual exclusion to 
avoid this problem. I.e. if concurrent class unloading is in progress, JFR will 
not inspect the table.

-------------

PR: https://git.openjdk.java.net/jdk/pull/4731

Reply via email to