Java 프로그램은 Java Virtual Machine(JVM) 위에서 실행되며, 데이터를 관리하기 위해 힙(heap) 메모리를 사용합니다. 그런데 프로그램이 더 많은 메모리를 필요로 하는 상황에서 힙 공간이 부족해지면, JVM이 객체를 생성하는 시점에 OutOfMemoryError 예외를 발생시킬 수 있습니다.
이러한 문제를 예방하려면 JVM에 할당되는 힙 크기를 상황에 맞게 조정해 주는 것이 좋습니다. 다행히 Java에서는 별도의 코드 수정 없이 명령줄 옵션만으로 힙 크기를 손쉽게 변경하거나 늘릴 수 있습니다.
JVM 힙 크기를 변경/증가시키는 명령줄 옵션
JVM의 힙 크기는 다음과 같은 옵션을 통해 제어할 수 있습니다.
- -Xms : JVM 시작 시 할당되는 초기 힙(initial heap) 크기를 설정합니다.
- -Xmx : JVM이 사용할 수 있는 최대 힙(maximum heap) 크기를 설정합니다.
- -Xss : 각 스레드의 스택(stack) 크기를 설정합니다.
실행 예시
java -Xms512m -Xmx1024m MyApp
위 명령은 초기 힙 크기를 512MB, 최대 힙 크기를 1024MB로 지정하여 애플리케이션을 실행하는 예입니다. 대용량 데이터 처리나 메모리 사용량이 많은 애플리케이션을 운영할 때 유용하게 활용됩니다.
현재 JVM 힙 크기 확인하기
설정된 힙 크기가 실제로 얼마인지 확인하려면 Runtime 클래스를 활용할 수 있습니다. 아래 예제 코드는 현재 JVM의 힙 크기를 조회하여 출력합니다.
public class HeapSizeTest {
public static void main(String[] args) {
// JVM 힙 크기 가져오기
long heapSize = Runtime.getRuntime().totalMemory();
// JVM 힙 크기 출력
System.out.println("Heap Size: " + heapSize);
}
}출력 결과
Heap Size: 16252928
출력된 값은 바이트(byte) 단위이므로, 필요하다면 1024로 나누어 KB 또는 MB 단위로 변환하여 확인하면 더 직관적입니다. 이처럼 명령줄 옵션과 Runtime API를 함께 활용하면 애플리케이션의 메모리 사용량을 효율적으로 관리하고 OutOfMemoryError 발생 가능성을 줄일 수 있습니다.