RFR: 8266936: Add a finalization JFR event [v10]

Markus Grönlund mgronlun at openjdk.java.net
Thu Oct 14 22:31:54 UTC 2021

On Thu, 14 Oct 2021 22:02:43 GMT, Coleen Phillimore <coleenp at 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

More information about the hotspot-runtime-dev mailing list