数组的最大大小 – 类型不匹配:无法从long转换为int

我看到数组的最大大小只能是Int的最大大小。 为什么Java不允许长度为Max的数组?

long no = 10000000000L; int [] nums = new int[no];//error here 

您必须向Java设计人员解决“为什么”的问题。 其他任何人都只能推测。 我的猜测是,他们觉得任何人都应该有一个20亿元素的arrays(这可能是公平的)。

遗憾的是,Java不支持超过2 ^ 31个元素的数组。

即long []数组的16 GiB空间。

尝试创建这个……

 Object[] array = new Object[Integer.MAX_VALUE - 4]; 

你应该得到OUTOFMEMMORY错误……所以最大尺寸是Integer.MAX_VALUE - 5

  1. int大小的长度允许2 31 -1(“~20亿”)元素的数组。 在绝大多数arrays的使用中,这很多。

  2. 多个元素的数组将占用2 GB到16 GB的内存,具体取决于元素类型。 当Java出现在1995年时,新PC只有大约8兆字节的RAM。 而那些32位操作系统,即使他们在磁盘上使用虚拟内存,也对他们可以分配的连续内存块的大小有实际的限制,因为其他分配的东西分散在周围在进程的地址空间中。 因此,int大小的数组长度的限制是不可测试的,不可预测的,并且只是很远。

  3. 在32位CPU上,使用int的算法比使用long更快。

  4. 数组是一种基本的内部类型,它们被广泛使用。 较长的长度每个arrays需要额外存储4个字节,这反过来会影响内存中数组的堆积,从而可能在它们之间浪费更多字节。 (即使较长的长度几乎不会有用。)

  5. 如果您确实需要超过20亿个项目的RAM内存储,则可以使用数组数组。