Java 數組的最大大小

    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 版本和實現**。