처음부터 차근차근

[Java] JVM?? JDK?? 용어 정리 본문

Language/Java

[Java] JVM?? JDK?? 용어 정리

HangJu_95 2023. 12. 14. 14:45
728x90

JVM(Java virtual machine)

간단히 직역하면 자바를 실행하기 위한 가상 기계라고 할 수 있습니다.

자바로 작성된 애플리케이션은 모두 이 JVM에서만 실행되기 때문에 JVM은 필수적입니다.

Java는 OS에 종속적이지 않다는 특징을 가지고 있는데, 이는 JVM을 통해서 가능합니다.

컴파일 과정

Java의 소스코드는 CPU가 인식하지 못하므로 기계어로 컴파일 해줘야 합니다.

하지만 Java는 JVM이라는 가상 머신을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아니라 JVM이 인식할 수 있는 Java bytecode(*.class)로 변환됩니다.

 

이렇게 변환된 bytecode는 기계어가 아니기 때문에 바로 OS에서 실행되지 않습니다. 대신 JVM이 OS가 bytecode를 이해할 수 있도록 해석해줍니다.

이를 통해서 OS에 종속적이지 않고, Java파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행할 수 있게 됩니다.

JVM을 통해 다양한 OS에서 자바 프로그램을 실행시킬 수 있다.

 

사실 Java는 JVM을 한번 더 거치기 때문에, 그리고 하드웨어에 맞게 완전히 컴파일 된 상태가 아니고 실행 시에 해석(interpret)되기 때문에 속도가 느리다는 단점을 가지고 있었습니다.

그러나 요즘엔 bytecode를 하드웨어의 기계어로 바로 변환해주는 JIT 컴파일러와 향상된 최적화 기술이 적용되어 속도가 크게 향상되었습니다.

JIT 컴파일러

JIT 컴파일(just-in-time compliation) 또는 동적 번역(dynamic translation) 이라고 합니다.

JIT 컴파일러는 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일러입니다.

 

인터프리터 방식의 단점을 보완하기 위해 도입되었으며, 인터프리터 방식으로 실행하다가 적절한 시점에 바이트 코드 전체를 컴파일하여 기계어로 변경하고, 이후에는 해당 더 이상 인터프리팅 하지 않고 기계어로 직접 실행하는 방식입니다.

 

기계어(컴파일된 코드)는 캐시에 보관하기 때문에 한 번 컴파일된 코드는 빠르게 수행하게 됩니다.
물론 JIT 컴파일러가 컴파일하는 과정은 바이트 코드를 인터프리팅하는 것보다 훨씬 오래걸리므로 한 번만 실행되는 코드라면 컴파일 하지 않고 인터프리팅하는 것이 유리합니다.

따라서 JIT 컴파일러를 사용하는 JVM들은 내부적으로 해당 메서드가 얼마나 자주 수행되는지 체크하고 일정 정도를 넣을때에만 컴파일을 수행합니다.

 

자바에선 자바 컴파일러가 자바 프로그램 코드를 바이트 코드로 변환한 다음,
실제 바이트 코드를 실행하는 시점에서 자바 가상 머신(JVM, 정확히는 JRE)이 바이트 코드를 JIT 컴파일을 통해 기계어로 변환한다는 특징을 가지고 있습니다.

JDK(Java development Kit)

말 그대로 자바를 통해 개발하기 위한 키트입니다. 

JDK를 설치하면 JVM과 Java API 외에 자바를 개발하는데 필요한 프로그램들이 자동으로 설치됩니다.

참고

 

[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...)

JVM이란 무엇인가 Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되

doozi0316.tistory.com

 

[IT 기술 면접] JVM (자바 가상 머신) 이란?

이번에는 JVM에 대해 정리할 것이다. ▶ JVM 이란? JVM이란 Java Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. (가상 머신이란 프로그램을 실행하기 위해 물리적 머신과 유사한

backendcode.tistory.com

자바의 정석

김영한의 자바 입문

'Language > Java' 카테고리의 다른 글

[Java] 조건문, 반복문  (0) 2023.12.15
[Java] 연산자  (0) 2023.12.14
[Java] Java 변수 선언, 데이터 타입  (0) 2023.12.14
[Java] 자바 프로그램 실행해보기  (0) 2023.12.14
[Java] Java란?  (0) 2023.12.14