JIT 컴파일러는 인터프리터이면서 컴파일러이다.
C1, C2 컴파일러로 나뉘는데, 위 사진을 보면은 자바 인터프티터와 JIT 컴파일러가 있는 것이 보인다.
C1 컴파일러가 자바 인터프리터에 속하고, C2 컴파일러가 JIT 컴파일러라 보면 된다.
자바가 다른 동적 컴파일 언어보다 좋은 성능을 내는 이유는 C2 컴파일러가 있기 대문이다.
번역된 코드를 캐싱하여 재사용시 캐싱된 코드를 가져와 다시 컴파일하지 않아도 되기 때문이다.
>> 여기서 정적 컴파일과 같은 성능을 내기 때문이다.
하지만 모든 코드를 캐싱하지는 못한다. JVM의 캐시 공간은 매우 작기 때문에 자주 수행되는 코드들을 선별하여 캐싱한다.
JVM은 코드들의 수행 빈도와 복잡도에 때라 4가지 레벨로 분류하는데 1~3 레벨 코드는 C1컴파일러를 이용해 기계어로 컴파일되고 수행되지만, 캐싱되지 않는다.
하지만 레벨 4 코드는 C2 컴파일러를 이용해 캐싱한다.
'프로그래밍언어' 카테고리의 다른 글
자바의 Object Class (0) | 2023.02.10 |
---|---|
deep copy, shallow copy, String, Heap, Stack, Immutable, mutable (0) | 2023.02.10 |
비동기, 동기 통신과 call back (0) | 2022.10.03 |
call by reference, call by value (0) | 2022.10.03 |
C++, JAVA 차이 (0) | 2022.09.25 |