Java配列の最大サイズ
1. 概要
このチュートリアルでは、Javaの配列の最大サイズを確認します。
2. 最大サイズ
Javaプログラムは、特定のサイズまでの配列のみを割り当てることができます。 通常、使用しているJVMとプラットフォームによって異なります。 配列のインデックスは int、
この例では、LinuxおよびMacマシンでJava8およびJava15の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
最初のエラーは最後の2つとは異なることに注意してください。 last 2つのエラーは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のユーティリティクラスであり、最大サイズ a s Integer.MAX_VALUE – 8 を使用して、すべてのJDKで動作するようにすることを提案します。バージョンと実装。
4. 結論
この記事では、Javaでの配列の最大サイズについて説明しました。
いつものように、このチュートリアルで使用されるすべてのコードサンプルはGitHubで入手できます。