stop the word란 GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것을 말한다.GC을 실행하기 위해서 JVM은 GC를 수행하는 쓰레드를 제외하고 모든 쓰레드들은 멈춘다. 이후 GC 작업을 완료한 이후에 중단했던 작업을 다시 시작하게 된다. stop the world는 항상 발생하게 되므로 GC 튜닝을 한다는 것은 stop the word의 시간을 줄이는 것을 말한다.
C를 공부했던 당시에는 동적으로 메모리를 할당했을 당시에 free를 통해서 명시적으로 해제를 해주었다. java에서는 그 역할을 GC가 해주는 것인데, 명시적으로 해제를 해주기위해서 null이나 gc를 호출하는 방법을 본적이 있다. 하지만 Null로 명시하는것은 큰 문제가 안되지만 System.gc() 메서드를 호출하는 것은 성능에 매우 큰 영향을 끼치기 때문에 호출사용을 사용하면 안된다.
가비지 컬렉터는 두가지 가설하에 만들어졌다.
1. 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다.
2. 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.
이러한 가설을 'weak generational hypothesis'라고 한다. 이 가설의 장점을 살리기위해 HotSpot VM에서는 크게 2개로 물리적 공간을 나누었다. 바로 Young영역과 Old 영역이다.
hotSpot VM이란?
Hotspot JVM은 미국의 Longview Technologies LLC라는 회사에서 1999년에 처음 발표한 JVM이다. 이후 SUN에 인수되었으며, 1.2버전부터 SUN의 기본적인 JVM이 되었다. 현재 Hotspot JVM은 가장 일반적인 JVM 중 하나이다.Hotspot은 말 그대로 Hot한 Spot을 찾아서 해당 부분에서는 JIT 컴파일러를 사용하는 방법이다. 내부적으로 프로파일링을 통해 핫스팟을 찾아내고, 해당 부분에 대한 네이티브 코드를 생성한다. 이때 네이티브 코드를 생성하는 방법에서 Client와 Server라는 두가지 방법이 존재한다.
(추가 예정)
Young 영역(Young Generation 영역) : 새롭게 생성한 객체의 대부분이 여기에 위치한다. 대부분의 객체가 금방 접근 불가능 상태가 되기 때문에 많은 객체가 Young 영역에 생성되었다가 사라진다. 이영역에서 객체가 사라질때 Minor GC가 발생한다고 말한다.
Old 영역( Old Generation 영역 ) : 접근 불가능 상태로 되지 않아 Young 영역에서 살아남은 객체가 여기로 복사된다. 대부분 Young 영역보다 크게 할당하며, 크기가 큰 만큼 Young영역보다 GC는 적게 발생한다. 이 영역에서 객체가 사라질 때 Major GC가 발생한다고 말한다.