gpt4 book ai didi

java - 为什么java数组的最大大小是Integer.MAX_VALUE/7?

转载 作者:行者123 更新时间:2023-12-02 02:22:08 27 4
gpt4 key购买 nike

我很惊讶为什么在我的机器上,数组的最大大小是 Integer.MAX_VALUE/7
我知道数组是按整数索引的,因此数组大小不能大于 Integer.MAX_VALUE。我还读了一些stackoverflow讨论中我发现它在 JVM 上有所不同,有些(5-8 位)由 JVM 使用。
在这种情况下,最大值也应为 Integer.MAX_VALUE-8

Integer.MAX_VALUE-2Integer.MAX_VALUE/7 之间的任何值都会给出错误:线程“main”java.lang 中出现异常。 OutOfMemoryError:Java 堆空间

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 已经提到的,数组的真正限制解释如下:Do Java arrays have a maximum size?

在您的情况下,1GB 的堆空间不足以容纳这么大的数组。

我不知道 JVM 中运行的具体进程是什么,但据我所知:

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

使用 1GB 堆空间,您应该能够拥有约/8 的 MAX_VALUE。 (我认为你实际上可以获得超过/8 的原因是 JVM 中的一些优化)

关于java - 为什么java数组的最大大小是Integer.MAX_VALUE/7?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48360302/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com