java.lang.OutOfMemoryError - new int [Integer.MAX_VALUE];

时间:2011-11-22 17:53:49

标签: java out-of-memory

我在Eclipse中编写了一个Main类,其代码如下:

...
int []test = new int[Integer.MAX_VALUE];
...

文件包含以下内容:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

这需要多少堆大小?我使用以下方法增加了eclipse大小,但它仍然失败:

-Xms4g
-Xmx4g

2 个答案:

答案 0 :(得分:7)

int在Java中是32位。您需要超过8G的内存来存储该阵列(4 *(2 31 -1))。

答案 1 :(得分:2)

  1. 由于您要声明基本类型的向量(int),Java将尝试为向量的每个位置分配32位

  2. 你的矢量长度实际上是2147483647

  3. 做一些计算:

  4. 需要内存= 32位x 2147483647 = 68719476704位= 8589934588字节

    所需内存= 8589934 KB

    所需内存= 8589 MB

    所需内存= 8.58 GB

    因此,您需要大约8 GB来运行您的应用程序。