FULL PRODUCT VERSION : Java(TM) SE Runtime Environment (build 1.6.0_18-b07) Java HotSpot(TM) Server VM (build 16.0-b13, mixed mode) ADDITIONAL OS VERSION INFORMATION : Linux localhost.localdomain 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 i686 i386 GNU/Linux Windows XP SP 3 A DESCRIPTION OF THE PROBLEM : If you create/destroy swing components which have defined the Nimbus.Overrides client properrty - Nimbus leaks substantial number of the following objects: com.sun.java.swing.plaf.nimbus.NimbusDefaults$ColorTree$Node java.util.LinkedList$Entry java.util.LinkedList com.sun.java.swing.plaf.nimbus.DerivedColor$UIResource (approx 30,000 objects each - representing about 100 create/destroy cycles) Other objects leak as well - but not to same extent as above. sun.awt.image.BufImgSurfaceData java.lang.Integer java.awt.Font java.awt.image.BufferedImage java.awt.geom.Rectangle2D$Float sun.awt.image.IntegerInterleavedRaster java.lang.Object java.awt.image.DataBufferInt java.awt.Color sun.awt.image.BufImgVolatileSurfaceManager (approx 100 objects each - representing about 100 create/destroy cycles) On an WinXP machine delibretely limited to only 64M of Heap (represents minimum spec machine) - the rich client application I have grinds to a halt after about 100 screen entries. Typical user will get there in less than 20 minutes. I also have some .png files grabbed from doing filter based on least squares fit for jmap -histo:live dumps run every second. On version 18 it is quite clear that there is a substantial memory leak. On version 10 no such leak is present. STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : See source code example below. EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - No memory leak. ACTUAL - A memory leak. REPRODUCIBILITY : This bug can be reproduced always. ---------- BEGIN SOURCE ---------- Following code segment replicates the defect: import java.awt.Insets; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class NimbusBug { public static void main(String args[]) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException, InterruptedException { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); JFrame frame =new JFrame(); UIDefaults nimbus=new UIDefaults(); nimbus.put("Button.contentMargins",new Insets(6,0,6,0)); while ( true ) { JDialog dialog = new JDialog(frame,"Test"); JButton button =new JButton("Hello World"); button.putClientProperty("Nimbus.Overrides",nimbus); dialog.getContentPane().add(button); dialog.pack(); dialog.setVisible(true); Thread.sleep(100); dialog.setVisible(false); dialog.dispose(); Thread.sleep(1000); } } } ---------- END SOURCE ----------
|