728x90
반응형
728x90
1. 소스 코드 작성
- 자바 코드로 이루어진. java 파일을 작성
- 인간이 읽을 수 있는 형태
2. 컴파일
- javac 컴파일러를 통해 자바 코드를 바이트 코드로 변환
- 컴파일 과정에서 문법 오류 검사
- JVM이 이해 가능한. class파일 생성 → 플랫폼에 독립적
3. 클래스 로딩
- ClassLoader가 JVM의 메모리 영역에 로드(Runtime Data Area) → Loading, Linking, Initialization 단계로 구성
- Loading: 클래스 파일을 읽고 메모리에 적재
- Linking: 로드된 클래스 검증 하고 준비 → Verify, Prepare, Resolve 단계로 구성
- Verify: 검증 단계, 클래스가 자바 언어 명세와 JVM 명세에 맞는지 검사
- Prepare: 준비 단계, 클래스에 필요한 메모리를 할당 및 static 필드 초기화
- Resolve: 심볼릭 참조를 직접 참조로 변환
- Initialization: static 변수에 값을 할당하고 static 블록 실행
* 심볼릭 참조: 자바 클래스 파일 내에서 다른 클래스나 메서드에 대한 참조를 의미
4. 바이트코드 실행
- Excution Engine이 클래스 로더에 의해 로드된 바이트코드를 해석하여 실행
- Interpreter와 JIT(Just-In-Time) Compiler 사용
- Interpreter: 바이트코드를 한 줄씩 해석하고 실행하는 인터프리터
- JIT Compiler: 자주 사용되는 메서드의 바이트코드를 네이티브 코드로 컴파일하여 성능 향상 → 네이티브 코드는 인터프리터를 거치지 않음
* 네이티브 코드: 컴퓨터의 프로세서가 실행할 수 있는 기계어(JVM 없이 실행 가능)
5. 프로그램 종료
- 프로그램 종료 시 JVM이 할당받은 메모리 반환 및 프로세스 종료
흐름도
728x90
'스터디 > CS' 카테고리의 다른 글
[CS] Java String, StringBuilder, StringBuffer 차이 (0) | 2025.03.28 |
---|---|
[CS] 자바 문자열 할당 방식 (0) | 2025.03.27 |
[CS] 객체 지향 프로그래밍 특징 (0) | 2025.03.26 |
[CS] Garbage Collection (0) | 2025.03.25 |
[CS] JVM 구조 (0) | 2025.03.14 |