[Java] 자바 컴파일 과정

2025. 6. 28. 14:29·Development & Projects/Java

 

자바는 다양한 운영체제에서 동일한 코드로 실행되는 OS에 독립적인 특징을 가지고 있습니다. 이것이 가능한 이유는 JVM(Java Vitual Machine) 덕분입니다. JVM(Java Vitual Machine)의 어떠한 기능 때문에 OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보도록 하겠습니다.

 

 

자바 컴파일 과정 순서

① .java 파일 작성

개발자는 자바 소스코드 파일을 작성합니다.


② javac 컴파일러 → 바이트코드 생성 (.class 파일)

작성된 소스 파일은 자바 컴파일러(javac)에 의해 컴파일되어 .class 파일이 생성됩니다.

이 .class 파일에는 바이트코드(Bytecode) 라는 중간 형태의 코드가 들어 있습니다.

  • 이 코드는 CPU가 직접 실행할 수 있는 기계어가 아닌,
  • JVM이 이해할 수 있도록 설계된 플랫폼 중립적 코드입니다.
  • 각 명령어는 1바이트의 Opcode + 피연산자로 구성됩니다.

즉, 이 단계까지만 보면 OS에 독립적인 코드가 탄생한 것입니다.

 

 


③ Class Loader가 메모리로 로드

컴파일된 .class 파일은 JVM의 클래스 로더(Class Loader)에 의해 메모리에 로드됩니다.
클래스 로더는 다음과 같은 5단계 과정을 거칩니다.

 

클래스 로더 세부 동작 단계

  1. 로딩(Loading)
    .class 파일을 읽어 JVM 메모리로 적재
  2. 검증(Verification)
    바이트코드가 자바 언어와 JVM 명세에 부합하는지 확인
  3. 준비(Preparation)
    클래스에 필요한 정적(static) 메모리 구조를 생성
  4. 분석(Resolution)
    심볼릭 레퍼런스를 실제 메모리 주소(다이렉트 레퍼런스)로 치환
  5. 초기화(Initialization)
    static 변수 등을 실제 값으로 초기화

④ 실행 엔진이 바이트코드 실행

이제 메모리에 올라온 바이트코드는 실행 엔진(Execution Engine)에 의해 실행됩니다.

실행 엔진은 바이트코드를 기계어 수준으로 해석하거나 변환하여 실행합니다.
방식은 두 가지입니다.

 

1.  인터프리터(Interpreter)

  • 바이트코드를 한 줄씩 읽고 실행
  • 처음 실행 속도는 빠르지만 전체 성능은 느림

2.  JIT 컴파일러(Just-In-Time Compiler)

  • 자주 실행되는 메서드를 모니터링하고, 그 코드를 기계어로 변환
  • 이후부터는 인터프리팅 없이 빠르게 실행 가능
  • 인터프리터 + JIT 방식이 JVM의 기본 구조

'Development & Projects > Java' 카테고리의 다른 글

[Java] 상속 정리 / 다중 상속 / 다이아몬드 문제  (0) 2025.09.21
[Java] 추상 클래스와 인터페이스 정리  (0) 2025.09.20
[Spring Boot] @Valid 유효성 검사가 되지 않을 때  (0) 2025.05.12
[Spring boot] @Transactional 이란?  (0) 2025.04.08
[Spring Boot] GlobalExceptionHandler 예외 처리  (0) 2025.04.06
'Development & Projects/Java' 카테고리의 다른 글
  • [Java] 상속 정리 / 다중 상속 / 다이아몬드 문제
  • [Java] 추상 클래스와 인터페이스 정리
  • [Spring Boot] @Valid 유효성 검사가 되지 않을 때
  • [Spring boot] @Transactional 이란?
seulll
seulll
개인 공부 블로그입니다.
  • seulll
    seulll
    seulll
  • 전체
    오늘
    어제
    • 분류 전체보기 (390) N
      • Coding Test (257)
        • Programmers (163)
        • Baekjoon (92)
      • Data Structures & Algorithm.. (15)
      • Development & Projects (58) N
        • Python (5)
        • Java (15) N
        • Android (5)
        • AI (6)
        • Unity (3)
        • API (5)
      • OS (5)
      • DB (4)
      • Network (8)
      • Data Analysis (14)
      • Study | etc (20) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 설정
  • 링크

    • GitHub
  • 인기 글

  • 태그

    데이터분석
    야근 지수
    웹크롤링
    박스플롯
    train_test_split
    백엔드
    오차행렬
    Python
    오블완
    모델 성능 평가
    바다코끼리
    API
    asterisk
    Boxplot
    그리디 알고리즘
    confusion matrix
    2 x n 타일링
    프렌즈4블록
    프로그래머스
    Greedy
    백엔드 개발자
    카카오맵 api
    대입 표현식
    카카오맵
    코딩테스트
    티스토리챌린지
    백엔드 개발자 역량
    파이썬
    kakao map api
    solving environment
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
seulll
[Java] 자바 컴파일 과정
상단으로

티스토리툴바