为什么ArrayList的最大数组大小为Integer.MAX_VALUE-8?

为什么ArrayList的最大数组大小为Integer.MAX_VALUE-8?,第1张

为什么ArrayList的最大数组大小为Integer.MAX_VALUE-8?

阅读上述有关Java内存管理的文章,其中清楚指出

我认为这适用于ArrayList,因为它是Resizable array的实现。

Java数组对象的剖析

数组对象(例如int值的数组)的形状和结构与标准Java对象的形状和结构相似。主要区别在于,数组对象还有一个额外的元数据,它表示数组的大小。然后,数组对象的元数据包括:Class:指向类信息的指针,该信息描述对象的类型。对于int字段数组,这是指向int
[]类的指针。

标志:描述对象状态的标志的集合,包括对象的哈希码(如果有的话)以及对象的形状(即,对象是否为数组)。

Lock:对象的同步信息,即对象当前是否同步。

Size:数组的大小。

最大尺寸

2^31 = 2,147,483,648

作为数组,它本身需要

8 bytes
存储大小
2,147,483,648

所以

2^31 -8 (for storing size ),

因此最大数组大小定义为Integer.MAX_VALUE-8



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5600713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存