: 여기서 가비지(Garbage)란 참조되지 않은 객체, 즉 사용하지 않는 객체를 의미한다. 가비지 컬렉션은 프로그램이 동적으로 할당했던 메모리 영역(=힙영역) 내에서 더이상 참조되지 않는 메모리 객체를 모아 제거하는 메모리 관리 기법이다.
✍ 이러한 가비지 컬렉션 기능을 수행하는 것이 가비지 컬렉터(Garbage Collector)며, 자바에서는 가비지 컬렉터가 자동으로 GC(Garbage Collection)를 수행한다.
: 가비지 컬렉션은 약한 세대 가설(Weak Generational Hypothesis)을 기반으로 설계. 약한 세대 가설의 내용은 다음과 같다.
(1) 대부분의 객체는 금방 접근 불가능(Unreachable)한 상태가 된다.
(2) 오래된 객체에서 최신 객체로의 참조는 매우 적게 발생한다.
(1) Young Generation
(2) Old Generation
✋ Full GC란?
▶ Minor GC + Major GC로, 전영역에서 GC가 동작하는 것.
✋ Full GC 발생 상황
▶ System.gc()를 직접 호출 시
▶ Promotion Failure 발생 시
(1) 맨 처음 객체가 생성되면 Eden 영역에 객체 생성
(2) Minor GC가 발생하면 미사용 객체를 제거, 아직 사용되고 있는 객체는 Survivor 영역으로 이동시킴
(3) 위 과정을 반복하다 객체의 카운팅이 일정 횟수(N번)에 도달하면 Old generation으로 이동
(4) Old Generation이 가득차면 Major GC가 실행되어 Old Generation에 존재하는 모든 객체를 제거
✋ Stop The World(STW)란?
: GC를 제외한 JVM의 모든 스레드가 잠시 멈추는 현상. 사실상 어떤 GC든 STW가 발생하지만, Minor GC는 비교적 적은 객체를 검사하기 때문에 속도가 매우 빨라 애플리케이션에 거의 영향을 주지 않는다. 반면 Major GC/Full Gc는 많은 객체를 검사해야하기 때문에 시간이 오래 걸린다.
⇒ 일반적으로 Major/Full GC가 일어났을 때 STW 현상이 발생한다고 말한다.