Java 프로그래밍을 공부하다 보면 가끔 JIT 컴파일러를 마주치곤 합니다. 이번 기회에 이게 뭐 하는 컴파일러인지 알아보겠습니다.
JIT은 Just — In — Time의 약어입니다. ‘실시간’쯤의 뜻을 가지고 있는 거 같습니다. 이 뜻에 기대어 JIT이 무엇인지 말해보자면, JIT 컴파일러는 프로그램을 실제 실행하는 시점에(실시간에) 기계어로 번역하는 컴파일 기법입니다. 저 같은 초보분들은 무슨 소린지 이해가 안 갈 수 있습니다.
이전에 JDK, JRE, JVM에 관해 포스팅했었습니다. 그 포스팅을 설명하면서 사용했던 그림과 비슷한 그림을 한 번 보겠습니다.
파이썬 파일은 일단 제외하고 Java 파일만 보겠습니다. 순서를 매기면서 볼까요?
HelloWorld.java 소스 코드를 생성했다고 가정하겠습니다.
- HelloWorld.java 소스 코드를 작성하면
- javac.exe(Java 컴파일러)가 바이트 코드(HelloWorld.class)로 변환해줍니다.
- 그리고 JVM에서 각 운영체제에 맞는 기계어로 번역해 전달합니다.
그리고 그림을 보시면 JIT 컴파일러는 JRE안에 존재합니다. (JVM안에 존재한다고 해도 됩니다. JRE는 JDK에 포함되니까요. 헷갈리시는 분들은 저의 이전 포스팅을 참고해보세요.)
JIT 컴파일러가 어디에 존재하고 왜 쓰이는지 알아봤습니다. JRE안에 존재하면서 프로그램을 실행할 때 기계어로 번역해 전달하는 장치인 것이죠. 뭐하는 녀석인지는 알겠는데, 그럼 왜 쓰일까요?
JIT 컴파일러는 같은 코드를 매번 해석하지 않고 실행할 때 컴파일을 하면서 해당 코드를 캐싱해버립니다. 이후엔, 바뀐 부분만 컴파일 하고 나머지는 캐싱된 코드를 사용 하는 거죠. So, 인터프리터의 속도를 개선할 수 있습니다.
참고자료