본문 바로가기
Computer Sience/Java

[JAVA] 자바, JVM, JDK, JRE

by 제우제우 2024. 10. 8.

JVM (Java Virtual Machine) 

자바 가상 머신으로 자바 바이트 코드 (.class 파일)를 OS에 특화된 코드로 변환(인터프리터 JIT 컴파일러)하여 실행한다.

바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체(특정 밴더가 구현한 JVM)이다. 

JVM 밴더: 오라클, 아마존, Azul, ...

JVM 스팩: https://docs.oracle.com/javase/specs/jvms/se11/html/

특정 플랫폼에 종속적이다.

자바 컴파일 과정

자바 소스 코드 (.java 파일)
자바로 작성한 코드를 컴파일러(Javac)를 사용하여 바이트 코드로 변환


바이트 코드 (.class 파일)
.java에서 바이트 코드로 변환하여 생성된 파일은 OS에 독립적인 바이트 코드 형식을 가지고 있다.
즉, 이 .class 파일은 어떤 운영 체제에서든 동일하다.

 

JVM의 역할

운영 체제별 JVM 구현
각 운영 체제(예: Windows, Linux, macOS)에 맞게 구현된 JVM이 존재한다.
이러한 구현체는 각 OS의 특성에 맞는 최적화를 적용하여 실행된다. 

바이트 코드 실행
JVM이 실행되면, .class 파일의 바이트 코드를 읽어 들이고 이를 OS에 특화된 코드로 변환한다.
이 과정은 인터프리터 방식 또는 JIT(Just-In-Time) 컴파일러를 통해 이루어진다. 

  • 인터프리터: 바이트 코드를 한 줄씩 읽어 실행하는 방식
  • JIT 컴파일러: 자주 사용되는 바이트 코드 조각을 네이티브 머신 코드로 변환하여 실행 성능을 높이는 방식

요약 
우리(개발자)가 작성하는 자바 코드는 어떤 OS에서 작성하든 동일하다.

당연히 바이트 코드로 변환한 .class 파일로 이러한 특성은 플랫폼(OS)에 독립적이다 

JVM은 특정 플랫폼(OS)에 맞게 코드를 변환하여 실행하기 때문에 특정 플랫폼(OS)에 종송적이다.
그래서 JVM만 자신이 사용하는 플랫폼에 맞게 잘 설치하면 자바 코드를 공유하면 동일하게 실행이 가능하다

 

 

자바는 "한 번 작성하면, 어디서나 실행된다"  Write Once Run Anywhere


JRE (Java Runtime Environment)

구성 요소

JVM (Java Virtual Machine)

자바 라이브러리 - 프로퍼티 세팅 및 리소스 파일

 

자바 라이브러리 

자바의 표준 라이브러리인 Java API를 포함하며, 자바 프로그램을 개발할 때 필요한 다양한 클래스와 메소드를 제공한다.

이러한 라이브러리는 입출력, 네트워킹, 데이터 구조, GUI 등 다양한 기능을 지원한다. 


JRE 기능 

JRE는 자바 프로그램을 실행하는 데 필요한 모든 구성 요소를 포함한다. 

개발자가 자바 프로그램을 실행하는데 필요한 환경을 제공한다. 

JRE는 개발자가 자바 프로그램을 작성하지 않고도 프로그램을 실행할 수 있도록 해준다.
즉, JRE만 설치되어 있으면 자바로 작성된 애플리케이션을 실행할 수 있다.

 

JDK와의 차이
개발 관련 도구(예) 컴파일러, 디버거 등)는 포함되어 있지 않는다.  이러한 도구는 JDK에 포함되어 있다. 

JDK (Java Development Kit)는 JRE와 함께 자바 개발 도구를 포함한 패키지로, 자바 소스 코드를 컴파일하고, 디버깅하는 데 필요한 도구들을 제공한다.
JDK는 개발자에게 필요한 모든 기능을 제공하며, JRE는 프로그램 실행에 필요한 환경을 제공합니다.

