코드 그라데이션

GC와 JVM에 대해서 본문

백엔드 면접

GC와 JVM에 대해서

완벽한 장면 2024. 3. 30. 20:46

먼저, GC의 종류

Serial GC

  • 단일 스레드 환경 및 소규모 응용 프로그램을 위한 간단한 GC
  • Minor GC에서 Copy & Scavenge 알고리즘 적용
  • Full GC에서 Mark & Compact 알고리즘 적용

Parallel GC

  • JVM 기본 옵션(Java 8 기본)
  • 멀티스레드 기반개수 지정 가능 으로 작동해 효율을 높임
  • Low-pause(응용 프로그램 중단 최소화)
  • Throughput(Mark & Compact 알고리즘을 기반으로 신속성 최대화)

Concurrent GC

  • Low-pause 와 유사하며 응용 프로그램 실해 중 GC 실시
  • 동작 중지 최소화

Incremental GC (Train GC)

  • Concurrent GC와 유사하나 Minor GC 발생 시 Full GC GC를 일부 병행
  • 경우에 따라 오히려 더 느려지는 부작용

G1(Garbage First) GB

  • 4GB 이상 대용량 HeapHeap메모리를 사용하는 멀티스레드 기반 응용 프로그램에 특화된 GC
  • Heap을 영역(1~ 단위로 분할한 후 멀티스레드로 스캔
  • 가비지가 가장 많은 영역부터 수집 실시

CMS(Concurrent Mark Sweep) GC

  • Java 9부터 사용하지 않다가 Java 14에서 G1GC를 지원하고자 완전히 제거

 

G1 GC

 

 


GC에 대해서 (보충)

  • 자바와 같은 프로그래밍 언어에서 사용되는 메모리 관리 기법 중 하나
  • 프로그램에서 동적으로 할당된 메모리 중에서 더 이상 사용되지 않는 객체들을 식별하고 자동으로 제거하여 메모리 누수를 방지하는 데 목적
  • 프로그램이 실행되면 객체들이 메모리에 동적으로 할당되고 사용되게 됩니다. 그러나 명시적으로 메모리를 해제하는 방법이 없는 경우, 사용되지 않는 객체들이 메모리에 계속 남아있을 수 있다.
  • 자바에서는 가비지 컬렉션은 주로 힙 영역에서 이루어진다.

# 가비지 컬렉션이 동작하는 환경(절차)

1) 객체의 Reachability(도달 가능성) 확인:

  • 가비지 컬렉션은 먼저 어떤 객체가 더 이상 참조되지 않는지 확인한다.
  • 자바에서는 참조되지 않은 객체를 판단하기 위해 "Reachability"를 사용한다. 즉, 어떤 객체에 다른 객체나 변수 등에서 접근할 수 없는 경우 해당 객체는 도달 불가능하다고 판단한다.

2) Garbage Collection 실행

  • 도달 불가능한 객체들을 식별한 후, 해당 객체들을 메모리에서 제거하는 작업이 수행된다..
  • 이러한 작업은 자바 가상 머신의 Garbage Collector에 의해 이루어진다.

3) 메모리 반환

  • 가비지 컬렉션에 의해 제거된 객체들이 사용하던 메모리는 자동으로 반환되어 다시 활용될 수 있게 된다.
  • 이로써 메모리 누수를 방지하고, 프로그램이 효율적으로 동작할 수 있도록 도와준다.

[장/단]

  • 자바에서는 가비지 컬렉션은 자동으로 이루어지기 때문에 개발자가 명시적으로 메모리 관리를 신경 쓰지 않아도 된다.
  • 이는 편리하지만 가비지 컬렉션의 동작이 발생할 때마다 일시적으로 프로그램이 멈추는 "Stop-the-World" 현상이 발생할 수 있으며,
  • 이를 최소화하기 위해 다양한 가비지 컬렉션 알고리즘이 개발되고 사용되고 있다.

 

728x90

'백엔드 면접' 카테고리의 다른 글

인덱싱  (0) 2024.04.02
APM과 부하 테스트  (0) 2024.04.01
Heap 영역에 대해 ++  (0) 2024.03.29
JVM Runtime data area +  (0) 2024.03.28
JVM 기본 구조(2)  (0) 2024.03.27
Comments