我注意到,我创建的所有Swing应用程序似乎都在不断分配新对象。

考虑这个小应用程序:

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings({ "javadoc", "serial" })
public class SwingTest extends JFrame {
    public static void main(String[] args) {
        new SwingTest().setVisible(true);
    }
    public SwingTest() {
        setTitle("SwingTest");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(400, 400));
        setContentPane(panel);
        pack();
    }
}


我不希望它消耗太多内存,但是如果我查看VisualVM中的堆图,我会发现内存使用率不断增加,然后进行重置。是什么原因造成的?

最佳答案

这是在我的机器上对代码进行性能分析的结果(使用Netbeans Profiler在Linux 3.1.1上为OpenJDK 1.6.0_22 64位)



我建议您找出那些分配的对象是什么。您可以通过制作内存快照并进行比较来做到这一点。

请注意,Netbeans分析器与VisualVM是相同的代码库。

08-05 19:10