2.JIT 컴파일러

Download Report

Transcript 2.JIT 컴파일러

JIT Compile
김진태
JIT Compile이란 ?
• Managed Code(C#, java, managed C++ 등)에서의 성능 향상을 목
적으로 둔 컴파일 기법
Java를 예로 들면
• 예) JVM
– JVM의 일반적인 실행 방식
– JIT Compile 방식
byte code를
실행하는 경우
JVM은 한번에 하나의 byte code
명령어를 번역하여 실행한다.
JIT 방식을 사용하게 되면 호출한
byte code를 해당 플랫폼에서의
실행 가능한 기계 코드로
실행시간에 컴파일한 후,
기계 코드를 사용한다.
이것은 기존의 interpreter방식의
단점을 보완한 방법으로
특정 메쏘드를 지속적으로 호출할
때 더 빠른 성능을 보인다.
JIT Compile이란 ?
•
실제로 JVM은 JIT Compiler를 포함하고 있지만
•
라고 볼 수 있다.
•
interpreter 방식에서는 byte code 명령어 하나씩 그때 그때 변환하여
실행하지만
JIT를 사용하면 호출 되는 순간 프로그램의 한 단위를 machine code로
컴파일 해서 메모리에 올려놓고 지속적으로 그 코드를 사용한다.
•
– JVM은 interpreter
– JIT는 Compiler
– 하지만 이로 인해 일부 프로그램의 경우 오히려 성능 저하를 가져 올 수 있다.
•
반복적인 메소드 호출이 없는 경우에는 지속적인 bytecode->machine code 로의 컴파일이 발생하기 때문에
성능 저하가 발생한다.
– 이러한 이유로 JVM에서 JIT는 option으로 사용 여부를 선택 할 수 있다.
– 이를 보완하기 위한 compile 방식으로 AOT(ahead-of-time) 방식이 있다.
•
AOT 방식은 실행 전에 미리 컴파일하는 방식으로 성능 향상에 도움이 된다.
–
•
자세한 내용은 위키참조(http://en.wikipedia.org/wiki/AOT_compiler)
※ .NET Framework의 CLR 역시 JIT 기능을 가지고 있다.
참조
• http://www.terms.co.kr/JITcompiler.htm
• http://www.trl.ibm.com/projects/jit/index_
e.htm
첨부
• Managed Code
– 통상 중간언어라 부르기도 한다.
– JVM과 CLR에 의해 실행시간에 기계어로 번역되어
실행되는 코드
• 실행 환경을 만들어주면 플랫폼 영향을 덜 받는다는 장점이
있지만
• 인터프리터 머신에 의해 실행시간에 기계어 번역의 오버헤드
가 발생하여 성능이 느리다는 단점이 있다.
– 예)
– 이를 보완하기 위한 기술 -> JIT Compile
• byte code
• IL
– java code를 java compiler에 의해 컴파일되어 나오는 code
– C#, basic, managed C++을 .NET Framework Compiler에 의해 컴
파일되어 나오는 code