Java 數組的最大大小
瀏覽人數:532最近更新:
1. 概述
在本教程中,我們將了解 Java 中數組的最大大小。
2. 最大尺寸
Java 程序最多只能分配一個特定大小的數組。這通常取決於我們使用的 JVM 和平台。由於數組的索引為int, the
近似索引值可以為2 ^ 31 –1。基於這種近似,我們可以說數組在理論上可以容納2,147,483,647個元素。
對於我們的示例,我們在 Linux 和 Mac 機器上**使用 Java 8 和 Java 15的 OpenJDK和Oracle 實現。**在我們的整個測試過程中,結果都是一樣的。
這可以使用一個簡單的例子來驗證:
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 。
byte
、 boolean
、 long
和其他數據類型可以觀察到相同的行為,並且結果是相同的。
3. ArraySupport
ArraysSupport
是 OpenJDK 中的一個實用程序類,它建議最大大小為**Integer.MAX_VALUE
– 8以使其適用於所有 JDK 版本和實現**。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議