Я использую JProfiler для устранения неполадок моего настольного приложения на основе swing для проблем с памятью. В представлении памяти JProfiler я вижу 40Kэкземпляров класса и с использованием 3 МБ памяти.Как освободить экземпляры классов и память?
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 экземпляров выше класса. Что можно сделать, чтобы освободить память и количество экземпляров?
В каком классе вы говорите? – BetaRide
У вас действительно есть проблема с памятью? Для начала, 3MB памяти ничего для Java-приложения. Можете ли вы проверить, что 40k-объекты не собираются собирать мусор? Из исходного кода, который вы показываете, эти Runnables, похоже, не имеют ничего, что могло бы заставить их оставаться навсегда, и они сами не захватывают огромное количество данных. JProfiler может показать вам статистику памяти только для «живых» объектов, я полагаю. – Thilo
Да, я второй @Thilo, 3MB ничего. – Cosmin