Java의 가장 큰 특징 중 하나는 어느 플랫폼, 어느 하드웨어, 어느 운영체제에 상관없이 컴파일된 코드(바이트코드)가 플랫폼 독립적이라는 점입니다.
이것이 가능한 것은 컴파일된 코드(바이트 코드)를 실행시켜주는 가상 컴퓨터 JVM(JAVA Virtual Machine) 덕분입니다.
1. 자바 실행 과정
JVM 동작 원리를 이해하기 위해선 먼저 Java 코드의 동작 원리를 파악해야 합니다.
- Java 코드 동작 원리
- 작성한 자바 소스 코드 파일(.java) 을 자바 컴파일러(javac)를 통해 바이트 코드(.class)로 컴파일합니다.
- 컴파일된 바이트 코드를 JVM의 클래스 로더에게 전달합니다.
- 클래스 로더는 동적 로딩을 통해 필요한 클래스들을 JVM의 메모리인 런타임 데이터 영역에 로딩합니다.
- 실행 엔진은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와 실행합니다.
2. 자바 가상 머신 (JVM)
JVM은 가상 컴퓨팅 머신이자 프로그램으로 2가지 기본 기능을 수행합니다.
- 자바 프로그램이 어느 기기, 어느 운영체제 상에서도 실행될 수 있게 만듭니다.
- 자바 프로그램의 메모리를 효율적으로 관리 & 최적화합니다.
3. 자바 런타임 환경 (Java Runtime Environment)
JRE는 자바 클래스 라이브러리(Java Class Library)와 자바 가상 머신, 그리고 자바 클래스 로더(Java Class Loader)를 포함합니다.
JRE는 그 자체로 특별한 기능을 수행하기 보다 JVM이 원활히 작동할 수 있는 환경을 조정하는 역할을 수행합니다.
4. 자바 개발 키트 (Java Development Kit)
자바 설치 시 일반적으로 설치되는 것이 JDK로, JDK 설치 시 JRE 또한 자동으로 설치됩니다.
JDK는 '자바 컴파일러(javac, java compiler)'를 포함합니다. 컴파일러는 개발자가 작성한 자바 문법을 컴퓨터가 이해할 수 있도록 해석합니다.
위의 과정을 정리하면 다음 그림과 같습니다.
Q. JVM이 운영체제에 상관없이 실행될 수 있는 이유에 대해 설명해주세요.
자바 프로그램은 컴파일러에 의해 자바 바이트 코드(.class)로 변환됩니다. JVM은 해당 자바 바이트 코드를 이해하고 플랫폼에 맞게 해석하여 실행할 수 있어, 특정 운영체제에 종속되지 않고 어느 플랫폼에서든 동일한 방식으로 작동할 수 있습니다.
JVM은 자바 프로그램이 특정 플랫폼에 종속되지 않도록 중간 계층 역할을 수행하며, 이를 통해 '한 번 작성하고, 어디서나 실행'이라는 자바의 핵심 철학을 달성하였습니다.
참고 출처:
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] OOP의 4가지 특징 (0) | 2024.01.23 |
---|---|
[Java] 자바 접근 제어자의 유형과 특징 (0) | 2024.01.22 |
[Java] String vs. StringBuilder vs. StringBuffer 차이 (0) | 2024.01.18 |
[Java] 자바의 컴파일 과정 & JVM 메모리 구조 (0) | 2024.01.17 |
[Java] Garbage Collector란? (1) | 2023.11.06 |