RFR: 8373945: vmTestbase eatMemory/ClassUnloader provoke OOME to force GC and might cause GC in other threads [v5]
SendaoYan
syan at openjdk.org
Mon Dec 22 08:46:55 UTC 2025
On Mon, 22 Dec 2025 07:16:49 GMT, SendaoYan <syan at openjdk.org> wrote:
>> test/hotspot/jtreg/vmTestbase/nsk/jvmti/CompiledMethodUnload/compmethunload001.java line 50:
>>
>>> 48: "nsk.jvmti.CompiledMethodUnload.compmethunload001u";
>>> 49:
>>> 50: private final static int MAX_ITERATIONS = 50;
>>
>> Can you explain the need for this change.
>
> Test nsk/jvmti/CompiledMethodUnload/compmethunload001/TestDescription.java always fails after this PR with the default value `MAX_ITERATIONS = 5`.
>
> After I change the value of MAX_ITERATIONS to 50, The test always passed, and the test log shows that the number of unloaded enents is different every time.
>
>
> Number of unloaded events 12 number of iterations 25
> Number of unloaded events 1 number of iterations 36
> Number of unloaded events 4 number of iterations 30
>
>
> Before this PR, test call eatMemory to trigger full GC, this may need lots time. After this PR, test call `WhiteBox.getWhiteBox().fullGC()` to trigger full GC, this may be finish quickly.
>
> This test get the unload event count through jni function, the unload event count was recorded by C++ `volatile` variable `class_unloaded`. It's not synchronized. So I think it's reasonable to increase the max count to catch the `volatile` variable change.
Another solution is make some sleep after call `unloadClass()`
diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/CompiledMethodUnload/compmethunload001.java b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/CompiledMethodUnload/compmethunload001.java
index 13058ec7864..15120d3cad6 100644
--- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/CompiledMethodUnload/compmethunload001.java
+++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/CompiledMethodUnload/compmethunload001.java
@@ -47,7 +47,7 @@ public class compmethunload001 {
private final static String CLS_TO_BE_UNLOADED =
"nsk.jvmti.CompiledMethodUnload.compmethunload001u";
- private final static int MAX_ITERATIONS = 50;
+ private final static int MAX_ITERATIONS = 5;
static {
try {
@@ -95,6 +95,7 @@ public static void callHotClass(String location) throws Exception {
boolean clsUnloaded = clsUnLoader.unloadClass();
clsUnLoader = null;
+ Thread.sleep(5000);
System.gc();
}
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/28891#discussion_r2639101290
More information about the serviceability-dev
mailing list