티스토리 뷰
Garbage Collector
- Java에서는 개발자가 프로그램 코드로 메모리를 명시적으로 해제하지 않기 때문에 Garbage Collector가 더 이상 필요 없는 Garbage 객체를 찾아 지우는 작업을 한다
- 수행 과정
- Heap 내의 객체 중에서 Garbage(GC 대상 객체)를 찾아낸다
- 찾아낸 Garbage(GC 대상 객체)를 처리(finalization)해서 할당되었던 Heap의 메모리를 회수한다
- 전제 조건
- 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다
- 오래된 객체(Old Generation)에서 젊은 객체(Young Generation)로의 참조는 아주 적게 존재한다
- Young 영역(Yong Generation 영역): 새롭게 생성한 객체의 대부분이 여기에 위치한다. 대부분의 객체가 금방 접근 불가능 상태가 되기 때문에 매우 많은 객체가 Young 영역에 생성되었다가 사라진다. 이 영역에서 객체가 사라질때 Minor GC가 발생한다고 말한다
→ eden, S0, S1 (Survivor space) 영역으로 나뉜다 - Old 영역(Old Generation 영역): 접근 불가능 상태로 되지 않아 Young 영역에서 살아남은 객체가 여기로 복사된다. 대부분 Young 영역보다 크게 할당하며, 크기가 큰 만큼 Young 영역보다 GC는 적게 발생한다. 이 영역에서 객체가 사라질 때 Major GC(혹은 Full GC)가 발생한다고 말한다
- 참고 링크
- Young 영역(Yong Generation 영역): 새롭게 생성한 객체의 대부분이 여기에 위치한다. 대부분의 객체가 금방 접근 불가능 상태가 되기 때문에 매우 많은 객체가 Young 영역에 생성되었다가 사라진다. 이 영역에서 객체가 사라질때 Minor GC가 발생한다고 말한다
- 최초의 Java에서는 GC 작업에 애플리케이션의 사용자 코드가 관여하지 않도록 구현되었었으나, JDK 1.2부터는 제한적으로 사용자 코드와 GC가 상호작용할 수 있도록 한다
→ java.lang.ref 패키지- 객체의 reachability를 조절하여 Java GC에 일부 관여할 수 있도록 도와준다
(java.lang.ref 패키지의 SoftReference, WeakReference, PhantomReference, ReferenceQueue 등을 사용하여)
- 객체의 reachability를 조절하여 Java GC에 일부 관여할 수 있도록 도와준다
reachability란?
- 객체가 Garbage인지 판별하기 위해 사용하는 개념
- 어떤 객체에 유효한 참조가
- 있으면 'reachable'
- 없으면 'unreachable'로 구별
- unreachable 객체를 Garbage로 간주해 GC 수행
- java.lang.ref 패키지를 이용해, 이 reachable 객체들을 strongly reachable, softly reachable, weakly reachable, phantomly reachable로 더 자세히 구별하여 GC 때의 동작을 다르게 지정할 수 있다
stop-the-world
- GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것
- stop-the-world가 발생하면 GC를 실행하는 Thread를 제외한 나머지 Thread는 모두 작업을 멈춘다
→ GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작 - OLD 영역은 크기가 크기 때문에 stop-the-world 시간이 길고, YOUNG 영역은 minor GC가 자주 발생하지만 영역이 작기 때문에 처리속도가 빠르다
- 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생한다
- GC 튜닝이란 이 stop-the-world 시간을 줄이는 것!
'study' 카테고리의 다른 글
map() 과 flatMap() (0) | 2022.05.17 |
---|---|
ConcurrentHashMap (0) | 2022.05.03 |
Builder 패턴 (0) | 2022.04.27 |
Stateless vs Stateful (0) | 2022.04.22 |
Memcached vs Redis (0) | 2022.04.22 |