JVM과 JIT 컴파일러

lsy·2022년 12월 11일
0

JVM

JVM는 Java Virtual Machine이다. 보통 Java의 바이트 코드를 실행하는데 사용하나, 사실 바이트 코드만 있으면 전부 실행이 가능하기 때문에, 꼭 그 바이트 코드를 만드는 언어가 Java가 아니어도 된다.

즉, 이름에 Java가 들어가지만 바이트 코드를 만들 수 있는 언어면 어떤 언어든 상관 없는 것이다.

JVM은 여러 가지 구현체가 있으며 가장 유명한건 썬 마이크로시스템즈에서 개발한 HotSpot VM이다.

JIT 컴파일러

컴파일에는 정적 컴파일과 동적 컴파일 두 종류가 존재한다.

정적 컴파일은 C, C++ 같이 미리 기계어로 변환 후 실행하는 것을 뜻하며, 동적 컴파일은 프로그램 실행 도중에 기계어로 변환하는 것을 뜻한다.

Java는 javac가 코드를 바이트 코드로 변환해주고, 변환한 바이트 코드를 JVM에서 읽어 기계어로 변환해주는 과정을 거친다. 인터프리터 방식이라고도 말할 수 있다.

그러나 일반적인 인터프리터 방식은 최적화 없이 한 줄씩 읽어 기계어로 컴파일하므로 성능이 낮은데, JIT 컴파일러는 이를 해결해준다.

JIT 컴파일러는 동적 컴파일로 작동하는데, 컴파일하면서 코드를 스캔하여 자주 등장하는 코드를 기계어로 변환 후 캐싱해둔다. 이를 이용해 시간을 상당히 줄일 수 있다.

JIT 컴파일러는 JVM 환경에 포함되어 있으므로, 따로 신경쓰지 않아도 된다.

추가로 이런 cpython의 성능을 해결하기 위해 pypy가 등장했고 pypy는 JIT 컴파일러를 사용해 속도가 cpython보다 훨씬 빠르다.

profile
server를 공부하고 있습니다.

0개의 댓글