2011-11-22 69 views
2

我写了一个主类在Eclipse中使用如下代码:java.lang.OutOfMemoryError - new int [Integer.MAX_VALUE];

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

它文件具有以下内容:

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

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

-Xms4g 
-Xmx4g 
+5

你会用20亿整数在_earth_上做什么? – thecoop

+0

ArrayList Marcelo

回答

7

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

+0

它们是32位,但它们是有符号的,所以数组只有2 31 1个元素。 (但是你的实际答案是正确的--4×2^1个字节是8GB - 因此无论如何+1。) – ruakh

+0

Gah,得到了计算权,但粘贴的公式是错误的: - /感谢您的更正。 – Mat

2
  1. 既然你宣布你的基本类型的矢量(INT),Java将尝试alocate 32位为您的矢量的每一个现在的位置

  2. 你的长度矢量是真的2147483647

  3. 所以做一些计算:

存储器需要32位= 2147483647 X = 68719476704位= 8589934588个字节

需要的内存= 8589934 KB

需要的内存= 8589 MB

需要的内存= 8.58 GB

所以,你将需要大约8 GB用于运行应用程序的。

相关问题