이번 포스팅에서는 JVM이 어떤 식으로 자바 코드를 해석하고 실행하는지 생각하고 정리해보려고 합니다.
JVM이 자바 코드를 해석/실행하는 데 이해하기 위한 3가지 개념이 존재합니다.
- Compilation
- Execution
- Just-In-Time Compilation (JIT)
이 3가지 개념에 대해서 알아보겠습니다.
Compilation
사람이 작성한 자바 코드는 .java 라는 파일에 작성됩니다. 이 코드는 사람이 알아볼 수 있는 코드입니다.
이제 이 코드를 JVM이 이해할 수 있는 코드인 자바 바이트 코드로 변환할 수 있어야 합니다.
javac라는 Java 컴파일러를 통해 .java 파일에 작성된 자바 코드를 JVM이 이해할 수 있는 자바 바이트 코드로 만들어서 .class라는 형식으로 저장합니다.
Execution
JVM이 이해할 수 있는 자바 바이트 코드는 CPU가 이해할 수 있는 기계어 수준이 아닙니다.
자바 바이트 코드로 컴파일된 코드를 실행하기 위해서는 CPU가 이해할 수 있는 수준으로 다시 변환하는 작업이 필요합니다. 이때 JVM은 자바 바이트 코드를 인터프리터를 통해 한 줄씩 기계어로 번역합니다.
하지만 매번 한 줄씩 기계어로 번역하는 것은 속도 측면에서 단점이 될 수 있습니다. 그래서 이를 최적화 하는 방법이 있습니다.
Just-In-Time Compilation (JIT)
JIT은 자주 사용되는 코드 부분을 식별해서 기계어로 번역해 두고 캐시해서 사용할 수 있게 해줍니다.
그래서 이 캐시된 코드를 저장하는 영역이 존재하는데 이 영역을 튜닝하는 것도 애플리케이션 성능 최적화에 도움이 됩니다.
코드 캐시 : 자바 바이트 코드가 네이티브 코드(기본 하드웨어에서 실행될 수 있는 코드)로 번역되어 캐시된 것을 저장하는 영역
이번 포스팅에서는 자바 코드가 기계어로 번역되기 까지 어떤 과정을 거치는지 간략하게 살펴 봤습니다.
자바는 JVM 이라는 도구를 통해 사용될 운영체제에 독립적인 언어입니다. 하지만 그렇게 하기 위해 JVM이라는 중간 추상화 계층이 생겨버렸고, 코드를 두 번 해석하게 될 수 밖에 없게 되었습니다...
'Programming Language > Java' 카테고리의 다른 글
오토박싱, 오토박싱의 문제점과 해결방법 (1) | 2024.11.28 |
---|---|
Java Start (0) | 2024.06.18 |
Java reflection API (0) | 2023.08.19 |
Java의 동작 방식에 대하여 - JVM Architecture, ClassLoader (0) | 2023.07.19 |
Java의 람다식(Lambda expression)에 대해 알아보기 (0) | 2023.07.15 |