본문 바로가기
[AWS-FRF]/EC2

[중요] 자바 힙(Heap) 메모리 구조 & 동작과정 !!

by METAVERSE STORY 2025. 2. 7.
반응형

 

 

 

자바 힙(Heap) 메모리란?

자바 힙(Heap) 메모리는 **JVM(Java Virtual Machine)**이 애플리케이션을 실행할 때 사용하는 동적 메모리 공간으로, 객체와 배열이 저장되는 영역입니다.
힙 메모리는 JVM이 자동으로 관리하며, 필요하지 않은 객체는 **가비지 컬렉터(Garbage Collector, GC)**가 제거합니다.


1. 힙 메모리 구조

자바 힙 메모리는 일반적으로 세 부분으로 나뉩니다.

Young Generation (젊은 세대)

  • 새롭게 생성된 객체가 저장되는 영역
  • Young Generation은 다시 Eden, Survivor 0, Survivor 1로 나뉨
    • Eden 영역: 객체가 최초로 생성되는 공간
    • Survivor 영역(S0, S1): Eden에서 살아남은 객체들이 이동하는 공간
  • 대부분의 객체는 Young Generation에서 생성된 후, 금방 소멸됨
  • **GC: Minor GC(마이너 가비지 컬렉션)**이 주기적으로 실행됨

Old Generation (Old, 노년 세대)

  • Young Generation에서 오래 살아남은 객체가 이동하는 공간
  • 큰 객체나 장기적으로 유지되는 객체가 저장됨
  • GC: Major GC(마이너 GC보다 느림) 실행 시 전체 힙을 검사

Metaspace (메타스페이스, 이전: Permanent Generation)

  • 클래스 메타데이터(클래스 정보, 메서드, static 변수 등)가 저장됨
  • JDK 8부터 **PermGen(Permanent Generation)**이 제거되고, Metaspace로 변경됨
  • 기본적으로 OS에서 필요한 만큼 동적으로 확장됨

2. 힙 메모리 동작 과정

  1. 객체 생성 → Eden 영역에 저장됨
  2. Eden 영역이 가득 차면 → Minor GC 실행
    • 살아남은 객체는 Survivor 영역으로 이동
    • 여러 번 살아남으면 Old 영역으로 이동
  3. Old 영역이 가득 차면 → Major GC 실행
    • 오래된 객체가 제거되며, 성능 저하가 발생할 수 있음

3. 힙 메모리 관련 JVM 옵션

JVM의 힙 메모리 크기는 옵션을 통해 설정 가능합니다.

  • -Xms<size>: 초기 힙 메모리 크기 설정 (예: -Xms512m)
  • -Xmx<size>: 최대 힙 메모리 크기 설정 (예: -Xmx2g)
  • -XX:NewRatio=<ratio>: Young Generation과 Old Generation 비율 조정
  • -XX:SurvivorRatio=<ratio>: Eden과 Survivor 비율 조정
  • -XX:+UseG1GC: G1(Garbage First) GC 사용

 

## vi /etc/systemd/system/  서비스 내용 수정

-Xms256m -Xmx1024m 등록

 

 


4. 힙 메모리 문제 & 최적화

(1) 메모리 누수 (Memory Leak)

  • 사용되지 않는 객체가 GC에 의해 제거되지 않는 경우
  • static 변수, 미처 닫지 않은 리소스 등이 원인이 될 수 있음

(2) OutOfMemoryError (OOM)

  • 힙 메모리가 부족할 때 발생 (java.lang.OutOfMemoryError: Java heap space)
  • 해결 방법:
    • 힙 크기 조정 (-Xmx 증가)
    • 객체 수명 관리 (캐시 정리, 불필요한 객체 제거)
    • GC 튜닝 (-XX:+UseG1GC 등 활용)

5. 정리

  • 힙 메모리는 JVM이 객체를 저장하고 관리하는 공간
  • Young Generation(객체 생성), Old Generation(장기 객체 저장), Metaspace(클래스 메타데이터)로 나뉨
  • 가비지 컬렉션을 통해 자동 정리되지만, 튜닝이 필요할 수도 있음
  • 메모리 누수 & OOM 방지를 위해 효율적인 객체 관리를 해야 함

 

 

 

반응형

댓글