Java 数组可以包含的元素数量是否有限制?如果是这样,它是什么?
原文由 Lizard 发布,翻译遵循 CC BY-SA 4.0 许可协议
Java 数组可以包含的元素数量是否有限制?如果是这样,它是什么?
原文由 Lizard 发布,翻译遵循 CC BY-SA 4.0 许可协议
这(当然)完全取决于虚拟机。
Browsing through the source code of OpenJDK 7 and 8 java.util.ArrayList
, .Hashtable
, .AbstractCollection
, .PriorityQueue
, and .Vector
,你可以看到这个 声明 被重复:
/** * Some VMs reserve some header words in an array. * Attempts to allocate larger arrays may result in * OutOfMemoryError: Requested array size exceeds VM limit */ private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
由 Martin Buchholz(Google) 于 2010-05-09 添加;由 Chris Hegarty (Oracle) 审核。
因此, 也许 我们可以说最大的“安全”数字是 2 147 483 639 ( Integer.MAX_VALUE - 8
)并且“尝试分配更大的数组可能会导致 OutOfMemoryError ”。
(是的,Buchholz 的独立声明不包括支持证据,因此这是经过深思熟虑的 对权威的呼吁。 即使在 OpenJDK 本身中,我们也可以看到类似 return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE;
的代码,它表明 MAX_ARRAY_SIZE
不但有 实际 用途。)
原文由 Pacerier 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
使用
…在 MacOS 上,答案似乎是
Integer.MAX_VALUE - 2
。一旦你超越了那个:… 你得到: