如何释放类实例和内存?

时间:2015-09-09 11:10:49

标签: java swing jprofiler

我正在使用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实例。可以做些什么来释放内存和实例计数?

1 个答案:

答案 0 :(得分:0)

你确定关闭所有发动机需要关闭的东西吗?

你写的“从事件新行添加到JTable”似乎是坏模式,但代码使用的模型,可以很好。

具有非常大数据集的JTable可以/应该在“虚拟”模式下使用。看看谷歌。 4MB的RAM通常不是问题,但收集垃圾40k“对象”可能很难:(