为什么java中的数组大小有最大限制?

时间:2014-05-14 04:12:15

标签: java stack heap-memory

我得从中找到 Do Java arrays have a maximum size? 数组大小有最大限制。

可能意图可能耗尽堆空间。是的,我同意这一点。

我无法理解以下内容:

  1. 但是为什么每个阵列都有这个限制?

  2. 如果我有很多这么大的数组呢?

  3. 为什么不在总体上达到一定的堆空间阈值(总消耗量)时抛出异常,而不是每个数组都有上限?

  4. 注意:

    1. 在Python中,他们有此限制How Big can a Python Array Get?

    2. 在C中,似乎没有限制(使用的硬件除外)The maximum size of an array in C

3 个答案:

答案 0 :(得分:5)

java中的数组由int值索引。所以,即使你有内存,最大的没有。数组可以容纳的元素是2 ^ 31-1(如果我的数字错了,请纠正我......但是你明白了。)

但是,你的内存将限制你可以在堆中保留多少个这样大的数组......

答案 1 :(得分:3)

数组的lengthint,因此您不能允许具有超过Integer.MAX_VALUE个元素的数组而不会中断length。打破length将是巨大的;它需要在整个地方进行源代码更改和重新编译。

鉴于您已经拥有length字段规定的长度上限,Integer.MAX_VALUE上限或Integer.MAX_VALUE - 5之类的上限之间没有太大差异。

答案 2 :(得分:0)

让我们说如果你有一个阵列

String[] array = new String[22L];

eclipse中的错误消息

Type mismatch: cannot convert from long to int 

清楚地告诉我,数组的大小取长度为int,受限于** max int值,受限于32位**