RFR: 8342659: Test vmTestbase/nsk/jdi/ObjectReference/referringObjects/referringObjects002/referringObjects002.java failed: Class nsk.share.jdi.TestClass1 was not unloaded [v2]

Serguei Spitsyn sspitsyn at openjdk.org
Thu Oct 16 23:11:07 UTC 2025


On Thu, 16 Oct 2025 22:53:00 GMT, Chris Plummer <cjplummer at openjdk.org> wrote:

>> test/hotspot/jtreg/vmTestbase/nsk/share/ClassUnloader.java line 251:
>> 
>>> 249: 
>>> 250:         // force GC to unload marked class loader and its classes
>>> 251:         if (isClassLoaderReclaimed()) {
>> 
>> Q: There was a wait loop before to wait for `ClassLoader` to be reclaimed.
>>      How does this work now with the `isClassLoaderReclaimed()`?
>
> The previous approach relied on an async notification by the Cleaner thread that the class had been gc'd, so some waiting was needed (but probably not 15 seconds). There were also bugs in this support. unloadClass() is first called by the test to make sure that the class **does not** unload due to an intentional reference. This first call sets customClassLoader to null. That means when later unloadClass() is used again to this time make sure the class unloads, there will be no waiting, because for some reason unloadClass() chose to set waitingTime to 0 when customClassLoader is null. This meant that often unloadClass() would exit before the unloading completed. This is probably why the caller used to try up to 5 times. That left a race condition with the setting of is_reclaimed. It could be set sometime after unloadClass() finished and before it was entered again, but upon entry is_reclaimed is always set  to false, and it will never be set true again after that. Thus the test thin
 ks the class never unloaded even though it did.
> 
> There are other ways to fix this issue (mainly always wait for 15 seconds and make sure unloadClass() always works on the first try). However, Albert's PhantomReference approach is a cleaner implementation and no longer relies waiting for some async process to complete the unloading of the class.

Okay. Thank you, Chris.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/27840#discussion_r2437679608


More information about the serviceability-dev mailing list