Java - JIT 컴파일러

Junburg
3 min readFeb 16, 2018

--

Java 프로그래밍을 공부하다 보면 가끔 JIT 컴파일러를 마주치곤 합니다. 이번 기회에 이게 뭐 하는 컴파일러인지 알아보겠습니다.

JIT은 Just — In — Time의 약어입니다. ‘실시간’쯤의 뜻을 가지고 있는 거 같습니다. 이 뜻에 기대어 JIT이 무엇인지 말해보자면, JIT 컴파일러는 프로그램을 실제 실행하는 시점에(실시간에) 기계어로 번역하는 컴파일 기법입니다. 저 같은 초보분들은 무슨 소린지 이해가 안 갈 수 있습니다.

이전에 JDK, JRE, JVM에 관해 포스팅했었습니다. 그 포스팅을 설명하면서 사용했던 그림과 비슷한 그림을 한 번 보겠습니다.

JIT이 어디있을까요? 찾아보세요

파이썬 파일은 일단 제외하고 Java 파일만 보겠습니다. 순서를 매기면서 볼까요?

HelloWorld.java 소스 코드를 생성했다고 가정하겠습니다.

  1. HelloWorld.java 소스 코드를 작성하면
  2. javac.exe(Java 컴파일러)가 바이트 코드(HelloWorld.class)로 변환해줍니다.
  3. 그리고 JVM에서 각 운영체제에 맞는 기계어로 번역해 전달합니다.
힝! JRE안에 있었네~

그리고 그림을 보시면 JIT 컴파일러는 JRE안에 존재합니다. (JVM안에 존재한다고 해도 됩니다. JRE는 JDK에 포함되니까요. 헷갈리시는 분들은 저의 이전 포스팅을 참고해보세요.)

https://medium.com/@ahn428/java-jvm-java-virtual-machine-jre-java-runtime-environment-jdk-java-developement-kit-fed91def1d6f

JIT 컴파일러가 어디에 존재하고 왜 쓰이는지 알아봤습니다. JRE안에 존재하면서 프로그램을 실행할 때 기계어로 번역해 전달하는 장치인 것이죠. 뭐하는 녀석인지는 알겠는데, 그럼 왜 쓰일까요?

JIT 컴파일러는 같은 코드를 매번 해석하지 않고 실행할 때 컴파일을 하면서 해당 코드를 캐싱해버립니다. 이후엔, 바뀐 부분만 컴파일 하고 나머지는 캐싱된 코드를 사용 하는 거죠. So, 인터프리터의 속도를 개선할 수 있습니다.

참고자료

--

--