我正在学习ArrayList
的Java 8文档。我得到的最大数组大小定义为Integer.MAX_VALUE - 8
意味着2^31 - 8 = 。那么我已经专注于为什么减去8或者减去why not less than 8
或more than 8
?为什么ArrayList的最大数组大小是Integer.MAX_VALUE - 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个,那么答案是什么?
请在此基础上说清楚。感谢您的合作。
如果需要超过800分的话,那么它会崩溃时,它得到了很大的。所以8是ArrayList作者估计需要的额外头文字的最大数量。 –
在不相关的说明:如果你分配一个数组与二十亿元素,可能有什么地方错了。 – Tunaki
@LouisWasserman - 在VM 8字节更高?如果可能的话,请让我知道。 – SkyWalker