尝试获得最大数组长度。我在网上发现最大数组长度实际上是最大整数值。
我在代码中使用了这段代码:
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但仍然得到相同的错误。
答案 0 :(得分:5)
java.lang.OutOfMemoryError:请求的数组大小超过VM限制
这意味着您正在创建一个不适合内存的数组。仅仅因为该语言允许您创建一个大的数组,并不意味着它总是适合内存。
可能的解决方案是:
1)找出一种不要声明数组如此大的方法。我在描述为什么你需要这样的东西。查看List,可以动态调整大小。
2)增加启动时为VM提供的内存量(堆的大小)。 A good discussion takes place in this question
如果你告诉我们为什么你需要一个大的数组,也许我们可以用不同的数据结构或算法帮助你找到解决方法。