JAVA

가비지 콜렉터의 종류

whyWhale 2021. 5. 3.

※ GC 간단 정리


 

Minoer GC

  • 처음 생성된 객체는 Eden 영역에 할당.
  • Eden 영역이 꽉차면 Survivor 0,1 둘 중에 빈 공간이 아닌 곳으로 이동한다.

Minor GC

  • Survivor 영엑에 있는 객체가 꽉 찰 때 다시 GC의 객체가 사용중인지 아닌지 심사받고 다른 Survivor 영역으로 이동한다. 그리고 aging을 한다.
  • old 영역으로 이동한다.
    • Survivor 영역의 크기보다 큰 경우.
    • aging이 어느정도 되는 경우.

 

GC의 종류

Major GC Old,Perm 영역에서 발생하는 GC
Minor GC Young 영역에서 발생하는 GC
Pull Gc 메모리 전체를 대상하는 GC

각 GC의 종류에 따라 성능에 크게 영향을 줍니다.

 

GC를 진행하는 방법은 총 5가지가 있다.

 


 

GC 방식

 

 

1. Serial Collector


 

  • 하나의 CPU로 Young영역과 Old 영역을 연속적으로 처리한다.
  • 메모리가 적고 CPU 코어 개수가 적을 때 적합한 GC방식이다.
  • 컬렉션이 수행될 때 애플리케이션이 정지
  •  Old 영역에서 쓰지 않는 객체를 표시해서 한곳으로 모으고 삭제하는 Mark & Sweep Compact알고리즘 사용
    • Mark : 살아있는 객체들을 찾아 표시.
    • Sweep : Heap의 앞부분터 확인하면서 살아있는 객체만 남긴다.
    • Compact : 쓰레기 객체를 지우고 살아있는 객체를 모은다.
    •  

Serial GC

 

2. Parallel Collector


 

  • 메모리가 충분하고 코어의 개수가 많을 떄 적합한 GC방식
  • CPU가 GC의 진행시간 동안 대기 상태로 남아 있는 것을 최소화 하는 것.
  • Old 영역의 GC는 Mark&sweep Compact알고리즘을 사용한다.
  • Serial Collector의 Young 영역에서 진행하는 컬렉션을 병렬 방식으로 처리하여 GC의 부하를 줄이고 성능을 향상 시킬 수 있다.

Parallel Collector

 

3. Concurrent Mark Sweep(CMS)


  • 2개 이상의 CPU를 사용하는 서버에 적합한 GC방식.
  • 힙 메모리의 크기가 클 때 적합.
  • Young영엑에 처리 방법은 Parallel Collector 의 Young영역의 GC알고리즘과 같다.
  • Stop the world 가 짧다. 
    • 하지만 다른 GC 보다 CPU 자원을 많이 소모한다.
    • Compaction 을 제공하지 않는다.
      • 메모리 파편화로 Compact수행시 다른 GC보다 stop the world가 길어진다.
  • 흐름
    • Initial Mark : class Loader 에서 가장 가까운 객체 중 살아 있는 객체만 찾는다.
    • Concurrent Mark :  올스탑 없이 살아 있다고 확인한 객체에서 참조하고 있는 객체를 확인한다.
    • Remark : Concurrent Mark 단계에서 새로 추가되거나 참조가 끊긴 객체를 확인.
    • Concurrent Sweep : 올스탑 없이 참조 되지 않는 객체를 정리.

 

CMS

 

CMS 방식에서는 컴팩션을 지원하지 않는다. 그러므로 다른 옵션을 사용하여 메모리를 모아주는 작업이 필요.

 

 

4. G1 ( Garbage First Collector)


  • G1 콜렉터는 Young 영역과 Old 영역으로 나누는 방식을 사용하지 않는 특이한 컬렉터이다.
  • 바둑판 모양으로 구성되어 있으며 약 2000개의 구역을 사용.
    • 바둑판 모양의 구역에서 일부를 선정하여 Young 영역으로 지정한 후 해당 구역에 데이터가 꽉차면 GC를 진행.
    • GC 후 살아있는 객체만 Survivor영역으로 이동.
  • CMS Collector 의 CPU 자원 파편화의 단점을 해결하기 위해 만들어진 방식.
    • 가장 많은 공간이 있는 곳 부터 회수 하여 진행하므로 Garbage First라는 이름이 붙였다.
    • 가장 큰 장점은 어떤 GC보다 빠르다.
    • JDK 7에서 정식으로 사용가능한 방식.

 

5. Z Garbage Collector


  • 64bit 플랫폼에서만 동작한다.
    • Color Point 방식으로 Heap 영역에 있는 객체들을 관리하기 떄문이다.
  • ZGC의 설계 목표
    • stop the world 로 인한 지연시간이 10ms 초과하지 않는다.
    • Heap 사이즈가 커져도 stop the world 시간이 증가하지 않는다.
    • 8MB ~ 16TB이르는 다양한 Heap 사이즈를 처리할 수 있다.
  • 영역과 비슷한 개념인 Zpage를 사용한다.
    •  Zpage는 2MB의 배수로 동적으로 생성,삭제가 가능하다.

'JAVA' 카테고리의 다른 글

인터페이스, 추상클래스  (0) 2021.05.16
static  (0) 2021.05.04
Garbage Collector  (0) 2021.04.25
Reflection  (0) 2021.04.16
제네릭 타입의 컴파일 영향  (1) 2021.04.10

댓글