拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 Java 数组的最大大小

Java 数组的最大大小

白鹭 - 2021-11-24 449 0 0

1. 概述

在本教程中,我们将了解 Java 中数组的最大大小。

2. 最大尺寸

Java 程序最多只能分配一个特定大小的数组。这通常取决于我们使用的 JVM 和平台。由于数组的索引为int, the近似索引值可以为2 ^ 31 –1。基于这种近似,我们可以说数组在理论上可以容纳2,147,483,647个元素

对于我们的示例,我们在 Linux 和 Mac 机器上**使用 Java 8 和 Java 15的 OpenJDKOracle 实现。**在我们的整个测试过程中,结果都是一样的。

这可以使用一个简单的例子来验证:

for (int i = 2; i >= 0; i--) {

 try {

 int[] arr = new int[Integer.MAX_VALUE - i];

 System.out.println("Max-Size : " + arr.length);

 } catch (Throwable t) {

 t.printStackTrace();

 }

 }

在上述程序的执行过程中,使用 Linux 和 Mac 机器,观察到类似的行为。在使用**VM 参数-Xms2G -Xmx2G,**执行时,我们将收到以下错误:

java.lang.OutOfMemoryError: Java heap space


 at com.example.demo.ArraySizeCheck.main(ArraySizeCheck.java:8)

 java.lang.OutOfMemoryError: Requested array size exceeds VM limit


 at com.example.demo.ArraySizeCheck.main(ArraySizeCheck.java:8)

 java.lang.OutOfMemoryError: Requested array size exceeds VM limit

请注意,第一个错误与后两个不同。最后**两个错误提到VM限制,而第一个错误关于堆内存限制**。

现在让我们尝试使用VM 参数**-Xms9G -Xmx9G**来接收确切的最大大小:

Max-Size: 2147483645

 java.lang.OutOfMemoryError: Requested array size exceeds VM limit


 at com.example.demo.ArraySizeCheck.main(ArraySizeCheck.java:8)

 java.lang.OutOfMemoryError: Requested array size exceeds VM limit


 at com.example.demo.ArraySizeCheck.main(ArraySizeCheck.java:8)

结果显示最大大小为2,147,483,645

bytebooleanlong和其他数据类型可以观察到相同的行为,并且结果是相同的。

3. ArraySupport

ArraysSupport是 OpenJDK 中的一个实用程序类,它建议最大大小为**Integer.MAX_VALUE – 8以使其适用于所有 JDK 版本和实现**。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *