[Java] - JDK, JRE, JVM

Woomin Wang ·2025년 3월 11일

[Java]

목록 보기
1/10
post-thumbnail

JDK는 무엇일까?


JDK는 자바 개발키트(Java Development Kit)의 약자로, 개발자들이 자바로 개발하는데 사용되는 SDK키트이다.

SDK란?

소프트웨어 개발 키트로, 프로그램을 만들 때 필요한 도구와 자원을 모아 놓은 것이다. 여기에는 디버거, 컴파일러, 라이브러리뿐만 아니라, 문서, 튜토리얼, API 등이 포함되어 개발자가 쉽게 애플리케이션을 만들고 실행할 수 있도록 도와준다.

JDK 안에는 개발 시 필요한 라이브러리들과 javac, jar, jdb 등의 개발 도구들이 포함되어 있고, 개발을 하려면 자바 프로그램을 실행도 시켜줘야 하기 때문에 JRE(Java Runtime Enviroment)도 포함되어 있다.

JRE의 구성요소는 무엇일까?


JRE(Java Runtime Enviroment)는 자바 애플리케이션을 실행하기 위한 환경으로, JVM, 기본 라이브러리, 구성 파일로 구성된다. JRE는 자바 프로그램을 실행하는 데 필요한 요소만 포함하며, 개발 도구(javac, jdb)는 포함되지 않는다. 즉, JDK에는 개발 도구와 JRE가 포함되며, JRE 안에는 JVM이 포함된 구조이다.

기본 라이브러리는 프로그램 실행에 필요한 기능을 제공하고. 구성 파일은 실행 환경을 설정하는 역할을 한다.

JVM은 무엇이고 왜 사용할까?


가상머신이란?

가상머신은 물리적인 하드웨어와 독립적으로 프로그램을 실행할 수 있는 소프트웨어 환경을 제공한다. 하드웨어에 의존하지 않으므로, 다양한 운영체제에서 동일한 프로그램을 실행할 수 있다.

JVM(Java Virtual Machine)은?

자바 프로그램을 실행하기 위한 가상머신인 JVM은 자바 바이트 코드를 해석하고 실행하는 역할을 하며, 이를 통해 다양한 OS에서 실행될 수 있다. 이 덕분에 개발자는 소스 코드를 작성할 때 운영체제에 의존하지 않고 프로그램을 개발할 수 있다. 다만, JVM 자체는 운영체제에 종속적이며, 각 운영체제에 맞는 JVM이 필요하다.

1. 클래스 로더(Class Loader)

클래스 로더는 JVM 내로 클래스 파일(.class)을 동적으로 로드하고, Runtime Data Area에 메모리를 할당하여 실행 가능한 상태로 만든다. 프로그램 실행 시 필요한 클래스만 동적으로 적재하여 메모리 사용을 최적화한다.

2.런타임 데이터 영역(Runtime Data Area)

JVM이 실행하는 동안 데이터를 저장하는 메모리 공간이다.

  • 힙(Heap): 객체 저장

  • 스택(Stack): 메서드 호출, 로컬 변수 저장

  • 메소드 영역(Method Area): 클래스 관련 데이터, 정적 변수, 메서드 코드, 상수 저장

3. 실행 엔진(Execution Engine)

실행 엔진은 자바 바이트코드를 실제 하드웨어에서 실행 가능한 코드로 변환한다.

  • 인터프리터(Interpreter): 바이트코드를 명령어를 하나씩 읽어서 해석하고 즉시 실행한다. JVM안에서 바이트코드는 기본적으로 인터프리터 방식으로 동작한다.

  • JIT 컴파일러(Just-In-Time): 자주 실행되는 바이트코드네이티브 코드로 변환하여 캐싱하고, 이후에는 네이티브 코드를 직접 실행하여 성능을 향상시킨다.

  • Garbage Collector: 메모리 관리를 자동으로 처리하여, Heap 영역에서 더 이상 사용되지 않는 객체를 정리한다.

profile
Backend Developer

0개의 댓글