1. 개요

이 사용방법(예제)에서는 Java에서 배열의 최대 크기를 살펴보겠습니다.

2. 최대 크기

Java 프로그램은 특정 크기까지만 배열을 할당할 수 있습니다. 일반적으로 우리가 사용하는 JVM과 플랫폼에 따라 다릅니다. 배열의 인덱스가 int이므로 대략적인 인덱스 값은 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. 어레이 지원

ArraysSupport 는 OpenJDK의 유틸리티 클래스로, 모든 JDK 버전 및 구현에서 작동하도록 최대 크기 Integer.MAX_VALUE – 8 로 제안 합니다 .

4. 결론

이 기사에서는 Java에서 배열의 최대 크기를 살펴보았습니다.

평소와 같이 이 사용방법(예제)에서 사용되는 모든 코드 샘플은 GitHub에서 사용할 수 있습니다.

Generic footer banner