源码
/**
* 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;
会发现为什么他的大小是Integer.MAX_VALUE-8
而不是Integer.MAX_VALUE。
他的注释我感觉很模糊:
要分配的数组的最大大小。一些虚拟机在数组中保留一些头字。
尝试分配更大的数组可能会导致
OutOfMemoryError
:请求的数组大小超过了虚拟机的限制
我翻阅了stackoverFlow
和Ibm
开发者社区
找到了相关的资料
ibm开发者社区
这个画质太糊了
会发现Array
对象多了一个size
,占了64bit, 也就是8字节。
ArrayList
对象的形状和结构与标准的Java
对象类似。主要区别在于ArrayList
对象有一个额外的元数据,用于表示ArrayList
的大小