728x90
반응형
0. 서론
1. 자바 프로그램의 구성요소와 특징
JDK의 구성을 보자.
JDK > JRE > JVM 의 포함관계로 구성되어있다.
JDK (Java Development Kit)
자바 소스 코드를 컴파일하여 실행 가능한 프로그램을 생성하는 개발 도구 세트
-포함 항목
컴파일러 (javac), 디버거, 개발 도구 (java, javac, javadoc, jar)
JDK는 자바 개발자가 소스 코드를 작성하고, 이를 컴파일하여 실행 가능한 파일로 만드는 데 필요한
모든 도구를 포함한다.
JRE가 제공하는 것 외에 추가적으로 개발 도구들을 제공한다.
JRE (Java Runtime Environment)
자바 프로그램을 실행하는 데 필요한 환경
-포함 항목
: JVM, 라이브러리, 컴파일된 클래스 파일, 인터프리터, JIT 컴파일러
JRE는 자바 프로그램을 실행하는 데 필요한 환경을 제공한다.
JDK가 디버깅하고 컴파일 한 .class파일을 기계어로 번역하는 중간 단계로, 프로그램이 원활하게 실행될 수 있게함
JVM (Java Virtual Machine) : 자바 가상 머신 (JVM)
자바 프로그램의 바이트 코드를 기계어로 변환하여 실행하는 엔진
이를 통해 자바 프로그램은 플랫폼에 독립적으로 실행될 수 있다.
2. JVM 이 하는 일
JVM은 자바 프로그램의 바이트 코드를 기계어로 변환하여 실제로 프로그램을 실행하는 엔진이다.
JVM은 JRE(Java Runtime Environment)의 일부로서,
JRE가 제공하는 모든 라이브러리와 클래스 파일을 활용하여 프로그램을 실행한다.
■ 작동 원리
바이트 코드 로드: 자바 컴파일러(javac)에 의해 생성된 바이트 코드는 .class 파일에 저장된다.
클래스 로더: JVM의 클래스 로더가 이 .class 파일을 메모리에 로드한다.
바이트 코드 검증: JVM은 로드된 바이트 코드가 유효한지 검증하여 보안성과 안정성을 확인한다.
실행 엔진: 검증된 바이트 코드는 JVM의 실행 엔진에 의해 실행된다. 이 과정에서 인터프리터와 JIT 컴파일러가 사용된다.
3. JVM - JRE와의 관계
-JRE는 JVM을 포함한 실행 환경으로, JVM이 프로그램을 실행하는 데 필요한 모든 라이브러리와 리소스를 제공한다.
-JVM은 JRE가 제공하는 클래스 파일과 라이브러리를 활용하여 자바 프로그램을 실행한다.
즉, JRE는 JVM이 프로그램을 실행할 수 있는 환경을 제공하며,
JVM은 JRE 내에서 바이트 코드를 실제로 실행하는 역할을 담당한다.
4. 자바 프로그램 구조로 인한 장점
- 플랫폼 독립성
JVM은 다양한 운영 체제에서 동일한 바이트 코드를 실행할 수 있다. 이는 자바 프로그램이 플랫폼에 독립적으로 동작할 수 있도록 한다. 실제로 자바 프로그램은 운영 체제에 관계없이 동일한 바이트 코드(.class 파일)를 사용하며, JVM이 해당 바이트 코드를 각 운영 체제에 맞게 실행한다.
=> 이식성 증가 ( 한 번 작성하면 어디서나 실행될 수 있음) - 메모리 관리
JVM은 가비지 컬렉션을 통해 자동으로 메모리를 관리한다. 이를 통해 메모리 누수를 방지하고 효율적인 메모리 사용을 가능하게 한다.
=> 생산성 증가 (개발자가 메모리 관리에 신경 쓰지 않아도 되도록 해주어, 개발 생산성을 높인다.) - 보안성
JVM은 자바 프로그램의 실행 시 보안 검사를 수행하여 안전한 실행 환경을 제공한다.
=> 특히 네트워크를 통한 애플리케이션 배포 시 중요한 장점이 된다. 번외로 자바는 디지털 서명, 권한 부여, 보안 관리자 등 다양한 보안 기능을 제공한다.
자바가 제공하는 기능과 별도로 이러한 체계적인 컴파일과 프로그램 실행 구조가 있기에
자바의 보안성과 편리함이 나오는 것이 아닐까 싶다.
참고하면 좋을 글 ↓
반응형
'Programming Languages > Java' 카테고리의 다른 글
[JAVA] 자바의 컴포넌트 - 자바 빈(Bean) 조건과 필요성 (0) | 2024.07.30 |
---|---|
[JAVA] 절차지향 언어와 가장 큰 차이점 (0) | 2024.07.29 |
[JAVA] 자바 기본형 타입 종류와 크기 (0) | 2024.06.27 |
[JAVA] BufferedReader, BufferedWriter 사용해야 하는 이유 (0) | 2024.06.20 |
[Java] 자바 상속 구현 / extends, implements의 차이? / 개념과 사용법 정리 (1) | 2024.02.08 |