1 import java.awt.*; 2 import java.awt.event.WindowAdapter; 3 import java.awt.event.WindowEvent; 4 import java.lang.ref.WeakReference; 5 6 /** 7 * @test 8 * @summary AwtList not garbage collected 9 * @run main AwtListGarbageCollectedTest 10 */ 11 12 public class AwtListGarbageCollectedTest { 13 public static void main(String[] args) { 14 Frame frame = new Frame("List leak test"); 15 try { 16 test(frame); 17 } catch (RuntimeException e) { 18 frame.dispose(); 19 throw e; 20 } 21 } 22 23 private static void test(Frame frame) { 24 WeakReference<List> weakRef = null; 25 try { 26 frame.addWindowListener(new WindowAdapter() { 27 @Override 28 public void windowClosing(WindowEvent e) { 29 System.exit(0); 30 } 31 }); 32 frame.setSize(300, 200); 33 Panel panel = new Panel(); 34 frame.add(panel); 35 frame.setVisible(true); 36 37 { 38 List list = new List(); 39 frame.add(list); 40 list.setMultipleMode(true); 41 frame.remove(list); 42 weakRef = new WeakReference<List>(list); 43 } 44 45 //make OutOfMemoryError to force gc 46 String veryLongString = new String(new char[100]); 47 while (true) { 48 veryLongString += veryLongString; 49 } 50 } catch (OutOfMemoryError e) { 51 if (weakRef == null) 52 throw new RuntimeException("Weak ref wasn't created"); 53 if (weakRef.get() != null) 54 throw new RuntimeException("List wasn't garbage collected"); 55 } 56 } 57 }