--- /dev/null 2014-06-26 18:59:40.000000000 +0400 +++ new/test/java/awt/List/ListGarbageCollectedTest/AwtListGarbageCollectedTest.java 2014-06-26 18:59:40.209084200 +0400 @@ -0,0 +1,57 @@ +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"); + } + } +}