인터프리트 컴파일
- 실행 중 프로그래밍 언어를 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행 [런타임 컴파일]
- 소스 코드를 한 줄씩 읽어들여서 해석하고 실행
- 빠르게 실행할 수 있지만, 반복적으로 실행되는 코드가 있을 경우 이를 매번 해석하고 실행하여 비효율적
정적 컴파일
- 실행하기 전에 프로그램 코드를 기계어로 번역
JIT 컴파일(Just in Time compilation) = 동적 컴파일
- 인터프리트 + 정적 컴파일 방식을 혼합한 방식으로 생각 가능
- 실행 시점에서 인터프리트 방식으로 기계어 코드를 생성하면서 그 코드를 캐싱하여, 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는 것을 방지 [런타임 컴파일]
- 최근의 JVM(자바 가상 머신), .NET, V8(node.js)에서는 JIT 컴파일을 지원
JVM의 컴파일 과정
- 자바 컴파일러가 자바 프로그램 코드를 바이트 코드로 변환한
- 실제 바이트 코드를 실행하는 시점에서 JVM(자바 가상 머신)이 바이트 코드를 JIT 컴파일을 통해 기계어로 변환
- 즉, 인터프리터 모드로 컴파일 되어 실행되나 JVM은 실행되는 코드를 모니터링하여 가장 자주 실행되는 코드 부분을 찾아내고 이를 JIT 컴파일러를 사용해 네이티브 코드로 변환함. 이렇게 변환된 코드는 이후부터 인터프리터 모드보다 더욱 빠르게 실행됨
- JVM 내 코드 캐시(Code cache)라는 메모리 영역에 JIT 컴파일드 코드가 저장되고, 인터프리터 관련 코드 등 JVM 자체 네이티브 코드도 함꼐 들어 있음

'IT' 카테고리의 다른 글
| [Anaconda/Windows] 아나콘다에서 가상 환경 삭제하기 (0) | 2024.07.16 |
|---|---|
| [GitHub Actions] CI/CD를 하는 깃허브 액션이란 무엇일까? (0) | 2024.05.30 |
| [CI/CD] 개발 프로세스에 쓰이는 CI/CD란 무엇인가? (0) | 2024.05.30 |
| [Git] Git download 깃 설치하기 (1) | 2024.04.06 |
| IT 마이그레이션(IT Migration)이란? (1) | 2024.04.03 |