From dc1ac1b9e4c09c59fec54e688fd6bf08bda43733 Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Mon, 6 Jun 2022 21:12:35 -0700 Subject: [PATCH 1/3] 8287876: The recently de-problemlisted TestTitledBorderLeak test is unstable --- .../swing/border/TestTitledBorderLeak.java | 62 ++++++++++--------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/test/jdk/javax/swing/border/TestTitledBorderLeak.java b/test/jdk/javax/swing/border/TestTitledBorderLeak.java index 5a3f78fbbe8c9..d49c9b7c660f3 100644 --- a/test/jdk/javax/swing/border/TestTitledBorderLeak.java +++ b/test/jdk/javax/swing/border/TestTitledBorderLeak.java @@ -21,45 +21,47 @@ * questions. */ +import java.lang.ref.Reference; +import java.lang.ref.WeakReference; + +import javax.swing.UIManager; import javax.swing.border.TitledBorder; -/* +/** * @test * @bug 8204963 * @summary Verifies TitledBorder's memory leak - * @run main/othervm -Xmx10M TestTitledBorderLeak + * @library /javax/swing/regtesthelpers + * @build Util + * @run main/timeout=60/othervm -mx32m TestTitledBorderLeak */ -public class TestTitledBorderLeak { +public final class TestTitledBorderLeak { + public static void main(String[] args) throws Exception { - int max = 100000; - long initialFreeMemory = 0L; - long currentFreeMemory; - try { - for (int i = 1; i <= max; i++) { - new TitledBorder(""); - if ((i % 1000) == 0) { - System.gc(); - currentFreeMemory = dumpMemoryStatus("After " + i); - if(initialFreeMemory == 0L) { - initialFreeMemory = currentFreeMemory; - } else if( currentFreeMemory < initialFreeMemory/2) { - throw new RuntimeException("Memory halved: there's a leak"); - } + int ul = UIManager.getPropertyChangeListeners().length; + int dl = UIManager.getDefaults().getPropertyChangeListeners().length; + + Reference border = getTitleBorder(); + Thread.sleep(3000); + int attempt = 0; + while (border.get() != null) { + Util.generateOOME(); + System.out.println("Not freed, attempt: " + attempt++); + } + check(ul, UIManager.getPropertyChangeListeners().length); + check(dl, UIManager.getDefaults().getPropertyChangeListeners().length); + } - } - } - }catch(OutOfMemoryError e) { - // Don't think it would work; should not happen - System.gc(); - throw new RuntimeException("There was OOM"); + private static void check(int expected, int actual) { + if (expected != actual) { + System.err.println("Expected: " + expected); + System.err.println("Actual: " + actual); + throw new RuntimeException("Wrong number of listeners"); } - System.out.println("Passed"); } - private static long dumpMemoryStatus(String msg) { - Runtime rt = Runtime.getRuntime(); - long freeMem = rt.freeMemory(); - System.out.println(msg + ": " + freeMem + " free"); - return freeMem; + + private static Reference getTitleBorder() { + TitledBorder tb = new TitledBorder(""); + return new WeakReference<>(tb); } } - From da1a82c99d981a869f28c935684ab599448e8de1 Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Mon, 6 Jun 2022 21:21:57 -0700 Subject: [PATCH 2/3] Update TestTitledBorderLeak.java --- test/jdk/javax/swing/border/TestTitledBorderLeak.java | 1 - 1 file changed, 1 deletion(-) diff --git a/test/jdk/javax/swing/border/TestTitledBorderLeak.java b/test/jdk/javax/swing/border/TestTitledBorderLeak.java index d49c9b7c660f3..613e206b3c49d 100644 --- a/test/jdk/javax/swing/border/TestTitledBorderLeak.java +++ b/test/jdk/javax/swing/border/TestTitledBorderLeak.java @@ -42,7 +42,6 @@ public static void main(String[] args) throws Exception { int dl = UIManager.getDefaults().getPropertyChangeListeners().length; Reference border = getTitleBorder(); - Thread.sleep(3000); int attempt = 0; while (border.get() != null) { Util.generateOOME(); From 125bf43de61684e8d090e747043c56cd6bb6d2d7 Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Tue, 7 Jun 2022 04:33:12 -0700 Subject: [PATCH 3/3] Smaller version --- .../javax/swing/border/TestTitledBorderLeak.java | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/test/jdk/javax/swing/border/TestTitledBorderLeak.java b/test/jdk/javax/swing/border/TestTitledBorderLeak.java index 613e206b3c49d..259a2f60c29df 100644 --- a/test/jdk/javax/swing/border/TestTitledBorderLeak.java +++ b/test/jdk/javax/swing/border/TestTitledBorderLeak.java @@ -24,7 +24,6 @@ import java.lang.ref.Reference; import java.lang.ref.WeakReference; -import javax.swing.UIManager; import javax.swing.border.TitledBorder; /** @@ -38,25 +37,12 @@ public final class TestTitledBorderLeak { public static void main(String[] args) throws Exception { - int ul = UIManager.getPropertyChangeListeners().length; - int dl = UIManager.getDefaults().getPropertyChangeListeners().length; - Reference border = getTitleBorder(); int attempt = 0; while (border.get() != null) { Util.generateOOME(); System.out.println("Not freed, attempt: " + attempt++); } - check(ul, UIManager.getPropertyChangeListeners().length); - check(dl, UIManager.getDefaults().getPropertyChangeListeners().length); - } - - private static void check(int expected, int actual) { - if (expected != actual) { - System.err.println("Expected: " + expected); - System.err.println("Actual: " + actual); - throw new RuntimeException("Wrong number of listeners"); - } } private static Reference getTitleBorder() {