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

Mil*_*ita 3 java arrays

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

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

int[] array = new int[Integer.MAX_VALUE]; // 2^31-1 = 2147483647
Run Code Online (Sandbox Code Playgroud)

我得到这种错误:

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

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

Tod*_*odd 5

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

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

可能的解决方案是

1)找出一种不要声明数组如此大的方法.我正在弄清楚为什么你需要这样的东西.查看列表,可以动态调整大小.

2)增加启动时为VM提供的内存量(堆的大小).在这个问题上进行了很好的讨论.

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

  • @MiljanRakita这样的问题就像"我能建造的汽车的最大长度是多少?"一样有意义. (2认同)