본문 바로가기
Java , Spring/Java

[Java] JVM , Java compiler, Java 코드 실행과정 JDK,JRE,JVM

by 방배킹 2024. 1. 9.

JVM이란?

Java Virtual Machine 자바 가상 기계이다.

Java는 운영체제에 종속적이지 않고, 작성된 Java 코드가 JVM에서 OS가 해석할수있는 bytecode로 변환해준다.

( OS에 종속적이지 않다 - 맥에서 작성된 Java 코드는 윈도우에서 돌아간다)

실행과정

Java 코드 (Test.java)는 먼저 JVM이 인식할수있는 Test.class 파일(바이트코드)로 변환해야한다.

자바 컴파일러가 Test.java 파일을 Test.class (바이트코드)로 변환해준다.

 

이후 JVM의 Class Loader가 .class 파일을 불러와서 Java의 메모리에 올려놓으면

JVM의 실행엔진에서 실행한다.

 

(자바 컴파일러 - JDK를 설치하면 bin 파일에 존재하는 javac.exe 파일)

 

 

 

즉, Test.java 파일을 Java compiler가 Test.class 파일(바이트코드)로 변환해주고

클래스 로더가 바이트코드를 런타임데이터 영역에 로드시키고

로딩된 바이트코드가 실행엔진에 의해 실행된다.


(Test.class를 JVM이 CPU가 이해할수 있는 기계어로 변환해준다)

 

 

JIT 컴파일러

JIT(Just In Time) 컴파일러란 프로그램을 실제로 실행하는 시점에 기계어로 번역하는 컴파일러다

인터프리터 방식의 단점을 보완하기 위해 도입되었으며

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

 

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

 

JDK와 JRE

JDK는 Java Development Kit (자바 개발 키트)이다. Java용 SDK

JDK는 JRE를 포함하고 있다. (컴파일러 등등 포함)

 

JRE는 Java Runtime Environment (자바 런타임 환경)이다.

JVM + 자바 클래스 라이브러리 등으로 구성되어있다.

컴파일된 Java를 실행하는데 필요한 패키지

 

즉, JDK = JRE(JVM + ....등등) ,JRE = JVM + ...등등

 

 

댓글