관리 메뉴

HAMA 블로그

JIT 잡동사니 본문

소프트웨어 사색

JIT 잡동사니

[하마] 이승현 (wowlsh93@gmail.com) 2015. 11. 29. 11:25

위키참조 : 

JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에
기계어로 번역하는 컴파일 기법이다. 이 기법은 프로그램의 실행 속도를 빠르게 하기 위해 사용된다.

초심자들이 JIT 따위 고려하지 않은 어설픈 벤치마크 코드를 짜놓고 "아 Java 구리네   C만세" 이러는 경우가 간혹 있다.



Python :  일반적으로 CPython 을 말하며  .pyc 바이트코드를 생성하고 C 로 구현된 가상머신에서 인터프리팅함.

PyPy    :  .pyc 바이트코드를 meta-tracing  JIT 컴파일 (머신코드로) 하여 사용함. CPython 보다 4~6배 빠르다고함. 

(참고 : http://j.mearie.org/post/5125952364/why-is-pypy-faster-than-cpython)

Java    :  JDK 1.3 이후  trace based  JIT 도입  (참고 : http://d2.naver.com/helloworld/1230 )

Javascript :  V8  (참고 : http://jayconrod.com/posts/51/a-tour-of-v8-full-compiler )

(V8은 자바스크립트를 바이트코드(bytecode)로 컴파일하거나 인터프리트(interpret)하는 대신 실행하기 전 직접적인 기계어(x86, ARM, 또는 MIPS)로 컴파일(compile)하여 성능을 향상시켰다. 추가적인 속도향상을 위해 인라인 캐싱(inline caching)과 같은 최적화 기법을 적용하였다.) 



그런데 자바 바이트코드는 기계가 바로 수행할 수 있는 언어보다는 비교적 인간이 보기 편한 형태로 기술된 것이다. 그래서 실행 엔진은 이와 같은 바이트코드를 실제로 JVM 내부에서 기계가 실행할 수 있는 형태로 변경하며, 그 방식은 다음 두 가지가 있다.

  • 인터프리터: 바이트코드 명령어를 하나씩 읽어서 해석하고 실행한다. 하나씩 해석하고 실행하기 때문에 바이트코드 하나하나의 해석은 빠른 대신 인터프리팅 결과의 실행은 느리다는 단점을 가지고 있다. 흔히 얘기하는 인터프리터 언어의 단점을 그대로 가지는 것이다. 즉, 바이트코드라는 '언어'는 기본적으로 인터프리터 방식으로 동작한다.  (python 과 동치)
  • JIT(Just-In-Time) 컴파일러: 인터프리터의 단점을 보완하기 위해 도입된 것이 JIT 컴파일러이다. 인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 컴파일하여 네이티브 코드로 변경하고, 이후에는 해당 메서드를 더 이상 인터프리팅하지 않고 네이티브 코드로 직접 실행하는 방식이다. 네이티브 코드를 실행하는 것이 하나씩 인터프리팅하는 것보다 빠르고, 네이티브 코드는 캐시에 보관하기 때문에 한 번 컴파일된 코드는 계속 빠르게 수행되게 된다. (pypy 와 동치) 



'소프트웨어 사색 ' 카테고리의 다른 글

SCADA 란? 그리고 SCADA 와 IoT  (0) 2016.01.05
가벼운 웹사이트 만들기  (0) 2015.12.01
Call by value in Polyglot  (0) 2015.11.23
딥러닝 라이브러리 - Caffe (머신-비전 특화)  (0) 2015.11.18
WebRTC  (0) 2015.11.13
Comments