java中的最大数组长度Integer.MAX_VALUE不起作用

时间:2015-09-07 23:42:17

标签: java arrays

尝试获得最大数组长度。我在网上发现最大数组长度实际上是最大整数值。

我在代码中使用了这段代码:

int[] array = new int[Integer.MAX_VALUE]; // 2^31-1 = 2147483647

我得到了这样的错误:

Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
    at IntMaxValueArrayLength.main(IntMaxValueArrayLength.java:7)

我也在互联网上发现2 ^ 31-1不能是最大值,我需要 减去一些数字,我试图减去100000但仍然得到相同的错误。

1 个答案:

答案 0 :(得分:5)

  

java.lang.OutOfMemoryError:请求的数组大小超过VM限制

这意味着您正在创建一个不适合内存的数组。仅仅因为该语言允许您创建一个大的数组,并不意味着它总是适合内存。

可能的解决方案是:

1)找出一种不要声明数组如此大的方法。我在描述为什么你需要这样的东西。查看List,可以动态调整大小。

2)增加启动时为VM提供的内存量(堆的大小)。 A good discussion takes place in this question

如果你告诉我们为什么你需要一个大的数组,也许我们可以用不同的数据结构或算法帮助你找到解决方法。