【发布时间】:2015-09-09 11:10:49
【问题描述】:
我正在使用 JProfiler 对基于 swing 的桌面应用程序的内存问题进行故障排除。在 JProfiler 的内存视图中,我看到一个类的 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。有什么办法可以释放内存和实例数?
【问题讨论】:
-
你在说什么课?
-
您确定确实存在内存问题吗?首先,3MB 内存对于 Java 应用程序来说不算什么。你能验证这 40k 个对象最终不会被垃圾收集吗?从您展示的源代码来看,这些 Runnable 似乎没有任何东西会导致它们永远存在,而且它们本身也不会获取大量数据。我相信,JProfiler 只能向您显示“活动”对象的内存统计信息。这包括他们吗?
-
是的,我第二个@Thilo,3MB 不算什么。