573 단어
3 분
자바 컴파일 과정
2025-03-09
TIP

자바는 Windows, MacOS에서 차이 없이 구동이 가능한데, 이러한 이유는 자바는 OS에 독립적인 특징을 가지기 때문입니다.

JVM 구조#

Class Loader (클래스 로더)#

  • JVM내로 클래스를 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈

Execution engine (실행 엔진)#

  • 바이트 코드를 실행시키는 역할
NOTE

바이트코드는 JVM만이 이해할 수 있는 중간 언어이며, 각 OS에 맞는 JVM만 있으면 시스템에 상관없이 실행할 수 있음

  • 인터프리터: 바이트 코드를 한줄 씩 실행
  • JIT 컴파일러: 인터프리터 효율을 높이기 위한 컴파일러
    • 인터프리터가 반복되는 코드 발견 시 JIT 컴파일러가 반복되는 코드를 네이티브 코드로 변환
    • 이후 인터프리터는 네이티브 코드로 컴파일된 코드를 바로 사용

Runtime Data Area#

프로그램 실행 중 사용되는 다양한 영역

  • PC Register: 스레드가 시작될 때 생성되며 현재 수행 중인 JVM 명령 주소를 갖고 있음
  • Stack Area: 지역 변수, 파라미터 등 생성되는 영역
    • 실제 객체는 Heap에 할당되고 해당 레퍼런스만 Stack에 저장
  • Heap Area: 동적으로 생성된 오브젝트와 배열이 저장되는 곳으로 GC의 대상 영역
  • Method Area: 클래스 멤버 변수, 메소드 정보, Type 정보, Constant Pool, static, final 변수 등 생성
    • 상수 풀은 모든 Symbolic Reference를 포함

JNI#

  • 자바 애플리케이션에서 C, C++, 어셈블리어로 작성된 함수를 사용할 수 있는 방법 제공
  • Native 키워드를 사용하여 메서드를 호출
  • 대표적인 메서드는 Thread, currentThread

Native Method Library#

  • C, C++로 작성된 라이브러리

자바 코드 실행 과정#


자바 실행 방식#

  1. 자바 컴파일러(.javac)가 자바 소스코드(.java)를 읽어 자바 바이트코드(.class)로 변환
  2. Class Loader를 통해 class들이 JVM으로 로딩
  3. 로딩된 class 파일들은 Execution engine을 통해 해석
  4. 해석된 바이트코드는 Runtime Date Areas에 배치되어 수행이 이뤄짐
자바 컴파일 과정
https://devlog.jpstudy.org/posts/2025/java/javacompile/
저자
SY
게시일
2025-03-09
라이선스
CC BY-NC-ND 4.0