본문 바로가기
자바

자바 JVM - 힙 영역과 GC

by 개발자 포비 2024. 11. 23.

JVM 힙 영역

JVM 힙 영역은 GC가 관리하는 메모리 영역으로, 자바에서 사용되는 객체의 인스턴스와 배열이 저장되는 공간이다. 이 영역은 설정에 따라 크기를 조정하거나 고정할 수 있으며, 세대별 컬렉션 이론에 기반하여 설계된다.

구조

  • Eden 및 Survivor:
    • Eden: 새로운 객체가 생성되는 공간이다.
    • Survivor: Eden에서 살아남은 객체가 저장되는 공간이다.
  • New Generation / Old Generation:
    • New Generation: Young Generation에 속하는 공간으로, 새로운 객체가 주로 저장된다.
    • Old Generation: 오래된 객체가 저장되는 공간이다.
  • 영구 세대 (Metaspace): 클래스 메타데이터와 같은 정보를 저장하는 영역이다. Java 8 이후, Metaspace는 힙 영역의 메모리 사용을 줄이는 데 기여한다.

JVM 가비지 컬렉션 (GC)

GC는 힙 영역에서 참조되지 않는 객체를 수집하여 메모리를 회수하는 과정이다. GC는 두 가지 주요 유형으로 나뉜다:

  • Minor GC: Young Generation에서 발생하며, 일반적으로 1초 이내에 완료된다. 새로운 객체의 수가 많을 때 자주 발생한다.
  • Major (Full) GC: Old Generation에서 발생하며, 수초 이상 소요될 수 있다. 이로 인해 프로그램이 일시 정지하게 되고, DB 연결이 끊기는 등의 운영 문제가 발생할 수 있다.

GC 수행 시 일시 정지

GC가 수행될 때 프로그램은 일시 정지되며, 이를 stop-the-world라고 한다. 이 시점에 모든 쓰레드는 중단된다.


GC 기술의 발전

자바에서 모든 인스턴스는 힙 영역에 저장되며, 최초의 GC 기술은 1960년대에 개발되었다. GC에서 다루어야 할 핵심 문제는 다음과 같다:

  1. 회수 대상 메모리 판단: 어떤 메모리를 회수할지를 결정한다.
  2. 메모리 회수 시점: 메모리를 언제 회수할지를 결정한다.
  3. 구체적인 메모리 회수 방법: 메모리를 어떻게 회수할지를 결정한다.

GC 과정

  1. Young Generation: 새롭게 생긴 인스턴스가 저장되는 공간이다. 이 공간에서 Minor GC가 발생한다.
  2. Old Generation: 참조가 사라졌지만 여전히 다른 곳에서 참조하는 객체가 이동하는 공간이다. Major GC가 이 영역에서 발생한다.
  3. Permanent 영역: static과 같은 참조 방식의 객체는 이 영역으로 이동되어 수집 목록에서 제외될 수 있다.

GC의 범위에 따라 Minor, Major, Full로 나뉘며, GC 수행 시 공간 조정이 가능하다. GC의 효율성을 높이기 위해 다양한 알고리즘이 사용되며, 각 알고리즘마다 장단점이 존재한다.


결론

JVM의 힙 영역과 가비지 컬렉션은 자바 애플리케이션의 메모리 관리를 효과적으로 수행하는 중요한 요소이다. 힙 영역의 구조와 GC의 작동 방식을 이해하는 것은 자바 프로그래밍 및 성능 최적화에 필수적이다. GC의 효율성을 높이기 위한 다양한 기술적 접근이 계속 발전하고 있음을 인식하는 것이 중요하다.

 

https://www.youtube.com/watch?v=uYbWKmOYXqQ

힙 영역과 GC

 

'자바' 카테고리의 다른 글

자바 - 정적 메소드 생성  (0) 2024.11.25
자바 - 정규화 표현 문법  (0) 2024.11.24
자바 JVM - 런타임 데이터 영역  (0) 2024.11.23
자바 JVM - 클래스 로더  (0) 2024.11.23
자바 - JVM  (1) 2024.11.21

댓글