【问题标题】:"java.lang.OutOfMemoryError: Java heap space" for adding elements into array“java.lang.OutOfMemoryError: Java heap space”用于将元素添加到数组中
【发布时间】:2016-12-12 16:39:24
【问题描述】:

在 arrayList 中添加值时出现“线程“主”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;
    }
}

请帮助我。如何优化上述代码,以便我可以减少时间并消除异常。

【问题讨论】:

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


【解决方案1】:

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

进一步:当您(显然)只需要一些代码时,存储字符串是在浪费空间。 我会尝试用一些整数编码替换 GEN_err 和 Greater_than,并存储三个整数(或短整数或字节)的数组,你应该使用更少的内存。

【讨论】:

  • 但我没有为 String[] 预定义大小。数据可能会增加或减少。
  • 好吧,如果您不向我们提供规范(仅代码),我们很难提供优化某些代码的提示。
  • 我想我已经给出了整个主课只是为了理解这个场景。如果您还需要什么,请告诉我。
  • 我已经给出了两个建议,它们取决于您是否可以 1) 用整数代码替换字符串,以及 2) 假设所有子列表的大小为 3 - 您的代码没有(不能)说明这一点,你必须说明这一点。
猜你喜欢
  • 2012-08-03
  • 2020-11-30
  • 2016-04-15
  • 1970-01-01
  • 2013-12-20
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
相关资源
最近更新 更多