JDK, JRE, JVM이란?
JDK, JRE, JVM이란?
JDK (Java Development Kit)
JDK는 말 그대로 자바를 사용해 개발하기 위해 사용되는 키트이다.
다양한 회사에서 출시한 JDK들이 있는데, 몇몇 편의 기능을 제공하거나 적용되는 라이센스가 다른 것 과 같이 각각 조금씩의 차이가 있다.
1. JDK 종류
- Java SE (Standard Edition)
자바 표준 에디션으로 일반적인 PC 환경에서 개발 시 사용 - Java EE (Enterprise Edition)
자바 기업용 에디션으로 대규모 기업 환경에서 개발 시 사용 - Java ME (Micro Edition)
임베디드와 같은 소형 기기를 활용하기 위한 개발 시 사용
2. JDK 구성
위와 같이 JDK는 JRE, JVM 모두를 포함하고 있고, 개발에 필요한 개발 툴들도 제공하고 있다.
- javac: 자바 소스를 바이트 코드(.class)로 컴파일하는 자바 컴파일러
- java: 컴파일된 바이트 코드를 실행하는 자바 인터프리터
- javadoc: 자바 소스를 통해 HTML 형식의 API 문서 생성
- jar: 자바 클래스 파일이 압축된 자바 아카이브 파일(.jar)을 생성
- javap: 컴파일된 바이트 코드를 자바 소스로 변환하는 역어셈블러
⁝
JRE (Java Runtime Environment)
JRE는 JVM과 Java 표준 라이브러리로 구성되어, java 애플리케이션을 동작시킬 때 필요한 모든 요소를 가지고 있는 자바 실행환경 패키지이다.
따라서, 어떠한 플랫폼이나 운영체제도 JRE만 설치되어 있다면 Java 애플리케이션을 실행할 수 있다.
다만, JDK 11 이전에는 JDK와는 개별적으로 JRE를 설치할 수 있었지만, JDK 11 이후에는 따로 설치가 불가능하고 JDK와 함께 설치해야 한다.
JVM (Java Virtual Machine)
JVM은 바이트 코드를 바이너리 코드(기계어)로 변환하여 프로그램을 실행시킨다.
또한 메모리 관리, 가비지 컬렉션(Garbage Collection), 쓰레드(Thread) 관리 등의 기능을 수행한다.
1. JVM의 구성요소
1-1. 클래스 로더
바이트 코드(.class)를 메모리에 로드한다.
1-2. 바이트 코드 검증기
바이트 코드에 초기화되지 않은 변수를 사용하거나, 데이터의 접근 권한을 위반하는 등의 비정상적인 동작이 포함되어 있지 않은지 검사한다.
1-3. JIT (Just In Time) 컴파일러
같은 바이트 코드를 매번 바이너리 코드로 변환하는 인터프리트 방식은 자바 애플리케이션 실행 속도를 느리게 한다.
이러한 단점을 개선시키기 위해 JIT 컴파일러는 변환된 바이너리 코드를 캐싱해놓고, 이후에 사용할 때 캐싱된 바이너리 코드를 사용한다.
참조
This post is licensed under CC BY 4.0 by the author.