JVM Garbage Collector

youngseoKim·2022년 2월 22일
0
post-thumbnail

0. Garbage Collector 이란?

Heap 영역에 할당된 메모리들을 알아서 해제해주는 게 Garbage Collector입니다.
JVM 구성에 포함된 Execution Engine이 수행합니다.
Garbage Collector가 알아서 Heap 영역을 살펴보고, 사용중 이거나 사용중이지않은 객체를 식별합니다.
참조되고 있지 않은 포인터를 발견하면 알아서 메모리를 해제합니다.

1. JVM 구현체

JVM 인터페이스에 기반한 구현체들은 다음과 같습니다.

  • HotSpot
  • JRockit
  • IBM J9

등이 대표적이고, 오라클이 소유하고 있는 HotSpot이 가장 많이 쓰이고 있습니다.
또한 HotSpot은 OpenJDK에 의해 오픈소스로 공개되어 있습니다.

JVM 구현체에 따라 Garbage Collector 동작 방법 또한 약간씩 달라지는데,
HotSpot을 기준으로 알아보겠습니다.

2. Heap memory pool

Garbage Collector가 참조할 Heap 영역은 다음과 같이 나누어집니다.

  • Young Generation
  • Old Generation
  • Permanent gen

2.1 Young Generation

객체가 새로 생성되면 Young Generation 영역에 저장됩니다.
Young Generation 영역은 또 2개로 나누어 집니다.

  • Eden
  • Survivor space

Eden 공간에 생성된 객체가 저장되고, 여기서 Eden 영역이 꽉 차게 되면
Minor GC Event가 발생합니다. 이때 사용되지 않은 메모리는 해제되고,
사용 중인 메모리는 Survivor space로 옮겨집니다.

Survivor space가 꽉 차면 Old Generation 영역으로 옮겨집니다.

2.2 Old Generation

메모리들이 Old Generation에 옮겨지다가 결국 꽉 차면
Major GC Event가 발생합니다.

2.3 Permanent gen

Class 또는 Method 같은 메타데이터들이 Permanent gen에 저장되며,
더 이상 사용되지 않은 Class, Method는 Garbage Collector에 의해 해제됩니다.

3. Garbage Collector Algorithm

Garbage Collector가 동작하게 되면, JVM이 프로그램 실행을 멈춥니다. (Stop the world)
Garbage Collector의 Algorithm들은 이 병목들을 해결하는 데 중요한 역할을 합니다.

3.1 Serial GC

Serial GC는 단일 Thread를 사용합니다.
소규모 애플리케이션에 적합하며, 다중 프로세서를 사용하지 않으니
작성한 프로그램의 규모가 조금만 커지더라도 비효율적으로 동작합니다.

3.2 Parallel GC

알고리즘은 Serial GC와 같으며
Parallel GC는 다중 Thread를 사용합니다.

3.3 CMS GC

Serial 및 Parallel에 비해 프로그램 일시정지 시간이 짧습니다.
Heap 크기가 클수록 유리합니다. 다만 CPU 자원이 많이 필요합니다.
JAVA9부터 deprecated 되었으며, JAVA14 부터는 삭제되었습니다.

3.4 G1 GC

G1은 다른 방법과 다르게 위에서 정리한 Young 또는 Old 영역을 사용하지 않습니다.
GC 방법 중 성능이 가장 좋습니다.

profile
현재 마크애니 블록체인팀에서 블록체인 솔루션과 DAPP 파트를 개발하고 있습니다. 서버 개발과 운영 , 클라우드 서비스에 관심이 많습니다.

0개의 댓글