menu

[ JAVA ] JIT 컴파일러(Just-in-Time)

JIT는 JVM내부에서 바이트코드를 기계어로 변환하는 방식으로서 Just-In-Time의 약자다.

  • 아래 그림에서 컴파일된 ByteCode와 기계코드 사이에 있는 JVM에서 JIT가 수행된다. 이미지 출처 : https://images.app.goo.gl/LsXuRMLSYmfSDWzQ9

컴파일 방식

컴파일 방식은 인터프리트 방식과 정적 컴파일 방식이 있다.

  • 인터프리트 방식 : 프로그램 실행시마다 기계어로 변환하는 작업을 수행하는 방식
  • 정적 컴파일 방식 : 실행 전 기계어로 미리 변환 후 실행하는 방식이며, 딱 한번만 수행된다.

JIT는 이 두가지를 혼합한 것이다. 인터프리터에 의해 변환이 지속적으로 수행되지만, 필요한 코드 정보는 캐시에 담아두었다가(메모리에 올려둠) 재사용하는 방식이다.

장점

반복적으로 수행되는 코드에 대해 매우 빠른 성능을 보인다.

단점

처음 시작 시에 변환 단계를 거치기 때문에 성능이 느리다. (하지만 최근에는 CPU성능과 JDK성능이 개선되어 많이 개선됐다고 한다. )

위의 내용에서 JVM -> 기계코드로 변환되는 부분에서 JIT가 수행된다.

출처 : 『JAVA의 신』 - 이상민 저