【问题标题】:Error:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space错误:线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间
【发布时间】:2016-11-24 15:24:47
【问题描述】:

我的程序如下:

import java.util.*;

class evenNumber {
    ArrayList<Integer> arrL=new ArrayList<Integer>();

    ArrayList<Integer> saveEvenNumber(int N) {
        if(N<2)
            System.out.println("N should be greater than 2");
        else 
            for(int i=1;i<N;i++)
            {
                while(i%2==0)
                {
                    arrL.add(i);
                }
            }

        return arrL;
    }

    void printEvenNumber() {
        Iterator<Integer> tr=arrL.iterator();
        while(tr.hasNext())
            {
                System.out.print(tr.next());
                System.out.print("*2, ");
            }
    }
}


public class First {
    public static void main(String args[]) {
        evenNumber eN=new evenNumber();
        eN.saveEvenNumber(13);
        eN.printEvenNumber();
    }
}

我收到以下错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.ArrayList.grow(Unknown Source)
    at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
    at java.util.ArrayList.add(Unknown Source)
    at list.evenNumber.saveEvenNumber(First.java:15)
    at list.First.main(First.java:35)`

我已经更改了 Run > Run configuration > Arguments 中的大小,正如其他帖子中提到的相同错误但我也遇到了相同的错误。

我该怎么办?

【问题讨论】:

  • 您不断在while(i%2==0) { arrL.add(i); } 的列表中添加元素。与您的内存设置无关,这迟早会耗尽内存。
  • 除了 Andreas 的评论,我猜你想用 if(i%2==0) 代替。
  • 您在printEvenNumber 中的迭代方式是一种方法,但简单的for 循环会更易读:for (Integer i : arrL) { System.out.print(i); System.out.print("*2, "); } 也可以这样做。

标签: java out-of-memory


【解决方案1】:

i == 2时,while循环将永远执行,这就是java.lang.OutOfMemoryError被抛出的原因。

arrL.add(i); 之后添加break;

正如 Thomas 评论的,这里使用 if 语句 更合适。

顺便说一句,java命名参考Naming Conventions。对于您的情况,类名的第一个字母应大写。使用EvenNumber 而不是evenNumber

【讨论】:

  • if 语句将是更好的解决方案。
猜你喜欢
  • 2018-07-08
  • 2011-01-23
  • 2023-03-13
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多