Skip to Content
Suffering builds character
아카이브10.Java부록JDK, JRE, JVM

JDK, JRE, JVM

다음은 JDK, JRE, JVM에 대한 관계이자 구조를 나타내며,
개념적으로 JDK는 JRE를 포함하고 있고, JRE는 JVM을 포함하고 있음

jvm,jre,jdk

1. JDK, Java Development Kit

이름 그대로, 자바 개발 도구(Toolkit)
자바 언어 기반으로 작성된 프로그램 개발에 필요한 자바 컴파일러(javac.exe), 자바 인터프리터(java.exe), Debugger, jar, javadoc, JRE 등을 포함하는 개발 도구 모음을 말함

1-1. JDK의 구성 요소

JDK의 구성 요소는 다음과 같음

자바 컴파일러(javac.exe)
작성한 자바 코드(.java)를 클래스 파일 or 목적 파일(.class, 바이트 코드)로 변환시켜주는 역할

자바 인터프리터(java.exe)
JVM이 클래스 파일을 기계어로 변환, 프로그램을 실행시켜주는 역할

Java SE 라이브러리(java.~~로 시작하는 패키지)
자바 코드 작성을 위해 필요한 내장 라이브러리 ex) 날짜, 수식, 입출력 등을 사용할 수 있도록 Java 언어 자체적으로 제공하는 내장 API ex. java.lang, java.util, java.io 등

JRE(Java Runtime Environment)
자바 실행 환경, 자바로 작성된 코드를 실행하기 위한 환경, JDK 설치 시 포함되어 있음

JVM(Java Virtual Machine)
자바 가상 머신, 자바 실행 환경인 JRE를 통해 가동됨 자바 컴파일러(javac)를 통해 컴파일된 바이트 코드(.class 파일)를 기계어로 변환 후 실행시켜주는 가상의 기계(VM)

2. JRE, Java Runtime Environment

JRE란 자바 실행 환경을 말함
작성한 자바 코드가 프로그램의 형태로 실행되는 환경을 의미

자바 컴파일러(javac)를 통해 변환된 바이트 코드(.class 파일)를 전달받는 클래스 로더(Class Loader)가 위치한 영역

💡
Tip

클래스 로더(Class Loader)
전달받은 바이트 코드(.class)가 실행될 때 필요한 클래스들을 메모리에 로딩, 바이트 코드를 JVM이 이해할 수 있도록 변환하는 역할 수행

3. JVM, Java Virtual Machine

자바 언어의 기본적인 지향점은, Write Once Run Anywhere
→ 자바 언어로 코드를 한 번만 작성하면 어떤 운영체제 플랫폼(Windows, Linux, Mac 등)에서든지 실행(호환)할 수 있다는 것

반대로 생각해보면,
자바 언어 이전의 다른 언어들은 하나의 코드를 각 OS 플랫폼에 맞게 소스 코드를 각각 별도로 작성해야 했었다는 의미를 내포하고 있음

💡
Tip

C언어의 지향점
One Source, Multi Object, Use Anywhere
→ 하나의 소스 코드로 각 기기에 호환되는 여러 개의 목적 파일을 만들어 어떤 운영체제에서든지 실행 할 수 있음

하지만 자바에서는 JVM이라는 별도의 프로세스 형태로 동작하는 가상 머신을 통해 개발자는 각 OS 플랫폼에 맞는 별도의 목적 파일을 생성할 필요 없이, Java에서 제공하는 각 운영체제 전용의 JRE(JVM)만 설치하면 됨

결과적으로 이를 통해 개발자가 작성한 소스 코드가 특정 운영체제에 의존, 종속되지 않게 됨
→ 소스 코드와 운영체제 간의 결합도(Coupling)가 낮아짐(Loosely Coupled)

💡
Tip

GPT의 JVM, JRE, JDK 비유

Last updated on