集合原码解读--ArrayList(MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8)

1. 为什么无法创建更大的数组?

Attempts to allocate larger arrays may result in OutOfMemoryError

如果数组长度过大,可能出现的两种错误

OutOfMemoryError: Java heap space  堆区内存不足(这个可以通过设置JVM参数 -Xmx 来指定)。

OutOfMemoryError: Requested array size exceeds VM limit  超过了JVM虚拟机的最大限制,我的window64就是 Integer.MAX_VALUE-1 .

(这些内容涉及到JVM虚拟机知识,以后再进一步补充)

 

2. 为什么数组长度的最大值是Integer.MAX_VALUE - 8

数组作为一个对象,需要一定的内存存储对象头信息,对象头信息最大占用内存不可超过8字节。


3. 对象头信息Object head words

数组的对象头信息相较于其他Object,多了一个表示数组长度的信息。

具体的对象头内容,可以参考 JVM分析


其他参考文章 https://stackoverflow.com/questions/35756277/why-the-maximum-array-size-of-arraylist-is-integer-max-value-8




 


你可能感兴趣的:(JavaSe基础知识)