Java 컴파일 과정

60jong·2023년 3월 15일
0

Java

목록 보기
9/14

JAVA Compiler

  • 자바 클래스 파일 .java
  • 자바 컴파일러 javac가 컴파일
  • 자바 바이트 코드 .class

Class Loader

  • JVM의 Class Loader로 자바 바이트 코드가 전달 됨.
  • Class Loader는 동적 로딩을 통해 필요한 클래스들을 로딩 후, 링킹해 JVM의 메모리인, Runtime Data Area에 올린다.

Execution Engine

  • Execution Engine은 Class Loader를 통해 Runtime Data Area에 load된 바이트 코드를 명령어 단위로 가져와 실행한다. Execution Engine은 두 가지 방식으로 실행이 된다.

Interpreter

  • 자바 바이트 코드를 한 줄씩 읽어 실행한다.
  • 때문에 느리다.

JIT Compiler

  • interpreter의 방식을 보완하기 위해 개발됨.

  • interpreter 방식으로 명령어를 실행하다가 적절한 시점에 JIT compiler가 자바 바이트 코드 전체를 Native Code로 컴파일 한다. 이후부터는 Interpreter가 아닌 Native Code를 통해 명령어를 실행하게 된다. Interpreter를 통해 한 줄씩 명령어를 실행하는 것보다 Native Code를 실행하는 것이 더 빠르다. Native Code는 캐시에 보관되기 때문이다.

JIT Compiler를 통해 자바 바이트 코드를 Native Code로 컴파일 하는 과정은 Interpreter를 통해 실행하는 것보다 시간이 많이 소요된다. 따라서 한 번만 호출되는 명령어의 경우는 Interpreter를 통해 실행하는 것이 더 빠르다. 이로 인해 JIT Compiler를 사용하는 JVM들은 명령어가 얼마나 자주 쓰이는 지를 파악해서 일정 수준이 넘어가게 되면 JIT Compiler를 통해 컴파일하게 된다.

JVM의 메모리 구조

Reference

profile
울릉도에 별장 짓고 싶다

0개의 댓글