티스토리 뷰

 

클래스 로더 → JVM 내의 런타임 데이터 영역 배치 → 실행 엔진이 바이트코드 실행

바이트코드 = OpCode (1byte) + 추가 피연산자

 

실행 엔진

▶ OpCode 하나를 가져와 피연산자와 함께 작업을 수행 → 반복

▶ 바이트코드를 실제로 기계가 실행할 수 있는 형태로 변경해야 하는데, 두 가지 방식이 있음.

- 인터프리터

> 바이트코드 명령어를 하나씩 읽어서 해석하고 실행

> 하나하나의 해석은 빠르지만, 인터프리팅 결과의 실행은 느림

- JIT (Just-In-Time) 컴파일러

> 인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 컴파일하여 네이티브 코드로 변경, 이후에는 더 이상 인터프리팅하지 않고 네이티브 코드로 직접 실행

> 네이티브 코드는 캐시에 보관하기에 한 번 컴파일된 코드는 계속 빠르게 수행.

 

> JVM 명세에 규정되어 있지 않기에 다양한 방식의 JIT 컴파일러 도입 (오라클 핫스팟 VM / IBM JVM ...)

> 바이트코드 → IR로 변환하여 최적화 수행 → 네이티브 코드 생성

 

 

Reference

https://d2.naver.com/helloworld/1230

댓글