private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
最大容量为Integer.MAX_VALUE-8,
public ArrayList(int initialCapacity)
通过以上构造函数指定初始容量,而int最大值就是Integer.MAX_VALUE,-8是为了避免oom,因为有些vm可能存储头信息在数组里。因此最大容量为Integer.MAX_VALUE-8。但是当MAX_ARRAY_SIZE仍不够时,容量会扩展至HugeCapacity,为Integer.MAX_VALUE。