반응형
자바의 컴파일 과정
1. 소스코드 작성
개발자는 Java언어로 작성된 소스파일(.java)을 생성합니다.
이 파일은 사람이 읽을 수 있는 형태의 고급 언어로 작성된 코드입니다.
2. 컴파일 단계
javac 명령어(Java Compiler)를 사용하여 소스 파일(.java)을 컴파일하면,
JVM(Java Virtual Machine)이 이해할 수 있는 바이트코드 형태의 파일(.class)이 생성됩니다.
* 이 바이트코드는 플랫폼에 독립적이며, JVM에서 실행될 준비가 된 중간 형태의 코드입니다.
3. 클래스 로딩(Class Loading)
JVM의 Class Loader가 생성된 .class 파일을 JVM 메모리로 로드합니다.
* 로드된 클래스는 실행에 필요한 메서드와 변수 등의 메타데이터를 포함하고 있습니다.
4. 바이트코드 검증(Bytecode Verification)
JVM은 로드된 바이트코드가 유효한지, 그리고 보안 및 규칙을 준수하는지 검증합니다.
* 이를 통해 실행 시 발생할 수 있는 오류를 사전에 방지합니다.
5. 실행 단계(Execution)
JVM의 실행 엔진이 바이트코드를 운영체제에 맞는 기계어로 변환합니다.
* 이 변환은 인터프리터 또는 JIT 컴파일러(Just-In-Time Compiler)를 통해 이루어지며, 변환된 기계어는 CPU에서 실행됩니다.
6. 프로그램 실행
기계어로 변환된 코드가 실제 운영체제와 하드웨어에서 실행되며 프로그램이 동작합니다.
Java는 플랫폼 독립성을 유지하기 위해 .java 소스코드를 바이트 코드로 변환하며,
이 바이트코드를 각 운영체제에 맞는 기계어로 실행하는 과정을 거칩니다.
따라서 "한 번 작성하면 어디서는 실행할 수 있는(Write Once, Run Anywhere)" 특징을 갖습니다.
이 과정에서 JVM은 컴파일된 코드를 효율적으로 실행할 수 있도록 중요한 역할을 담당합니다.
Class Loader란?
JVM에서 동작하는 컴포넌트로,
컴파일된 바이트코드(.class 파일)를 JVM 메모리로 로드하고 실행할 준비를 하는 역할
Java 애플리케이션이 실행되기 위해 .class 파일은 반드시 Class Loader를 통해 메모리에 로드되어야함
Class Loader의 주요 역할?
1. 클래스 로드(Loading)
.class 파일을 로드하여 JVM 메모리에 배치
2. 클래스 링크(Linking)
로드된 클래스가 JVM에서 실행될 수 있도록 메타데이터를 검증하고 준비
3. 클래스 초기화(Initialization)
클래스의 정적 필드와 정적 초기화 블록을 초기화
Class Loader의 종류?
Bootstrap Class Loader
Java의 가장 기본적인 Class Loader.
JDK에 포함된 Java 표준 클래스(java.lang, java.util 등)를 로드.
Extension Class Loader
JVM 확장 라이브러리를 로드.
JDK의 jre/lib/ext 디렉토리에 있는 클래스들을 로드.
Application Class Loader
사용자가 작성한 애플리케이션 클래스와 클래스패스(classpath)에 포함된 클래스를 로드.
일반적으로 우리가 작성한 .class 파일이나 외부 라이브러리(JAR 파일)를 로드.
반응형
'Java' 카테고리의 다른 글
PostgreSQL, Java | Java Map 객체를 저장할 때 발생하는 문제와 해결방법 (0) | 2024.12.20 |
---|---|
Java | ExecutorService와 Future를 활용한 병렬 처리 이해 (0) | 2024.12.19 |
Java | JIT 컴파일러에 대해 (0) | 2024.12.18 |
Java | HashSet이란? HashSet을 사용하기 좋은 상황(CT) (1) | 2024.12.09 |
Java | 내장 메서드를 활용한 진법 변환 정리 (0) | 2024.12.09 |