원인
- JVM이 사용할 수 있는 네이티브 메모리가 부족한 경우 (OS에서 할당 실패)
- Permanent 영역 (또는 Metspace) 이 부족한 경우
- 자바 힙 메모리 크기가 작은 경우
- 즉, 어플리케이션이 주어진 힙 보다 더 많은 크기가 필요한 경우
- JVM이 GC를 수행하는데 시간이 너무 오래 걸리는 경우
- 또는 GC로 인해 확보되는 메모리가 너무 작은 경우
대표 오류 메시지
# 힙 메모리가 부족 (-Xms / -Xmx 를 설정하여 해결, 또는 메모리 누수)
Exception in thread "main": java.lang.OutOfMemoryError: Java heap space
# PermGen 메모리 부족 (-XX:PermSize 를 늘리거나 클래스로더나 잘못된 구현으로 누수가 생길 경우)
Exception in thread "main": java.lang.OutOfMemoryError: PermGen space
# GC 소요시간이 너무 오래 걸리거나 GC 후 확보된 메모리가 너무 작은 경우
Exception in thread "main": java.lang.OutOfMemoryError: GC Overhead limit exceeded
# 네이티브 메모리가 부족 (메모리 증설 ..)
Exception in thread "main": java.lang.OutOfMemoryError: (Native method)
Exception in thread "main": java.lang.OutOfMemoryError: unable to create new native thread
Exception in thread "main": java.lang.OutOfMemoryError: request bytes for .. Out of swap space?
# 배열 크기가 VM 허용크기를 초과한 경우
Exception in thread "main": java.lang.OutOfMemoryError: Requested array size exceeds VM limit