【发布时间】:2012-09-11 20:21:44
【问题描述】:
我创建了一个扫雷游戏,每次开始新游戏时都会生成一个二维 JButton 数组。问题是内存使用量呈指数增长(JProfiler 说它是 JButtons)。似乎不仅旧的 Jbutton 实例被保存在内存中,而且实例的数量翻了一番。我怎样才能告诉它摆脱旧的 JButtons?谢谢
private JButton[][] but;
but = new JButton[row][col];
for (int i = 0;i<row;i++)
{
for (int j = 0;j<col;j++){
but[i][j]= new JButton();
but[i][j].setName(i+":"+j);
mine.add(but[i][j]);
but[i][j].addMouseListener(this);
}
}
【问题讨论】:
-
为什么旧实例不消失?
-
添加新按钮时,您是否曾从组件中删除按钮?除此之外,它看起来不像内存泄漏。 PS:泰勒关于重用而不是重新创建的答案是一个很好的答案。
-
另外,你的意思是从字面上看成指数还是只是“非常快”的一种意思?
-
可能是 mine.add(but[i][j]);正在维护对旧实例的引用。
-
我认为这是“几何上的”。无论如何,通常它应该以算法方式增长(100-200-300)。您确定您的代码不在循环内吗?我建议您在每次创建新按钮时记录一个语句,以检查它为何如此急剧上升。
标签: java swing memory-leaks jbutton jtogglebutton