바이트 코드란,
- .java 코드를 자바 컴파일러(Javac)가 컴파일 하게되면 .Class 형태의 파일을 생성하는데, 이 .Class 파일로 된 코드를 바이트 코드라고 함
- 쉽게 말하면, JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미 함
- 자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트라서 바이트 코드라 불림
자바 프로그램의 실행 과정
- .java 코드를 컴파일하여 .class 바이트 코드를 생성하면, 클래스 로더(Class Loader)를 통해 JVM Runtime Data Area로 배치되고, 배치된 바이트 코드를 실행할 JVM에 전달하면 프로그램을 실행할 때 JVM이 기계어로 해석하게 된다.
바이트 코드를 읽는 방식
- JVM에서는 바이트 코드를 명령어 단위로 읽어서 해석하는데, 이 때 사용되는 방식이 Interpreter 방식과 JIT 컴파일 방식임
Interpreter 방식
- 바이트 코드를 한 줄씩 해석, 실행하는 방식
- 초기 방식으로 속도가 느림
JIT 컴파일 방식
- 속도가 느린 Interpreter 방식을 보완하기 위해 나온 방식
- 초기 실행시점에 자주 사용될만한 바이트 코드를 미리 기계어로 해석하여 저장(캐싱) 해뒀다가 재사용 하는 방식
-> 바이트 코드를 기계어로 변환하는 데에도 비용이 소모되므로, JVM에서는 Interpreter 방식을 사용하다가 일정 기준이 넘어가면 JIT 컴파일 방식을 사용한다.
-> 결국, JVM에서 2가지 방식 모두를 혼합하여 사용
참고 Reference