V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
a895259846
V2EX  ›  Java

Java 中 arrayList 最大容量是 Integer.MAX_VALUE-8

  •  1
     
  •   a895259846 · 2017-05-10 14:05:04 +08:00 · 5674 次点击
    这是一个创建于 2783 天前的主题,其中的信息可能已经有所发展或是发生改变。

    private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); }

    private static int hugeCapacity(int minCapacity) {
        if (minCapacity < 0) // overflow
            throw new OutOfMemoryError();
        return (minCapacity > MAX_ARRAY_SIZE) ?
            Integer.MAX_VALUE :
            MAX_ARRAY_SIZE;
    }
    

    我的问题: 虽然定义减少 8 位,但是后面如果还是不够用,那么还是可以继续扩容的。为何定位减少 8 ?为何能扩容? 目前解释:①存储 Headerwords ;②避免一些机器内存溢出,减少出错几率,所以少分配③最大还是能支持到 Integer.MAX_VALUE 最终还是有疑问:如果集合容量无限接近最大值,那么官方解释中集合存储的 HeaderWords 呢,难道被清除掉了?

    7 条回复    2017-05-22 17:13:47 +08:00
    MrFireAwayH
        1
    MrFireAwayH  
       2017-05-12 19:47:30 +08:00 via Android
    我查到的最大限度就是 Max Value 没有 -8 不知楼主哪里得到的资料
    MrFireAwayH
        2
    MrFireAwayH  
       2017-05-12 19:50:26 +08:00 via Android
    MrFireAwayH
        3
    MrFireAwayH  
       2017-05-12 19:55:10 +08:00 via Android
    尝试了谷歌搜索 Headerwords 没有发现有价值的信息……敢问来源?
    jyf007
        5
    jyf007  
       2017-05-12 21:39:11 +08:00
    图标出戏了,我只是路过帮顶
    MrFireAwayH
        6
    MrFireAwayH  
       2017-05-12 23:09:58 +08:00 via Android
    @as463419014 赞!原来如此
    a895259846
        7
    a895259846  
    OP
       2017-05-22 17:13:47 +08:00
    @MrFireAwayH
    @as463419014 其实这个我也看了,但是这个回答还是有点疑问的。我找了很多资料,最好的解释也就是避免机器内存溢出,之所以最后还是能支持到最大值,是为了支持类似(Max_Value-2)这样的数值。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6057 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:09 · PVG 10:09 · LAX 18:09 · JFK 21:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.