JDK
JDK(Java Development Kit)는 java 애플리케이션을 개발 하기 위한 도구 모음이다. JRE와 개발도구로 이루어져있다.
주요 구성 요소
- JRE (Java Runtime Environment)
- javac ( java 컴파일러) : .java 파일을 바이트코드(.class)로 변환하는 컴파일러
- jar (java archve) : 여러개의 .class 파일과 리소스 파일을 압축하여 .jar패키지로 묶음
- java (java 실행기) : .class 파일을 실행하는 도구 (JVM을 실행시키는 도구)
- jdb (디버거) : 브레이크포인트 설정, 스택 추적, 변수 값 확인 가능
- javadoc : API 문서 자동생성 도구, java 소스 코드에 있는 주석을 HTML 문서로 변환
※ 바이트 코드 (Bytecode)
Java 소스코드 (.java)를 컴파일러(javac)가 변환하여 생성하는 중간코드(.class) 이다.
바이트 코드는 JVM이 이해할 수 있는 명령어들로 이루어져 있으며 운영체제와 무관하게 실행할 수 있다.
한 번 컴파일 하면 Windows, Linux, Mac등 어디서든 실행 가능한 운영체제 독립적 특성을 가지고 있다.
JIT 컴파일러를 통해 네이티브 코드로 변환 후 실행 속도를 향상 시킨다.
※ 네이티브 코드
네이티브 코드는 특정 운영체제와 cpu에서 직접 실행할 수 있는 기계어이다.
즉, 컴파일러가 소스 코드를 변환하여 cpu가 직접 실행할 수 있도록 만든 코드이다.
JRE
JRE(Java Runtime Environment)는 java 실행을 위한 환경으로 JVM(Java Virtual Machine)과 Java 클래스 라이브러리로 이루어진다.
JVM
바이트 코드를 실행하는 역할을 담당한다.
- ClassLoader : .class 파일을 JVM에 로드
- Runtime Data Area : Java 실행 중 필요한 메모리 영역 (Heap, stack 등)
- Execution Engine : 바이트 코드를 실행하는 엔진
- Interpreter : 바이트 코드를 한 줄씩 해석하며 실행
- JLT 컴파일러 : 자주 실행되는 코드를 네이티브 코드로 변환하여 cpu가 직접 실행
- Garbage Collector : 불필요한 메모리를 자동으로 해제
JAVA 클래스 라이브러리
Java의 기본 라이브러리 제공
- 코어 라이브러리 : java의 기본 기능 (java.lang , java.util)
- I/O 라이브러리 : 파일 입출력, 스트림 (java.io , java.nio)
- 네트워크 라이브러리 : 소켓,HTTP 통신 (java.net)
- 멀티스레딩 라이브러리 : 병렬처리 , 스레드 관리 (java.util.concurrent)
- GUI 라이브러리 : 그래픽 인터페이스 (java.swing , java.awt)
정리
JDK = JRE + 개발도구 (javac, javadoc, jdb...)
JRE = JVM + 라이브러리 (java.lang , java.io ....)
JVM = 바이트 코드 실행

