繁体   English   中英

为什么Java数组的最大大小为Integer.MAX_VALUE / 7?

[英]Why maximum size of an java array is Integer.MAX_VALUE/7?

我不奇怪为什么在我的计算机上,数组的最大大小为Integer.MAX_VALUE / 7
我知道数组是由整数索引的,因此数组大小不能大于Integer.MAX_VALUE。 我还阅读了一些stackoverflow讨论,发现在JVM上它有所不同,并且JVM使用了一些(5-8位)。
在那种情况下,最大值也应该是Integer.MAX_VALUE-8

Integer.MAX_VALUE-2Integer.MAX_VALUE/7之间的任何值都会给我错误: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

int[] arr = new int[Integer.MAX_VALUE/7];

这是我可以分配给计算机上数组的最大值。 是否有特定原因?

更新:我正在从eclipse运行代码,其中默认堆大小为1024Mb。 以下是我的环境中的更多详细信息:

System.out.println(Runtime.getRuntime().totalMemory()/(1024*3));
System.out.println(Runtime.getRuntime().freeMemory()/(1024*3));
System.out.println(Runtime.getRuntime().maxMemory()/(1024*3));

给出输出:

40618
40195
594773

正如cloudworker已经提到的,这里解释了数组的实际限制: Java数组是否有最大大小?

在您的情况下,1GB不足以容纳那么大的阵列堆空间。

我不知道在JVM中运行什么确切的进程,但是从我的能力上可以算出:

Integer.MAX_VALUE= ~2 billions
int = 4bytes
2billions*4bytes=8billions bytes = 8GB memory

使用1GB的堆空间,您应该可以拥有大约/ 8的MAX_VALUE。 (我认为实际上可以得到/ 8以上的原因是对JVM的一些优化)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM