가비지 컬렉터(GC) 종류
업데이트:
1) Serial GC
: GC를 처리하는 쓰레드가 하나인 Single Thread.JDK 5,6에서 사용되며, 싱글 스레드로 수행되는 가장 간단한 방식의 GC.
- 싱글 스레드로 작업이 수행되기 때문에 작업시간이 길다
- 단일 스레드 환경 및 소규모 응용 프로그램을 위한 간단한 GC
- Mark-Sweep-Compact알고리즘을 사용
-> mark- Heap의 Old 영역에서 GC대상외의 것들을 표시(마킹)하는 단계
-> sweep- 마킹 되어있지 않은 객체들을 제거
-> compact- heap의 앞부분부터 객체들이 삭제되고 생긴 살아남은 객체들 사이의 비워진 공간이 생기지 않게 다시 채워넣음.
2)Parallel GC
:JDK 8의 디폴트 방식으로 멀티 스레드 GC작업 수행.
두가지 방식 존재
- Low-pause: GC가 일어날 때 어플리케이션이 멈추는 현상을 최소화
- Throughput: Parallel GC는 마이너 GC가 발생하였을 때 되도록 신속하게 수행
3) Concurrent GC
- Low-pause와 유사하며 응용 프로그램 실행 중 GC 작업
- 동작 중지 최소화
4) Incremental GC(Train GC)
- Concurrent GC와 유사하나 Minor GC발생 시 Full GC를 일부 병행
- 경우에 따라 오히려 더 느려지는 부작용
Minor GC
young 영역의 GC.
- Young 영역에서 다시 eden영역과 두개의 survivor 영역(S0,S1)으로 나눕니다.
새로 생성된 객체는 Eden 영역에 할당되며, Eden 영역이 가득차면 Minor GC가 발생합니다.
1.Minor GC는 Eden 영역과 한 Survivor(S0과 S1중 하나)에서 살아남은 객체들을 다른 영역(나머지 S0,S1) 이 과정에서 더 이상 참조되지 않는 개체들은 제거.
2. 살아남은 객체 중 생성된지 특정시간이 지나면 Old 영역으로 이동
3. 빠르게 수행되지만, 해당 영역은 스레드가 일시 중지됨.
Full GC
Old 영역의 GC.
- 힙의 모든 부분을 대상으로 함.
- 상대적으로 느리고,실행 중 스레드 중지.
- 힙 전체를 검사하여, 사용되지 않는 객체를 제거.
- Minor GC보다 훨씬 많은 시간 소요. Youn과 Old 영역 모두 처리.
JVM에서 자동으로 관리되지만, 애플리케이션의 성능과 메모리 사용 효율설에 중요한 영향을 미침.
참고 레퍼런스)
댓글남기기