반응형
자바 힙(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. 힙 메모리 동작 과정
- 객체 생성 → Eden 영역에 저장됨
- Eden 영역이 가득 차면 → Minor GC 실행
- 살아남은 객체는 Survivor 영역으로 이동
- 여러 번 살아남으면 Old 영역으로 이동
- 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 방지를 위해 효율적인 객체 관리를 해야 함
반응형
'[AWS-FRF] > EC2' 카테고리의 다른 글
[참고] AES-256(Advanced Encryption Standard - 256bit) 강력한 대칭키 암호화 알고리즘 !! (3) | 2025.03.11 |
---|---|
[중요][AWS] Vault Consul 포트 이슈 !! (4) | 2025.03.05 |
[참고][장애회고] ORM(JPA) 사용 시 예상치 못한 쿼리로 인한 HikariCP 이슈 (3) | 2025.02.19 |
[중요] Amazon Linux 2023 Swap 메모리 설정하기!! (2) | 2025.02.17 |
[중요][AWS][Linux] systemctl 명령어로 서비스 등록, 생성, 삭제!! (18) | 2025.02.05 |
[참고][AWS] 리전 및 가용 영역!! (9) | 2024.12.11 |
[참고][AWS] EC2 가용영역 위치!! (62) | 2024.12.05 |
[참고][AWS][Linux] df 명령어 & 마운트 자동 등록(fstab) & UUID란? (39) | 2024.11.18 |
댓글