JVM (Java Virtual Machine)
- 자바 프로그램을 실행하는 프로그램
- 자바 바이트 코드를 어떻게 실행할 지에 대한 표준을 특정 벤더가 구현한 구현체
- 클래스 파일에 작성된 자바 바이트 코드를 인터프리터 또는 JIT 컴파일러를 통해 OS에 특화된 코드로 변환하여 실행
- 자바 프로그램을 모든 플랫폼에서 제약 없이 동작 시킬 수 있음
- JVM은 특정 플랫폼에 종속적임
모든 플랫폼에서 제약없이 동작한다고 했는데 플랫폼에 종속적이라는 말은 무엇일까?
자바 프로그램 자체는 플랫폼에 종속되지 않지만, JVM은 플랫폼에 맞게 설치해줘야 한다.
처음엔 조삼모사가 아닐까라고 생각했지만 다양한 환경에 코드를 배포해야 하는 상황에 개발자가 자신이 작성한 코드를 모든 환경에 맞춰 컴파일 해야한다면 상당히 번거로울 것이다.
하지만 각 환경에 맞는 JVM이 구성되어 있다면 개발자는 특정 환경이나 플랫폼에 구애받지 않고 자신의 코드를 작성하는데만 집중할 수 있을 것이다.
JRE (Java Runtime Environment)
- JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 셋팅이나 리소스 파일
- 자바로 작성된 애플리케이션을 실행하기 위해 라이브러리(jar), JVM 및 기타 구성 요소를 제공하는 소프트웨어 패키지
- 자바 애플리케이션을 실행하기 위한 최소 요구 사항
- 아래와 같은 파일들이 포함 (일부만 표현)
├── ASSEMBLY_EXCEPTION
├── LICENSE
├── THIRD_PARTY_README
├── bin
│ ├── java
│ ├── jjs
│ ├── keytool
~~~~~~~~~~~~~~
~~~~~~~~~~~~~~
│ └── unpack200.dSYM
└── lib
├── applet
├── calendars.properties
├── charsets.jar
├── resources.jar
├── rt.jar
~~~~~~~~~~~~~~
~~~~~~~~~~~~~~
└── tzdb.dat
JDK (Java Developer Kit)
- JRE + 개발 툴
- 개발자가 자바로 개발하는데 사용되는 SDK
- 소스 코드를 작성하는 시점부터 자바 언어는 플랫폼에 독립적
- 자바 개발 시 필요한 라이브러리들과 javac, javadoc 등의 개발도구를 포함
- JDK 주요 도구
- javac (Java Compiler) : 자바 소스 코드(.java)를 바이트 코드(.class)로 변환하는 컴파일러
- javap (Java Printer) : 클래스 파일 디스어셈블러, 클래스 파일의 바이트 코드를 역어셈블하여 소스 코드에 가까운 형태로 출력하는 도구
- java (Java Virtual Machine) : 컴파일된 자바 프로그램을 실행
- jar (Java Archive) : 자바 애플리케이션 및 라이브러리를 하나의 아카이브 파일(.jar)로 만들어주는 도구
- javadoc (Java Documentation Generator) : 소스 코드의 주석을 통해 자동으로 API 문서를 생성하는 문서 생성기
- jstat (Java Virtual Machine Statistics Monitoring Tool) : JVM의 성능 통계를 수집하는 도구로, 힙 메모리, 클래스 로딩, 가비지 컬렉션 등의 정보를 모니터링
- jvisualvm (Java VisualVM) : 시각적으로 자바 애플리케이션을 모니터링하고 프로파일링하는 툴, 성능 문제 해결 및 메모리 프로파일링에 유용
- jConsole (Java Monitoring and Management Console) : JVM의 성능 모니터링 및 관리를 위한 GUI 도구
- jhat (Java Heap Analysis Tool) : 자바 힙 분석 도구
'Java' 카테고리의 다른 글
JVM 내부 구조 (2) - 런타임 데이터 영역 (1) | 2023.11.29 |
---|---|
JVM 내부 구조 (1) - 클래스 로더 (1) | 2023.11.27 |
Java 프로그램의 실행 과정 (0) | 2023.11.27 |