2015-09-09 3 views
0

Я использую 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 экземпляров выше класса. Что можно сделать, чтобы освободить память и количество экземпляров?

+1

В каком классе вы говорите? – BetaRide

+1

У вас действительно есть проблема с памятью? Для начала, 3MB памяти ничего для Java-приложения. Можете ли вы проверить, что 40k-объекты не собираются собирать мусор? Из исходного кода, который вы показываете, эти Runnables, похоже, не имеют ничего, что могло бы заставить их оставаться навсегда, и они сами не захватывают огромное количество данных. JProfiler может показать вам статистику памяти только для «живых» объектов, я полагаю. – Thilo

+0

Да, я второй @Thilo, 3MB ничего. – Cosmin

ответ

0

Вы уверены, что закрыли все, что нужно двигателю, чтобы закрыть?

Вы пишете «добавить из события новую строку в JTable», которая кажется плохой, но код использует модель, может быть хорошей.

JTable с очень большими наборами данных может/должен использоваться в «виртуальном» режиме. Посмотрите на Google. 4MB ОЗУ обычно не проблема, но сбор мусора 40k «штук предметов» может быть затруднен :(

+0

Попробует реализовать JTable в виртуальный режим :) Возможно, здесь используется разбиение на страницы. – amit

 Смежные вопросы

  • Нет связанных вопросов^_^