JVM을 공부하다 보니 JIT 컴파일러에 대해 나와 찾아보게되었다.
https://bangbaeking.tistory.com/87
[Java] JVM , Java compiler, Java 코드 실행과정 JDK,JRE,JVM
JVM이란? Java Virtual Machine 자바 가상 기계이다. Java는 운영체제에 종속적이지 않고, 작성된 Java 코드가 JVM에서 OS가 해석할수있는 bytecode로 변환해준다. ( OS에 종속적이지 않다 - 맥에서 작성된 Java
bangbaeking.tistory.com
대충 파이썬은 인터프리터 방식을 사용하고 한줄씩 기계어로 변환, C/C++은 컴파일러를 사용하고 한번에 전체를 기계어로 변환한다. 정도로 알고있었는데 Java는 어떤 방식으로 진행되는지, JIT 컴파일러는 무엇인지 알아보자
인터프리터 방식
인터프리터 방식은 고급언어로 작성된 프로그램을 한줄씩 번역해서 OS에서 인식하는 기계어로 번환한다.
번환 속도는 빠르지만 실행속도가 느리다.
컴파일 방식
컴파일러는 고급언어로 작성된 프로그램을 목적 프로그램으로 번환후 링킹작업을 통해 실행파일을 생성한다.
인터프리터와 반대로 초기 스캔시간은 오래 걸리지만 실행속도가 빠르다.
Java의 컴파일과 인터프리터
자바는 컴파일러와 인터프리터를 모두 사용한다.
먼저 java파일을 자바 컴파일러가 class파일로 변환을 하면 자바 컴파일러에 의해 변환된 바이트코드(class 파일)를 JVM에서 자바 인터프리터가 한줄씩 해석한다.
즉, 자바 컴파일러는 java파일을 JVM을 위한 기계어로 변환한다.
Java가 JVM에서 인터프리터를 사용하는 이유
인터프리팅의 장점은 플랫폼에 종속적이지 않은것이다. Java는 컴파일러에 의해 생성된 바이트코드를 JVM에서 자바 인터프리터를 통해 클래스파일을 한줄씩 읽어 실행한다. 해당 과정을 통해 Java는 플랫폼에 종속되지 않는다.
하지만 인터프리터를 사용하면 속도가 너무 느려지기 때문에 해당 부분을 보완하기위해 JVM은 부분적으로 JIT 컴파일러를 사용하여 바이트코드를 컴파일하여 사용한다.
JIT 란?
컴파일후 인터프린팅을 하기 때문에 속도가 너무 느려 해당 문제를 개선하기 위해 나온 컴파일러.
JIT 컴파일러의 동작 방식
JIT 컴파일러는 코드가 실행되는 과정에 실시간으로 일어나며 (Just In Time) 필요한 부분만 변환한다.
기계어로 변환된 코드는 캐시에 저장되기 때문에 재사용시 다시 컴파일을 할 필요가 없다.
JIT 컴파일러는 해당 코드가 얼마나 자주 실행되었는지를 기반으로 컴파일 유무를 결정한다.
즉, 반복되는 코드들을 컴파일하여 캐싱해서 인터프리터가 반복되는 코드를 계속 읽지않고 컴파일된 코드를 사용하는것이다.
JIT 컴파일러의 장점
결론적으로 JIT 컴파일러를 통해 반복되는 코드들을 컴파일하여 저장해놓아서 실행속도를 향상시킬수있다.
Reference
'Java , Spring > Java' 카테고리의 다른 글
[Java] String.valueOf() 와 toString() (0) | 2024.01.17 |
---|---|
[Java] Garbage Collection (1) | 2024.01.15 |
[Java] JVM 메모리 구조 (0) | 2024.01.12 |
[Java] String, StringBuffer, StringBuilder 차이 및 장단점 (0) | 2024.01.10 |
[Java] String 특징, String Pool (1) | 2024.01.10 |
댓글