작성
·
845
1
안녕하세요, 백기선님.
기존에 저는 JVM 내에서 JIT이 컴파일러와 인터프리터의 역할을 동시에 수행한다고 이해하고 있었는데요.
자료(p.4)에서는 [실행엔진 : 인터프리터, JIT Compiler, GC ] 로 구성되어 있어서 질문드립니다.
인터프리터와 JIT 컴파일러는 서로 분리되어 역할을 수행하는 것이 맞고,
바이트 코드를 실행할 때, JIT 컴파일러가 전체를 싹 훑고, 반복되는 코드에 대해 메모리에 캐싱을 진행한 후, 인터프리터가 처음부터 순차적으로 읽어 나가다가, 반복되는 해당 지점에서 JIT Compiler가 다시 개입하여 캐싱된 코드를 꺼내오는 형태일까요? 이 부분이 조금 헷갈리기도 하고, 궁금하기도 합니다.
혹은 어떤 문서를 보면 공부해볼 수 있을까요?
(한국어 블로그에는 대부분 인터프리터와 JIT이 같다고 적어둔 경향이 많은 것 같고, 기선님께서 참고에 올려주신 글이나 해외 블로그에서는 둘을 분리해서 말하는 경향이 있는 것 같아서 더 헷갈리는 것 같습니다.)
감사합니다!
* 아래 질문과 비슷한 내용이지만, 답변 달아주신 링크에 접속이 안되서 부득이하게 다시 질문 드립니다ㅠ
답변 1
3
https://docs.oracle.com/javacomponents/jrockit-hotspot/migration-guide/comp-opt.htm#JRHMG117
Unlike Oracle JRockit, HotSpot features a Java byte code interpreter in addition to two different JIT compilers - client (aka C1) and server (aka C2)).
그 둘이 같은거라면.. 오라클 공식 문서에 이렇게 적었을리가 없겠죠.
감사합니다!