개체 힙을위한 충분한 공간을 예약 할 수 없습니다.

1. 개요

이 자습서에서는 몇 가지 가능한 시나리오를 살펴보면서 "객체 힙을위한 충분한 공간을 예약 할 수 없습니다" 오류 의 원인을 알아 봅니다 .

2. 증상

"객체 힙을위한 충분한 공간을 예약 할 수 없습니다"는 실행중인 시스템에서 발생한 메모리 제약으로 인해 Java 프로세스가 가상 머신을 만들 수 없을 때 발생하는 특정 JVM 오류입니다 .

java -Xms4G -Xmx4G -jar HelloWorld.jar Error occurred during initialization of VM Could not reserve enough space for object heap Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.

일반적으로 오류가 발생하면 두 가지 가능한 시나리오가 있습니다.

첫째, 최대 힙 크기 제한 매개 변수 ( -Xmx )를 사용 하여 Java 프로세스를 실행 하고 값 프로세스가 운영 체제에서 가질 수있는 것보다 더 많은 경우 입니다.

힙 크기 제한은 몇 가지 제약 조건에 따라 다릅니다.

  • 하드웨어 아키텍처 (32/64 비트)
  • JVM 비트 버전 (32/64 비트)
  • 우리가 사용하는 운영 체제

둘째, 동일한 시스템에서 실행되고 메모리를 소비하는 다른 애플리케이션으로 인해 Java 프로세스 가 지정된 양의 메모리를 예약 할 수없는 경우입니다 .

3. 힙 크기

Java 힙 공간은 JVM 자체에서 관리하는 런타임 Java 프로그램에 대한 메모리 할당 풀 입니다. 기본적으로 할당 풀은 초기 및 최대 크기로 제한됩니다. Java의 힙 공간에 대해 자세히 알아 보려면 여기에서이 기사를 참조하십시오.

다양한 환경에서 최대 힙 크기가 무엇이며 제한을 설정하는 방법을 살펴 보겠습니다.

3.1. 최대 힙 크기

32 비트 및 64 비트 JVM의 최대 이론적 힙 제한은 사용 가능한 메모리 공간 (32 비트 JVM의 경우 2 ^ 32 (4GB), 64 비트의 경우 2 ^ 64 (16 엑사 바이트))을 보면 쉽게 확인할 수 있습니다. 비트 JVM.

실제로는 다양한 제약으로 인해 제한이 훨씬 더 낮을 수 있으며 운영 체제에 따라 달라질 수 있습니다. 예를 들어 32 비트 Windows 시스템에서 최대 힙 크기 범위는 1.4GB에서 1.6GB 사이 입니다. 반대로 32 비트 Linux 시스템에서는 최대 힙 크기가 최대 3GB까지 늘어날 수 있습니다.

이러한 이유로, 응용 프로그램이 큰 힙을 필요로하는 경우 우리는 64 비트 JVM을 사용한다 . 그러나 힙이 큰 경우 가비지 수집기는 더 많은 작업을 수행해야하므로 힙 크기와 성능간에 적절한 균형을 찾는 것이 중요합니다.

3.2. 힙 크기 제한을 제어하는 ​​방법?

JVM의 힙 크기 제한을 제어하는 ​​두 가지 옵션이 있습니다.

먼저 각 JVM 초기화에서 Java 명령 줄 매개 변수 를 사용합니다.

-Xms Sets initial Java heap size. This value must be a multiple of 1024 and greater than 1 MB. -Xmx Sets maximum Java heap size. This value must be a multiple of 1024 and greater than 2 MB. -Xmn Sets the initial and maximum size (in bytes) of the heap for the young generation.

크기 값의 경우 문자 k 또는 K , m 또는 Mg 또는 G 를 추가하여 각각 킬로바이트, 메가 바이트 및 기가 바이트를 나타낼 수 있습니다. 문자를 지정하지 않으면 기본 단위 (바이트)가 사용됩니다.

-Xmn2g -Xmn2048m -Xmn2097152k -Xmn2147483648

둘째, 환경 변수 JAVA_OPTS 를 사용하여 위의 Java 명령 줄 매개 변수를 전역 적으로 구성합니다. 이로 인해 시스템의 각 JVM 초기화는 환경 변수에 설정된 구성을 자동으로 사용합니다.

JAVA_OPTS="-Xms256m -Xmx512m"

자세한 내용은 포괄적 인 JVM 매개 변수 가이드를 확인하세요.

4. 결론

이 튜토리얼에서는 JVM이 오브젝트 힙을위한 충분한 공간예약 할 수없는 두 가지 가능한 시나리오에 대해 논의했습니다 . 또한이 오류를 완화하기 위해 힙 크기 제한을 제어하는 ​​방법도 배웠습니다.

다음으로 런타임시 잠재적 인 메모리 문제와이를 식별하는 방법에 대해 자세히 알아 봅니다.