From 88cd3f6949fd12d680b38302f4b64113eb7830bf Mon Sep 17 00:00:00 2001 From: Chris Vest Date: Thu, 27 Nov 2025 14:39:26 -0800 Subject: [PATCH] Make the PreciseLeakDetectorIT more stable on Semeru --- src/test/java/testkits/GarbageCreator.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/test/java/testkits/GarbageCreator.java b/src/test/java/testkits/GarbageCreator.java index f88273b1..f76e458d 100644 --- a/src/test/java/testkits/GarbageCreator.java +++ b/src/test/java/testkits/GarbageCreator.java @@ -15,6 +15,7 @@ */ package testkits; +import java.lang.invoke.VarHandle; import java.lang.management.GarbageCollectorMXBean; import java.lang.management.ManagementFactory; import java.lang.ref.PhantomReference; @@ -78,6 +79,19 @@ public static void awaitReferenceProcessing() throws InterruptedException { } private static PhantomReference createLeakedObjectReference(ReferenceQueue queue) { - return new PhantomReference<>(new Object() /* intentionally leak */, queue); + return createLeakedObjectReference(queue, 10.0, 50.0); + } + + private static PhantomReference createLeakedObjectReference( + ReferenceQueue queue, double threshold, double current) { + if (threshold > 20.0 * (current + ThreadLocalRandom.current().nextDouble())) { + Object object = new Object(); + PhantomReference reference = new PhantomReference<>(object, queue); + VarHandle.fullFence(); + object = null; // intentionally leak + VarHandle.fullFence(); + return reference; + } + return createLeakedObjectReference(queue, threshold, current - 1.0); } }