2011. 8. 21. 13:53
IBM의 JIT Compiler JAVA이야기2011. 8. 21. 13:53
JIT 컴파일러의 경우 바이트코드를 재실행하는 경우 네이티브 코드를 다시 사용한다.
이 NativeCode의 단위는 class단위가 아니고 method단위이다.
JIT 컴파일러는 byte코드를 최적화한다.
Mixed Mode Interpreter
Method의 수행횟수를 체크하여 정해진 임계값에 따라 Complile 여부를 결정함으로써 JIT Compiler를 제어한다.
MMI는 최초의 Method Call에 대해서는 compile을 수행하지 않고 Method를 수행할 때마다 수행횟수를 기록한다.
그러다가, 수행횟수가 임계값에 도달하기 하게 되면 이를 nativeCode로 컴파일하게 된다.
Compile을 수행한 후 Method의 수행횟수는 다시 0으로 초기화되고 다시 수행횟수를 기록하게 된다.
이 NativeCode의 단위는 class단위가 아니고 method단위이다.
JIT 컴파일러는 byte코드를 최적화한다.
Mixed Mode Interpreter
Method의 수행횟수를 체크하여 정해진 임계값에 따라 Complile 여부를 결정함으로써 JIT Compiler를 제어한다.
MMI는 최초의 Method Call에 대해서는 compile을 수행하지 않고 Method를 수행할 때마다 수행횟수를 기록한다.
그러다가, 수행횟수가 임계값에 도달하기 하게 되면 이를 nativeCode로 컴파일하게 된다.
Compile을 수행한 후 Method의 수행횟수는 다시 0으로 초기화되고 다시 수행횟수를 기록하게 된다.
Ahead Of Time Compiler(AOT compiler)
- JIT와 동일하게 ByteCode->NativeCode로 컴파일한다.
- 다른점은, 하나의 JVM에서만 사용할 수 있는게 아니라,여러 JVM에서 사용할 수 있다는 것이다.
- AOT Compiler는 생성한 AOT code를 Shared Cache에 저장한다. 그러면 이 Shared cache를 사용하는 JVM은 기동 시 AOT Code를 바로 사용할 수 있게 되어 기동시간이 줄어드는 이점이 있다.
Hotspot Compiler
- ByteCode는 Interpreter를 통해 해석되고 Profiling을 거쳐 Dynamic Compile이 된다.
- Hotspot Compiler는 2가지의 VM을 사용한다.
1. 하나는 ClientVM 으로써, 작고 가벼운 프로그램을 컴파일 할 때 사용한다.
Value Numbering : 같은 값을 가지는 변수들을 하나의 변수만 상수를 가지게 하고, 나머지는 이를 참조하게 한 최적화
- JIT와 동일하게 ByteCode->NativeCode로 컴파일한다.
- 다른점은, 하나의 JVM에서만 사용할 수 있는게 아니라,여러 JVM에서 사용할 수 있다는 것이다.
- AOT Compiler는 생성한 AOT code를 Shared Cache에 저장한다. 그러면 이 Shared cache를 사용하는 JVM은 기동 시 AOT Code를 바로 사용할 수 있게 되어 기동시간이 줄어드는 이점이 있다.
Hotspot Compiler
- ByteCode는 Interpreter를 통해 해석되고 Profiling을 거쳐 Dynamic Compile이 된다.
- Hotspot Compiler는 2가지의 VM을 사용한다.
1. 하나는 ClientVM 으로써, 작고 가벼운 프로그램을 컴파일 할 때 사용한다.
Value Numbering : 같은 값을 가지는 변수들을 하나의 변수만 상수를 가지게 하고, 나머지는 이를 참조하게 한 최적화
2. 다른 하나는 ServerVM으로서, 좀 더 강력한 컴파일러이다.
'JAVA이야기' 카테고리의 다른 글
반복문을 실행하는 코드를 동기화시키는 방법은 비효율적이다. (0) | 2011.08.27 |
---|---|
AppLevel에서 바인딩 변수 사용하기 (0) | 2011.08.23 |
Execution Engine (0) | 2011.08.21 |
직렬화된 필드 (0) | 2011.08.07 |
맞춤화된 직렬화 (0) | 2011.08.07 |