JIT 컴파일

2023. 1. 14. 19:39·Java

JIT 컴파일

정의

  • Just-In-Time Compilation (= Dynamic Translation, 동적 번역)
  • 프로그램을 실행하는 시점(런타임)에 기계어로 번역하는 컴파일 기법이다.
    • 실행 시점에 인터프리트 방식으로 코드를 읽어가면서 기계어 코드를 생성한다.
    • 생성된 기계어 코드를 캐싱하여, 재사용 시에는 캐싱된 기계어 코드를 사용한다.

Java의 경우

  • Java 컴파일러 : 자바 프로그램 코드 → 바이트코드
  • JIT 컴파일러 : 바이트코드 → 기계어 코드

장점 (사용 이유)

  • Only 인터프리터 방식보다는 성능이 좋고, Only 정적 컴파일 방식보다는 이식성이 좋다.
  • 즉, 정적 컴파일러의 성능과 인터프리터 언어의 편의성을 모두 추구한다.

의외의 장점

정적 컴파일러로 번역한 결과보다 성능이 더 좋을 수 있다.

  • 실행 환경에 맞추어 최적화된 코드를 생성할 수 있다.
    • CPU 세대마다 지원하는 명령어가 다를 수 있는데, 더 효율적인 명령어로 수행 가능한 작업은 해당 명령어를 통해 수행하도록 할 수 있다. (ex. 인텔 x86 CPU의 MMX 명령어)
    • 실행 환경의 캐시, 메모리 크기 등 런타임에만 알 수 있는 H/W, S/W 정보를 활용할 수 있기 때문에 정적 컴파일보다 좋은 성능의 코드를 생성할 가능성이 있다.
  • 가상 함수 테이블을 통해 가상 메서드가 간접 호출될 때, 해당 메서드를 오버라이드하는 서브(자식) 클래스가 존재하지 않을 경우에 간접 호출을 정적 바인딩(Static Binding)으로 호출하거나 인라인으로 전개할 수 있다고 한다.

참고

  • https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=parkjy76&logNo=220199093415
저작자표시 (새창열림)

'Java' 카테고리의 다른 글

OpenJDK 아카이브 링크  (0) 2022.12.10
Java의 정석 13장 리뷰  (1) 2022.11.11
백기선 스프링 프레임워크 핵심 기술 완강 후기  (0) 2022.11.07
Java 이클립스 The project description file (.project) for ~ is missing 에러  (0) 2021.12.13
'Java' 카테고리의 다른 글
  • OpenJDK 아카이브 링크
  • Java의 정석 13장 리뷰
  • 백기선 스프링 프레임워크 핵심 기술 완강 후기
  • Java 이클립스 The project description file (.project) for ~ is missing 에러
Caniro
Caniro
  • Caniro
    Minimalism
    Caniro
  • 전체
    오늘
    어제
    • 분류 전체보기 (317)
      • Algorithm (13)
        • 알기 쉬운 알고리즘 (10)
        • Search (1)
        • Sort (2)
      • Arduino (0)
      • C++ (185)
        • Class (46)
        • Exception (6)
        • Library (51)
        • Overloading (10)
        • SmartPointer (5)
        • Syntax (33)
        • TBC++ (23)
        • Templates (9)
        • VisualStudio (2)
      • Embedded (1)
      • Git (4)
      • Java (5)
      • Linux (16)
        • Error (1)
        • Linux Structure (11)
      • MacOS (7)
      • OS (1)
        • Concurrency (1)
      • Python (21)
        • Class (1)
        • Function (2)
        • Syntax (17)
      • Raspberrypi (9)
      • Review (1)
      • Utility (12)
        • VSCode (5)
        • VirtualBox (3)
      • Web (8)
        • Nginx (1)
        • React (3)
        • Django (1)
      • Windows (20)
        • Registry (3)
        • WSL (1)
        • DeviceDriver (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Solaris 10
    mspaint
    제외
    windows
    EXCLUDE
    MacOS
    맥북 카카오톡 알림 안뜸
    윈도우
    java
    citrix workspace
    백기선
    KakaoTalk
    Windows 11
    그림판
    윈도우 명령어
    spring
    스프링 프레임워크 핵심 기술
    SunOS 5.1
    알림
    스프링
    SFC
    로지텍 마우스 제스처
    vscode
    dism
    logi options
    unix
    Workspace
    시스템 복구
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Caniro
JIT 컴파일
상단으로

티스토리툴바