인터프리터

자바 바이트 코드를 한줄씩 읽어서 기계어로 해석한다.

JIT 컴파일러

런타임 시 바이트 코드를 원시 시스템 코드(기계어)로 컴파일하여 성능을 향상시킨다.

인터프리터 방식의 단점을 보완하기 위해 도입되었다.

실행 시점에 인터프리터 방식으로 기계어 코드를 생성할 때 자주 사용되는 메소드의 경우, 컴파일하고 기계어를 캐싱한다.

그래서, 해당 메소드가 여러번 호출될 때 매번 인터프리터에 의해 해석되는 것을 방지한다.

<aside> 💡 컴파일 임계치(Compile Threshold) JIT 컴파일러가 메소드가 자주 사용되는 지 체크하는 방식으로 컴파일 임계치를 사용한다. JIT 컴파일러가 내부적으로 메서드가 호출될 때마다 호출 횟수를 카운팅하고 그 횟수가 특정 수치를 초과할 때 캐싱해서 이후에는 JIT 컴파일이 트리거된다.

두 카운터의 합계를 확인하고 메서드가 컴파일될 자격이 있는지 결정한다.메서드가 컴파일 될 자격이 있다면 해당 메서드는 컴파일되기 위해 큐에서 대기하게 된다.

그러면 이 메서드들은 이후 컴파일 스레드에 의해 컴파일 되는 것이다.

</aside>

References