24 lines
1.6 KiB
Markdown
24 lines
1.6 KiB
Markdown
### Major GC (Full GC)
|
||
|
||
[[Young Generation]]영역에서 살아남은 객체가 이동된 [[Old Generation]]에서 발생하며, Full GC==로 불리기도 함
|
||
|
||
Old 영역에서 일어나는 GC로, 기본적으로 [[Mark-Sweep-Compact]] 알고리즘 사용
|
||
|
||
- ==Major GC는 작업이 진행되는 동안 어플리케이션 동작이 멈추기== 때문에, 실제 성능 및 안정성에 큰 영향을 미치게 됨
|
||
|
||
**Major GC**는 Old 영역이 가득 차면 GC를 실행하는 단순한 방식이다.
|
||
|
||
Old 영역에 할당된 메모리가 허용치를 넘게 되면, Old 영역에 있는 모든 객체들을 검사하여 참조되지 않는 객체들을 한꺼번에 삭제하는 Major GC가 실행되게 된다.
|
||
|
||
하지만 Old Generation은 Young Generation에 비해 상대적으로 큰 공간을 가지고 있어, 이 공간에서 메모리 상의 ==객체 제거에 많은 시간이 걸리게 된다.==
|
||
|
||
예를들어 Young 영역은 일반적으로 Old 영역보다 크키가 작기 때문에 GC가 보통 0.5초에서 1초 사이에 끝난다.
|
||
|
||
그렇기 때문에 Minor GC는 애플리케이션에 크게 영향을 주지 않는다.
|
||
|
||
하지만 Old 영역의 Major GC는 일반적으로 Minor GC보다 시간이 오래걸리며, 10배 이상의 시간을 사용한다.
|
||
|
||
이 때 [[STW (Stop The World)]] 가 문제가 된다.
|
||
[[Major GC]]가 일어나면 Thread가 멈추고 Mark and Sweep 작업을 해야 해서 CPU에 부하를 주기 때문에 어플리케이션이 멈추거나 버벅이는 현상이 일어나기 때문이다.
|
||
|
||
따라서 자바 개발진들은 끊임 없이 **가비지 컬렉션 알고리즘을 발전** 시켜왔다. |