573 단어
3 분
자바 컴파일 과정
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++로 작성된 라이브러리
자바 코드 실행 과정

자바 실행 방식
- 자바 컴파일러(.javac)가 자바 소스코드(.java)를 읽어 자바 바이트코드(.class)로 변환
- Class Loader를 통해 class들이 JVM으로 로딩
- 로딩된 class 파일들은 Execution engine을 통해 해석
- 해석된 바이트코드는 Runtime Date Areas에 배치되어 수행이 이뤄짐