【发布时间】:2012-11-04 01:24:20
【问题描述】:
我注意到我创建的所有 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 中的堆图,我会看到内存使用量不断增加,然后重置。这是什么原因造成的?
【问题讨论】:
-
锯齿状可能是轮廓本身造成的。
-
锯齿模式应该是GC扫死引用造成的。
-
确认由测量本身引入:stackoverflow.com/questions/12958219/… - 故事的寓意:小心你的工具,避免草率下结论。 Swing 不断地分配额外的对象 只看堆,这不过是一个疯狂的假设。检查哪些对象是由谁分配的......反驳了这个假设;-)
标签: java swing memory-management garbage-collection jvm