我注意到,我创建的所有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是相同的代码库。