GC(Garbage Collection)
- GC란, 이미 할당된 메모리에서 더 이상 사용하지 않는 메모리를 해제하는 행동.
- 사용되지 않는 메모리의 대상은 Heap과 Method Area에서 사용되지 않는 Object를 의미.
- 소스상에서 close()는 Object 사용중지 의사표현일 뿐 Object를 메모리에서 삭제하겠다는 의미가 아님.
- System.GC()를 명시적으로 호출할 수 있지만, Full GC를 수행시키는 메소드이기 때문에 Stop-the-world 시간이 길고 무거운 작업이며 또한 반드시 즉시 수행한다는 보장도 없는 메소드이기에 사용을 지양.
GC 작동원리
- Heap을 3개의 영역으로 나누어 관리.
- young 영역(Young Generation): 새롭게 생성한 객체의 대부분이 위치해있음. 가득차게 되면, Minor garbage collection이 일어남.
- Minor GC : young 영역에서 객체가 사라지는 것.
- old 영역(Old Generation) : 접근 불가능한 상태가 되지 않아, young에서 살아남은 객체가 복사되어 짐. 대부분 Young 영역보다 크게 할당하며, 크기가 큰 만큼 Young 영역보다 GC는 적게 발생함.
- Major GC(혹은 Full GC) : Old 영역에서 객체가 사라지는 것.
- permanent 영역(Method Area) : 객체나 억류(intern)된 문자열 정보를 저장하는 곳이며, Old 영역에서 살아남은 객체가 영원히 남아 있는 곳은 절대 아님. 이 영역에서 GC가 발생할 수도 있는데, 여기서 GC가 발생해도 Major GC의 횟수에 포함됨.
- JVM이 클래스들과 메소드들을 설명하기 위해 필요한 메타데이터들을 포함하고 있다. GC가 일어나면, 구역에 남은 객체들을 compact해서 보관한다.
GC영역 및 데이터 흐름도
STW(Stop-The-World)
- GC(Garbage Collection)을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것.
- Minor GC, Major GC 모두 STW event가 발생.
- stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춤.
- GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작.
- 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생함. GC 튜닝이란 이 stop-the-world 시간을 줄이는 것.
이미지 및 자료 참고
'개발 언어 > Java' 카테고리의 다른 글
Java] 추상클래스와 인터페이스 (0) | 2020.01.30 |
---|---|
Java] Comparable 과 Comparator를 사용한 정렬 (0) | 2020.01.12 |
GC(Garbage Collection) - stop-the-world (0) | 2019.12.15 |
GC(Garbage Collection) - 2 (GC Algorithm 구동방식) (0) | 2019.12.15 |
GC(Garbage Collection) - 1 (intro) (0) | 2019.12.15 |