2016-08-06 2 views
0

Я получаю исключение «Исключение в потоке» главного «java.lang.OutOfMemoryError: Java heap space» при добавлении значений в arrayList. Это только пример«java.lang.OutOfMemoryError: Java heap space» для добавления элементов в массив

public class Test  { 

    public static void main(String[] args) 
    { 
     Test t= new Test(); 
     ArrayList<ArrayList<String>> deleteError = new ArrayList<ArrayList<String>>(); 
     for(TableItem item : items) // loop moves 800 times 
     { 
      for(String Element_ID : checkelementID) // another loop which check element ids which moves for 800 again 
      { 
       t.deleteErrorInArrayList("1", "GEN_err", "11", deleteError); 
       t.deleteErrorInArrayList("1", "Greater_than", "11", deleteError); 

       t.deleteErrorInArrayList("1", "GEN_err", "16", deleteError); 
       t.deleteErrorInArrayList("1", "Greater_than", "16", deleteError); 
      } 
     } 


    } 
    public void deleteErrorInArrayList(String rowID,String message,String column,ArrayList<ArrayList<String>> mainlist) 
    { 
     ArrayList<String> list = new ArrayList<String>(); 
     list.add(rowID); 
     list.add(message); 
     list.add(column); 
     mainlist.add(list); 
     list = null; 
    } 
} 

Пожалуйста, помогите мне. Как оптимизировать код выше, чтобы я мог сократить время и удалить исключение.

+0

Возможный дубликат [java.lang.OutOfMemoryError: куча Java-пространства] (http://stackoverflow.com/questions/1596009/java-lang-outofmemoryerror-java-heap-space) –

ответ

0

Учитывая, что все элементы внутренних списков имеют одинаковую структуру (три строки), вы можете сделать это лучше, сохранив массив (String[]) вместо ArrayList.

Далее: вы теряете пространство, сохраняя строки, когда вам (по-видимому) нужны только некоторые коды. Я бы попробовал заменить GEN_err и Greater_than на некоторую целочисленную кодировку и вместо этого хранить массивы из трех целых чисел (или шорт или байтов), и вы должны использовать меньше памяти.

+0

Но у меня нет предварительной настройки, определенный размер для String []. Данные могут быть увеличены или уменьшены. –

+0

Ну, нам сложно дать советы по оптимизации кода, если вы не дадите нам спецификации (только код). – leonbloy

+0

Я думаю, что я дал весь основной класс, чтобы понять сценарий. Дайте мне знать, если что-то еще вам нужно. –

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