错误:线程“main”中的异常java.lang.OutOfMemoryError:Java堆空间

时间:2016-07-21 07:13:16

标签: java out-of-memory

我的计划如下:

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&gt;中更改了尺寸运行配置&gt;参数如同其他帖子中提到的相同错误,但我也得到同样的错误。

我该怎么办?

1 个答案:

答案 0 :(得分:6)

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

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

正如Thomas评论的那样,使用如果声明更合适。

BTW,请参阅Naming Conventions以获取Java命名。对于您的情况,类名的第一个字母应该大写。使用EvenNumber代替evenNumber