본문 바로가기
Java

자바 GC 정리

by 무대포 개발자 2020. 11. 13.
728x90
반응형

자바 GC 정리

  • GC 란 가비지 컬렉터이며, 자바에서 메모리를 정리하는 기법
  • Minor GC, Major GC 가 있음.
Minor GC
  • Heap 은 크게 Young 과 Old 영역이 있음.
  • Young 부분에서 메모리가 꽉찼을 때, 발생하는게 Minor GC
  • Young 은 Eden, Survivor 영역이 있으며, Eden 영역이 꽉차면 Survivor 영역으로 옮김. (Minor GC 발생)
  • Survivor 영역이 꽉차면 Old 영역으로 옮김.
  • Minor GC 는 Stop the world 가 발생. Stop the world 란 GC 를 위해 가비지 컬렉터 이외의 스레드가 멈춘다는 것을 의미.
    • 너무 짧아서 STW 가 안일어나는 것처럼 보임.
Major GC
  • OLD 영역이 꽉찼을 때, 발생.
  • Minor GC 보다 시간이 많이 걸리는 이유는 전체 객체를 검색하기 때문

GC 알고리즘

Serial
  • 하나의 스레드로 처리하기에 시간 오래 걸림.
  • mark --> sweep --> compact 순으로 일어남.
  • GC 대상 데이터를 marking 하고. sweep (청소) 하고. 마지막에 compact (압축)
parallel GC
  • 위에 Serial GC 가 병렬 처리 할 수 있는 알고리즘.
CMS GC
  • 위에 단계중 mark --> sweep 만 일어나고. compact 은 안 일어남.
  • CMS GC 는 OLD 영역에서만 일어남.
  • 만약 메모리 청소가 제대로 안되서 메모리 단편화가 일어나고. 할당할 공간이 없으면 그 때 압축을 실행하는데 이게 시간이 많이 걸림.
  • 기본적으로는 STW 가 적게 걸리겠지. compact 가 없으니.
G1 GC
  • CMS GC 와 비슷한데, 메모리를 여러 개 나누어서 그 나눈 메모리 당 CMS 를 적용하는 거라 이해하면 됨.
refernece

댓글