코드 그라데이션
GC와 JVM에 대해서 본문
먼저, 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