Java
2023. 1. 14. 19:39
JIT 컴파일
정의
- Just-In-Time Compilation (= Dynamic Translation, 동적 번역)
- 프로그램을 실행하는 시점(런타임)에 기계어로 번역하는 컴파일 기법이다.
- 실행 시점에 인터프리트 방식으로 코드를 읽어가면서 기계어 코드를 생성한다.
- 생성된 기계어 코드를 캐싱하여, 재사용 시에는 캐싱된 기계어 코드를 사용한다.
Java의 경우
- Java 컴파일러 : 자바 프로그램 코드 → 바이트코드
- JIT 컴파일러 : 바이트코드 → 기계어 코드
장점 (사용 이유)
- Only 인터프리터 방식보다는 성능이 좋고, Only 정적 컴파일 방식보다는 이식성이 좋다.
- 즉, 정적 컴파일러의 성능과 인터프리터 언어의 편의성을 모두 추구한다.
의외의 장점
정적 컴파일러로 번역한 결과보다 성능이 더 좋을 수 있다.
- 실행 환경에 맞추어 최적화된 코드를 생성할 수 있다.
- CPU 세대마다 지원하는 명령어가 다를 수 있는데, 더 효율적인 명령어로 수행 가능한 작업은 해당 명령어를 통해 수행하도록 할 수 있다. (ex. 인텔 x86 CPU의 MMX 명령어)
- 실행 환경의 캐시, 메모리 크기 등 런타임에만 알 수 있는 H/W, S/W 정보를 활용할 수 있기 때문에 정적 컴파일보다 좋은 성능의 코드를 생성할 가능성이 있다.
- 가상 함수 테이블을 통해 가상 메서드가 간접 호출될 때, 해당 메서드를 오버라이드하는 서브(자식) 클래스가 존재하지 않을 경우에 간접 호출을 정적 바인딩(Static Binding)으로 호출하거나 인라인으로 전개할 수 있다고 한다.
참고
'Java' 카테고리의 다른 글
OpenJDK 아카이브 링크 (0) | 2022.12.10 |
---|---|
Java의 정석 13장 리뷰 (1) | 2022.11.11 |
백기선 스프링 프레임워크 핵심 기술 완강 후기 (0) | 2022.11.07 |
Java 이클립스 The project description file (.project) for ~ is missing 에러 (0) | 2021.12.13 |