JVM Compile Process
JVM Compile Process
JVM Compile Process
- Java 코드를 자바 컴파일러를 통해 자바 바이트코드로 작성
- 컴파일된 바이트코드(.class 파일)를 JVM의 클래스 로더에게 전달
- 클래스 로더는 총 3단계로 다음 동작을 수행
- 로딩: 자바 바이트 코드를 JVM의 runtime data area에 적재함
- 링킹: 로딩된 클래스 파일을 검증하고, 필요한 메모리를 할당하고, 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경
- 초기화: 동시성을 고려해 static 필드를 초기화 및 초기화 메서드 수행
- 이제 JVM이 클래스 파일을 실행할 수 있게 되었으므로, 실행 엔진이 인터프리터 방식으로 바이트 코드 명령어를 하나씩 실행
- 인터프리터 방식으로 실행되다가 일정 기준이 넘어가면, JIT 컴파일러가 수행됨
- 반복되는 바이트 코드를 컴파일해서 native code로 직접 실행
- Native code로 변경된 코드는 캐싱해 둠
- 모든 코드를 JIT 컴파일하는 것은 비효율적이므로, 일정 기준을 넘어갔을 때만 수행됨
References
- https://steady-snail.tistory.com/67
- https://yang-droid.tistory.com/48
- https://velog.io/@jifrozen/JVM-%EA%B5%AC%EC%84%B1%EC%9A%94%EC%86%8C-1-%ED%81%B4%EB%9E%98%EC%8A%A4-%EB%A1%9C%EB%8D%94
- https://inpa.tistory.com/entry/JAVA-%E2%98%95-JVM-%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD-%EC%8B%AC%ED%99%94%ED%8E%B8