JAVA GarageColletor
- Serial GC
- 단일 처리
- 단일 처리 할때 사용되는 gc
- Young Generation은 Generation 알고리즘을 사용 하고 Old Generation 은 Mark-and-Compaction 알고리즘 사용
- Paralle GC
- 병렬로 처리
- Young Generation은 Generation알고리즘을 사용하고 Young Generation만 병렬로 처리
- Paralle Copy Algorithm
- Generation Algorithm과 동일 하지만 Eden 영역에서 Survivor 영역으로 Copy될때 병렬로 처리 된다.
- 병렬로 처리 될때 같은 동일한 스레드가 같은 객체를 참조하면 Curruption이 발생한다. Curruption을 우회하려면 동기화 해야 한다.
PLAB방식 (Pallalle Local Allocation Buffer) : 객체가 할당될때 공간에 여유를 두는 방식
- CMS GC
- young generaton은 Parallel Copy Alorithm 사용
- Old generationd은 Conccurent Mark And Sweep Algorithm 사용
initial phase :
- 살아있는 객체가 있는지 판별하는 단계
- single thread로 작업
concurrent mark phase :
- 살아있는 객체가 있으면 살아있는 객체를 대상으로 다시 추적하여 mark 하는 단계
- 운영중인 thread는 멈추지 않고 작업을 진행하면서 mark 함.
- single thread
remark phase :
- mark된 객체를 위주로 참조가 업데이트 되었는지 또는 살아있는 객체가 있는지 모든 스레드가 판별하게 됨
conccurent sweep phase :
- 객체를 sweep하는 단계
- compaction을 하지 않음
장점으로는 빠른 속도의 gc가 발생하므로 수행시간이 짧다. 반면에 compation 문제가 있어서 단편화가 발생할 수 도 잇다. 또한 다른 gc보다 cpu를 많이 사용한다.
- G1 GC
- 기존의 물리적으로 Yong Generation과 Old Generation을 구분 했던것을 개념적으로 구분하고 레진 단위 로 처리
- 하나의 레진단위로 되어있고 1byte정도의 레진을 가짐
- 각각의 사용하지 않는 레진 단위로만 gc를 수행하기 때문에 suspend 현상이 짧음
g1 알고리즘
young generation(Evaucation Phase) :
- Rechable Object를 판별하여 age가 안되는 Region은 Survivor 영역으로 Copy하고 Promotion대상이 되는 Region은 Old Generation으로 Copy
- 나머지 Copy가 안된 Region은 gc한다.
- 병렬로 수행
Conccruent Mark Phase
- Makr 단계와 Remark 단계로 나뉨
-mark : Evacuation 에서 변경된 객체 대상으로 객체를 판별하여 making하는 단계
- remark : 각 Resion 객체마다 Desity(밀도)를계산, gabarge는 다음 단계로 넘어가지 않고 바로 gc
Old Reclaim Phase
- gc를 위히 live object 비중이 낮은
Comaption Phase
- 압축 작업을진행
'java' 카테고리의 다른 글
Java HashMap동작 원리 (0) | 2017.10.16 |
---|---|
ClassLoader (0) | 2017.10.14 |
GarbageCollection (0) | 2017.10.13 |
String StringBuider SttringBuffer 차이 (0) | 2017.10.13 |
예외 (0) | 2017.10.12 |