자바가 어떻게 동작하는지 알기 위해서는 일단 Java 플랫폼의 핵심 구성 요소에 대해서 알 필요가 있습니다.
다음은 자바의 핵심 구성요소에 대한 간단한 설명입니다.
- JDK (Java Development Kit)
JDK는 Java 애플리케이션을 개발하기 위한 소프트웨어 개발 키트입니다.- Java 컴파일러(javac)를 포함하여 소스 코드를 바이트코드로 변환합니다.
- 디버거, 아카이브 도구(jar) 등 개발에 필요한 다양한 도구를 제공합니다.
- JRE를 포함하고 있어 개발한 애플리케이션을 실행할 수 있습니다.
- Java API 문서와 소스 코드도 포함되어 있습니다.
- JRE (Java Runtime Environment)
JRE는 Java 애플리케이션을 실행하기 위한 환경입니다.
- JVM과 Java 클래스 라이브러리를 포함합니다.
- 개발된 Java 프로그램을 실행하는 데 필요한 최소한의 환경을 제공합니다.
- JDK와 달리 컴파일러 등의 개발 도구는 포함하지 않습니다.
- JVM (Java Virtual Machine)
JVM은 Java 바이트코드를 실행하는 가상 머신입니다.- Java의 "Write Once, Run Anywhere" 원칙을 구현합니다.
- 바이트코드를 해석하고 실행합니다.
- 메모리 관리, 가비지 컬렉션 등을 담당합니다.
- 플랫폼(OS) 종속적이지만, Java 코드의 플랫폼 독립성을 보장합니다.
- ClassLoader
ClassLoader는 JVM의 일부로, Java 클래스와 인터페이스를 동적으로 로드하는 역할을 합니다.- 클래스의 바이트코드를 읽어 JVM의 메모리에 적재합니다.
- 안정적인 실행환경을 위해 로드된 클래스의 무결성을 검증합니다.
이를 기반으로 자바의 실행과정을 알아봅시다.
자바의 실행 과정은 소스 코드를 작성하여 컴파일하고, 그 컴파일된 바이트코드를 실행하는 과정으로 이루어집니다. 자바는 플랫폼 독립적인 언어로, JVM(Java Virtual Machine)을 통해 다양한 운영체제에서 동일한 코드를 실행할 수 있는 특징을 가지고 있습니다. 자바의 실행 과정을 단계별로 살펴보면 다음과 같습니다.
자바 실행 과정 요약
- 소스 코드 작성:
.java파일을 작성. - 컴파일:
javac컴파일러를 사용해 바이트코드(.class파일)로 변환. - 클래스 로딩: JVM의 클래스 로더가
.class파일을 메모리로 로드. - 바이트코드 실행: JVM이 인터프리터와 JIT 컴파일러를 통해 바이트코드를 실행.
- 런타임 환경 관리: JVM이 메모리 및 쓰레드 관리를 담당, 더 이상 참조되지 않는 객체를 메모리에서 해제(Garbage Collector).
- 프로그램 종료: 실행이 끝나면 JVM이 종료하고 메모리 자원을 반환.
1. 소스 코드 작성
- 개발자는 자바 프로그래밍 언어로 소스 코드를 작성합니다. 소스 파일은
.java확장자를 가집니다.public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } - 예를 들어, 아래는 간단한 자바 프로그램입니다:
2. 컴파일 (Compile)
- 작성된 자바 소스 코드는 자바 컴파일러(
javac)를 통해 바이트코드(bytecode)로 컴파일됩니다. - 컴파일된 바이트코드는
.class확장자를 가지며, 이는 JVM에서 실행될 준비가 된 파일입니다. javac HelloWorld.java- 이 명령을 실행하면
HelloWorld.class파일이 생성됩니다. 이.class파일은 특정 운영체제나 하드웨어에 종속되지 않는 바이트코드로, 다양한 플랫폼에서 실행될 수 있습니다.
3. 클래스 로딩 (Class Loading)
- 바이트코드 파일이 준비되면, 자바 런타임 환경(JRE: Java Runtime Environment) 내의 클래스 로더(Class Loader)가 이 바이트코드 파일을 메모리로 로드합니다.
- 클래스 로더는 클래스 파일을 찾아서 JVM의 메모리에 적재하는 역할을 하며, 필요한 경우 의존하는 다른 클래스들도 함께 로드합니다.
4. 바이트코드 실행 (Bytecode Execution)
- 클래스 로더에 의해 메모리로 로드된 바이트코드는 JVM에 의해 실행됩니다. 자바는 이 단계에서 플랫폼 독립성을 달성합니다.
5. 런타임 환경 (Runtime Environment)
- JVM은 메모리 관리, 쓰레드 관리 등 프로그램이 실행되는 동안 다양한 작업을 처리합니다. JVM은 자바 프로그램이 실행되는 동안 아래의 중요한 영역들을 관리합니다.
- JVM은 프로그램 실행 중 사용하지 않게 된 객체들을 자동으로 메모리에서 해제하는 가비지 컬렉터(Garbage Collector)를 사용합니다.
6. 프로그램 종료
- 자바 애플리케이션의 실행이 끝나면, JVM은 모든 메모리를 해제하고 프로그램을 종료합니다.
'프로그래밍 언어 > java' 카테고리의 다른 글
| Java는 왜 컴파일러와 인터프리터를 같이 사용하는가? (0) | 2024.11.13 |
|---|---|
| 입출력 객체는 왜 close 해줘야 하는가? (0) | 2024.11.10 |
| Java 입출력 (0) | 2024.09.12 |
| 데이터를 미리 로드하고 Rserve 실행 (0) | 2024.08.20 |