2016-08-06 73 views
0

在arrayList中添加值時,我得到「線程中的異常」主「java.lang.OutOfMemoryError:Java堆空間」異常。這只是一個例子「java.lang.OutOfMemoryError:Java堆空間」將元素添加到數組中

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_errGreater_than,並且存儲三個整數(或短褲或字節)的數組,而你應該使用較少的內存。

+0

但我還沒有預先設置爲String []定義大小。數據可能會增加或減少。 –

+0

那麼,如果你不給我們規格說明(只有代碼),我們很難給出優化一些代碼的提示。 – leonbloy

+0

我想我已經給了整個主要的課程來了解情況。讓我知道你有什麼需要的。 –

相關問題