我正在使用JProfiler来解决基于swing的桌面应用程序的内存问题。在JProfiler的Memory视图中,我看到一个类的 40K 实例并使用 3MB内存。
DefaultTableModel summaryModel = null;
void insertEnv(final Map<String, String> configMap,final String variable,final String value)
{
this.configMap = configMap;
Runnable runnable = new Runnable()
{
public void run()
{
Vector dataVector = summaryModel.getDataVector();
for(int row = 0; dataVector != null && row < dataVector.size(); row++)
{
Vector rowData = (Vector)dataVector.get(row);
if(rowData.get(0).toString().equals(variable))
{
summaryModel.removeRow(row);
}
}
Object[] row = new Object[] {variable, value };
summaryModel.addRow(row);
}
};
SwingUtilities.invokeLater(runnable);
}
在insertEnv()函数中,我在JTable中添加新行。此函数被称为40K次,因此上述类的40K实例。可以做些什么来释放内存和实例计数?
答案 0 :(得分:0)
你确定关闭所有发动机需要关闭的东西吗?
你写的“从事件新行添加到JTable”似乎是坏模式,但代码使用的模型,可以很好。
具有非常大数据集的JTable可以/应该在“虚拟”模式下使用。看看谷歌。 4MB的RAM通常不是问题,但收集垃圾40k“对象”可能很难:(