某些 VM 在数组中保留一些标头词。
最大“安全”号码将be 2 147 483 639 (Integer.MAX_VALUE - 8)
源码 http://www.docjar.com/html/api/java/util/ArrayList.java.html
**
191 * The maximum size of array to allocate.
192 * Some VMs reserve some header words in an array.
193 * Attempts to allocate larger arrays may result in
194 * OutOfMemoryError: Requested array size exceeds VM limit
195 */
196 private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
因此,这取决于现在系统上JVM可用的最大内存
编辑:为什么它显示OOM。
晶片数量 = 2 147 483 639
一个元素所需的字节数 = 4
元素总内存仅为 8589934556 KB == 8.589934555999999 GB
现在,如果数组的总内存使用率不是 8 个字节的倍数,则大小将向上舍入到下一个 8 的多字节。
因此,由于开销,您还需要比分配的更多内容,并且应该是连续内存