" java.lang.OutOfMemoryError:Java堆空间"用于将元素添加到数组中

时间:2016-08-06 10:25:23

标签: java performance out-of-memory heap-memory

我得到"线程中的异常" main" java.lang.OutOfMemoryError:Java堆空间"在arrayList中添加值时出现异常。这只是一个例子

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;
    }
}

请帮帮我。如何优化上面的代码,这样我可以减少时间并删除异常。

1 个答案:

答案 0 :(得分:0)

鉴于内部列表的所有元素具有相同的结构(三个字符串),您可以通过存储数组(String[])而不是ArrayList来做得更好。

此外:当你(显然)只需要一些代码时,你通过存储字符串来浪费空间。 我尝试用一​​些整数编码替换GEN_errGreater_than,并存储三个整数(或短路或字节)的数组,而你应该使用更少的内存。