JDK는 JRE를 포함하고 있으므로, JDK를 설치하면 JRE도 자동으로 설치된다.

JRE가 자바 프로그램을 실행하는 데 필요한 모든 구성 요소를 제공한다.

이 제공에는 컴파일러는 없다. 즉 제공하는것은 JVM을 말한다. 
컴파일러는 존재하지 않기 때문에 
자바 소스 코드(.java)는 JDK(자바 컴파일러 - Javac)를 사용하여 먼저 컴파일되어야 한다. 

 

최근에는 JRE를 따로 제공하지 않고 JDK만 제공한다. 


.JAR 파일 

우리가 개발하면서 자주 만들었던 스프링 프로젝트의 .JAR 파일은 그럼 뭘까?

.JAR 파일은 자바 코드가 컴파일된 .class 파일과 여러 설정 파일(예: MANIFEST.MF) 및 리소스 파일의 집합체이다.

이 파일은 자바 애플리케이션을 실행하는 데 필요한 모든 구성 요소를 포함한다.

 

main 메소드

JAR 파일 내에는 일반적으로 main 메소드가 포함된 클래스가 하나 존재한다. 
이 클래스는 애플리케이션의 진입점으로, 프로그램이 시작될 때 실행됩니다.

MANIFEST.MF 파일에는 Main-Class 속성이 정의되어 있어, JVM이 JAR 파일을 실행할 때 어떤 클래스를 시작해야 하는지를 알려준다. 

 

실행

JAR 파일을 실행할 때는 명령줄에서 java -jar xxxx.jar 명령을 사용하여 애플리케이션 전체를 실행할 수 있다.
이때 JVM은 지정된 main 메소드를 호출하여 애플리케이션이 시작된다.

JAR 파일을 실행하면, 그 안에 포함된 모든 클래스와 리소스가 사용되어 애플리케이션이 작동하게 된다.

 

 

 


JDK (Java Development Kit)

JRE + 개발에 필요할 툴(컴파일러)

소스 코드를 작성할 때 사용하는 자바 언어는 플랫폼에 독립적 

오라클은 자바 11부터는 JDK만 제공하며 JRE를 따로 제공하지 않는다. 

 

JDK는 각 플랫폼에 종속적인 JVM이 JRE 안에 포함되어 있으니까 JDK는 플랫폼(OS) 마다 따로 있다.

Windows용 JDK, Linux용 JDK, macOS용 JDK가 각각 따로 존재


JVM 언어

JVM 기반으로 동작하는 프로그래밍 언어

클로저, 그루비, JRuby, Jython, Kotlin, Scala, ...

 

이 언어들 또한 JVM 위에서 실행되고, 자바 바이트 코드로 변환되어 실행된다. 

모두 JVM 위에서 동작하며, 자바의 방대한 라이브러리와 생태계를 활용할 수 있다.
즉 JVM은 자바뿐만 아니라 다양한 언어들을 수용할 수 있는 강력한 플랫폼이다. 


참고 자료 

인프런 백기선님 더 자바, 코드를 조작하는 다양한 방법

 

더 자바, 코드를 조작하는 다양한 방법 강의 | 백기선 - 인프런

백기선 | 여러분이 사용하고 있는 많은 자바 라이브러리와 프레임워크가 '어떻게' 이런 기능을 제공할 지 궁금한적 있으신가요? 이번 강좌를 통해 자바가 제공하는 다양한 코드 또는 객체를 조

www.inflearn.com

 

 

'Computer Sience > Java' 카테고리의 다른 글

[JAVA] 바이트 코드 조작  (2) 2024.10.10
[JAVA] JVM 전체 구조 정리  (1) 2024.10.08
[JAVA8] 애노테이션의 변화  (0) 2024.10.07
[JAVA] Annotation  (0) 2024.10.07
[JAVA8] CompletableFuture  (0) 2024.10.04