【发布时间】:2016-06-15 20:10:21
【问题描述】:
我正在研究 ArrayList 的 Java 8 文档。我得到最大数组大小定义为Integer.MAX_VALUE - 8 表示 2^31 – 8 = 2 147 483 639。然后我重点讲了为什么要减去8或why not less than 8或more than 8?
/**
* The maximum size of array to allocate.
* 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;
我得到了一些相关的答案,但没有完成我的主旨。
- Do Java arrays have a maximum size?
- How many data a list can hold at the maximum
- Why I can't create an array with large size?
根据文档"Some VMs reserve some header words in an array",有些人给出了一些逻辑。所以对于标题词,减去 8。但是在这种情况下,如果标题词需要超过8个,那么答案是什么?
请在此基础上澄清我。提前感谢您的合作。
【问题讨论】:
-
如果需要超过8个标题词,那么当它变得那么大时它会崩溃。所以 8 是 ArrayList 作者对需要的额外标题字的最大数量的估计。
-
在一个不相关的说明中:如果你正在分配一个包含 20 亿个元素的数组,那么某处可能有问题。
-
@LouisWasserman - VM 8 字节更高?如果可能,请告诉我。
-
@SkyWalker,这句话毫无意义。此外,它是 8 个字节,而不是 8 位,这是 很多 的标题空间。
-
@LouisWasserman 我明白了。所以VM的header不会超过8个字节