JIT 컴파일

내위키
Dennis (토론 | 기여)님의 2017년 10월 30일 (월) 23:17 판

Just-in-time compile.

우리 말로 풀어보면 '적시 컴파일', 즉 적절한 시점에 컴파일 하는 것을 뜻한다. 보통 컴파일이라고 하면 프로그램을 만들고 나서 개발자가 컴파일러를 돌려서 기계어로 된 실행 파일을 만들거나 중간 파일, 또는 다른 프로그래밍 언어 코드로 변환한다. 하지만 JIT 컴파일은 개발자가 컴파일을 하는 게 아니라, 사용자가 프로그램을 실행하는 시점에서 컴파일이 이루어진다. 예를 들어, 자바 프로그램은 컴파일을 하면 바이트코드라는, 하드웨어와 운영체제에 중립인 중간 코드 파일이 만들어진다. 사용자가 이 바이트코드 파일을 실행시키면 인터프리트 방식으로 기계어로 번역되는데, 이러다 보니까 속도가 느리다는 단점이 있었다. 결국 JIT 컴파일 방식이 도입되어 사용자가 처음 실행할 때 바이트코드를 컴파일해서 기계어 실행파일로 변환해 놓고 이걸 실행하는 방식으로 바꾸면서 속도를 대폭 향상시키는 효과를 얻었다. 보통 JIT 컴파일은 최초 실행할 때 한번 컴파일해서 기계어 파일을 만들어 놓고 그 이후에는 원본의 내용이 바뀌지 않았다면 이전에 컴파일해 두었던 기계어 파일을 실행시키는 방식으로 사용된다. 즉, 프로그램을 처음으로 실행할 때에는 컴파일 과정 때문에 초기에 실행이 시작되는 속도가 많이 느리다는 단점이 있지만, 그 이후로는 대체로 인터프리트 방식 실행보다 엄청나게 빠른 속도를 보여준다.

활용 예

  • 자바스크립트 역시 파이어폭스가 JIT 컴파일 방식을 도입했고 구글 크롬이 이를 뒤따르면서 어마어마한 속도 향상을 가져왔다.
  • 안드로이드도 초기에는 달빅 캐시가 자바 가상 머신 구실을 하면서 중간 코드 형태로 된 앱 파일을 인터프리트 방식으로 실행했으나 이후에는 JIT 컴파일 방식을 도입한 ART(Android Runtime) 로 바뀌었다. 사실 ART는 정확하는 JIT 컴파일이 아니라 AOT(Ahead-of-time) 컴파일이다. 즉, 실행 시점에서 컴파일되는 게 아니라 앱 파일을 설치하는 과정에서 컴파일이 이루어진다.