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개의 댓글

관련 채용 정보