JIT (Just-In-Time)
컴퓨터 프로그래밍을 실행하는 두 가지 방식인
인터프리트 방식과 정적 컴파일 방식을 혼합한 것.
인터프리트 방식
: 프로그램을 실행할 때마다 컴퓨터가 알아 들을 수 있는 언어로 변환하는 작업을 수행함.
간편하지만 성능이 매우 느림
정적 컴파일 방식
: 실행하기 전에 컴퓨터가 알아 들을 수 있는 언어로 변환하는 작업을 미리 실행함.
변환 작업은 딱 한 번만 수행하므로 속도가 빠름.
따라서, JIT의 변환 작업은
인터프리터에 의해서 지속적으로 수행되지만, 필요한 코드의 정보는 캐시에 담아두었다가(메모리에 올려두었다가)
재사용하게 된다.
"분명히 나는 javac 명령어를 통해 컴파일을 했는데, 그럼 그냥 정적 컴파일 방식이 아닌가?"
: javac라는 명령어를 통해 컴파일을 하는 단계에서 만들어진 class라는 파일은 바이트 코드(bytecode)일 뿐이다.
javac라는 명령어를 수행한다는 것은 우리가 만든 java 파일을 어떤 OS에서도 수행할 수 있도록
바이트 코드라는 파일로 만든 것 뿐이다.
"Compile Once, Run Anywhere" - 자바 모토
이것을 컴퓨터가 읽을 수 있도록 한번 더 변환 작업을 해야 하는데,
그 작업을 JIT 컴파일러에서 한다고 보면 된다.
자바 프로그램이 수행되는 절차
자바 소스 코드 -> 자바 컴파일러 -> 컴파일된 Bytecode -> JVM -> 기계 코드 -> 하드웨어 및 OS
이 단계에서 "JVM -> 기계 코드"로 변환되는 부분을 JIT에서 수행함.
JIT의 장점
반복적으로 수행되는 코드는 매우 빠른 성능을 보인다.
JIT의 단점
처음 시작할 때에는 변환 단계를 거쳐야 하므로 성능이 느림.
결론
최근 들어 CPU 성능과 JDK 성능이 좋아져 위 단점이 많이 개선됨.
'Java' 카테고리의 다른 글
JVM에 대해 알아보자! (0) | 2021.08.11 |
---|---|
자바의 컴파일 과정을 이해해보자 (0) | 2021.07.30 |
[JAVA] 중간 점검 (0) | 2021.05.17 |
[JAVA] 14. Function Interface (0) | 2021.05.11 |
[JAVA] 13. 쓰레드(Thread) (0) | 2021.05.04 |