import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.lang.ref.WeakReference; /** * @test * @summary AwtList not garbage collected * @run main AwtListGarbageCollectedTest */ public class AwtListGarbageCollectedTest { public static void main(String[] args) { Frame frame = new Frame("List leak test"); try { test(frame); } catch (RuntimeException e) { frame.dispose(); throw e; } } private static void test(Frame frame) { WeakReference weakRef = null; try { frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setSize(300, 200); Panel panel = new Panel(); frame.add(panel); frame.setVisible(true); { List list = new List(); frame.add(list); list.setMultipleMode(true); frame.remove(list); weakRef = new WeakReference(list); } //make OutOfMemoryError to force gc String veryLongString = new String(new char[100]); while (true) { veryLongString += veryLongString; } } catch (OutOfMemoryError e) { if (weakRef == null) throw new RuntimeException("Weak ref wasn't created"); if (weakRef.get() != null) throw new RuntimeException("List wasn't garbage collected"); } } }