JIT 컴파일러
JIT 컴파일러는 JVM의 Execution Engine 파트에 속해있습니다. 예전 자바는 인터프리터 방식만을 사용했다고 합니다. 인터프리터의 경우 명령어를 하나씩 실행하는 방식으로 각각의 명령어 단위로 본다면 실행 속도가 빠르지만 큰 덩어리로 본다면 속도가 느린 방식입니다. 중복되는 코드가 있어도 라인별로 실행하기에 다시 인터프리팅하는 과정이 들어가거든요.
JIT 컴파일러는 Just In Time 컴파일러로 인터프리터 방식의 단점을 보완하기 위해 도입되었습니다. 실행 시점에 인터프리터 방식으로 기계어 코드를 생성 하면서 그것을 따로 캐싱해둡니다. 나중에 동일한 부분이 호출된다면 캐싱해둔 코드를 불러다가 쓰면 되겠죠. 이러한 경우에는 인터프리터 방식보다 빠르다고 볼 수 있습니다.
저는 여기까지 정리하면서 살짝 의문이 들었습니다. JIT이 인터프리터의 단점을 보완한 더 나은 방식이면 JIT만 쓰면 되는게 아닐까요?? 왜 JVM 구조를 살펴보면 둘이 같이 있는 걸까요?? 자바 소스 코드가 실행되는 과정을 설명한 영상에서 얼추 답변을 얻을 수 있었습니다.
www.youtube.com/watch?v=8y0L9QT7U74&ab_channel=smackdounnkol
해당 영상은 영어로 설명되기 때문에 제가 오역을 했을 가능성이 존재하므로 영상 링크도 걸어두었습니다. 딱 썸네일에 있는 예시처럼 소스 코드의 4,5,6번 라인은 사실 같은 내용이죠. 인터프리터는 얘네들을 모두 실행하는데 반해 JIT 컴파일러는 먼저 소스 코드 전체를 확인합니다. 그러고 중복을 미리 체크해두죠. 그리고 인터프리터 방식으로 실행하다가 아까 체크된 4번 부분을 만난다면 결과를 캐싱해둡니다. 5번과 6번은 내용이 동일하므로 캐싱된 결과를 가져오면 되겠죠.
HotSpot 방식
음.. JIT 방식에 대해서 검색하다가 Hotspot 얘기도 보게된 김에 정리해보겠습니다. 일반적으로 JIT 방식은 IBM에서 사용하는 방식이고 HotSpot방식은 Sun에서 사용한다고 합니다. 소스 코드에서 성능이 저하가 될만한 그런 부분을 HotSpot이라고 부릅니다. Hotspot을 찾아서 그 부분을 미리 튜닝을 시킨 뒤에 실행을 합니다. 따라서 튜닝 과정이 들어가기에 최초 실행할 때는 오래 걸리나 그다음부터는 튜닝된 결과를 이용해서 실행하므로 빨라진다고 합니다.
참고medium.com/@ahn428/java-jit-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC-c7d068e29f45
책 - 객체중심자바
'Java' 카테고리의 다른 글
[JAVA] JDK와 JRE의 차이 (0) | 2021.04.04 |
---|---|
[JAVA] JVM 구성 요소 (0) | 2021.03.29 |
바이트 코드란? (0) | 2021.03.23 |
JVM이란? - 특징 (0) | 2021.03.22 |
자바 산술변환 (0) | 2021.03.11 |