스터디/CS

[CS] Java 실행 과정

kwang2134 2025. 3. 12. 17:28
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이 할당받은 메모리 반환 및 프로세스 종료

흐름도

이미지 출처: https://loosie.tistory.com/816

 

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