美文网首页
ArrayList数组长度的大小

ArrayList数组长度的大小

作者: 柳蒿 | 来源:发表于2019-10-18 15:40 被阅读0次

最近在看JDK源码,其中ArrayList中的部分有这样一行

private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

通常,数组的最大值都是Integer.MAX_VALUE,在这里为什么要减8?

要解决这个问题,首先要明白Java中数组的结构。

数组对象的形状和结构(如int值数组)与标准Java对象类似。主要区别在于数组对象有一个额外的元数据,用于表示数组的大小。然后,数组对象的元数据由以下部分组成:
Class:指向描述对象类型的类信息的指针。在int数组的情况下,这是一个指向int []类的指针。
标志:描述对象状态的标志集合,包括该对象的散列码(如果有)以及对象的形状(即对象是否为数组)。
锁定:对象的同步信息 - 即对象是否当前同步。
大小:数组的大小。

减去的空间就是用来存储数组大小,标志,锁定,类信息指针等对象头信息,对象头信息最大占用内存不可超过8字节。

相关文章

  • ArrayList数组长度的大小

    最近在看JDK源码,其中ArrayList中的部分有这样一行 private static final int M...

  • 关于ArrayList

    ArrayList简介 ArrayList内部是以动态数组存放数据的,所谓动态数组,不是数组本身可以改变长度,而是...

  • Java基础day08ArrayList和继承

    ArrayList 类 对象数组 数组长度是固定, 无动态扩容 java.util.ArrayList 集合类,更...

  • 数组和ArrayList区别

    数组可以包含基本类型和对象类型,ArrayList 只能包含对象类型 数组大小固定,ArrayList 大小可以动...

  • ArrayList源码解析

    ArrayList简介 ArrayList底层是数组队列,相当于动态数组。与java中的数组相比,它的长度能动态增...

  • Java中的数据结构

    collection接口 List接口 ArrayList是数组结构,长度可变,在add的时候,会比较前数组的长度...

  • Android面试(未完)

    Java基础知识点 集合相关 ArrayList ArrayList内部实现是数组,且当数组长度不够时,数组的会进...

  • java se ArrayList集合类

    一、Arraylist与list的区别:数组长度在运行过程中不可改变,ArrayList集合的长度是随意变化的。A...

  • Java面试准备(Java集合)

    ArrayList、LinkedList、Vector区别 ArrayList 是一个可改变大小的数组,其大小将会...

  • ArrayList的介绍和源码解析

    ArrayList的介绍 1 ArrayList简介 ArrayList是List 接口的大小可变数组的实现。实现...

网友评论

      本文标题:ArrayList数组长度的大小

      本文链接:https://www.haomeiwen.com/subject/rmopyctx.html