[CS] JIT(Just-In-Time) 컴파일러

SungWoo·2024년 12월 1일

CS

목록 보기
4/9
post-thumbnail

JIT(Just-In-Time) 컴파일러는 프로그램이 실행되는 시점에 필요한 코드를 기계어로 번역하는 기술로, 성능 향상에 중요한 역할을 한다. 이번 포스팅에서는 JIT 컴파일러의 동작 방식과 장점에 대해 정리해보자.


JIT 컴파일러란?

프로그램이 실행되는 시점에 기계어로 번역하는 컴파일 기법

JIT 컴파일러는 프로그램 실행 중 자주 사용되는 코드를 기계어로 변환하여 성능을 최적화한다.

실행 시점에 코드를 컴파일하기 때문에 "Just-In-Time(적시에)"이라는 이름이 붙었다고 한다. 변환된 코드는 캐시에 저장되며, 이후 동일한 코드가 실행될 때 재컴파일 없이 빠르게 처리된다.


JIT 컴파일러 동작 방식

JIT 컴파일러는 실행 중인 프로그램의 동작을 모니터링하고, 특정 조건을 만족하는 코드만 선택적으로 컴파일한다.

  1. 코드 실행 빈도 분석
    • 특정 코드(예: 메서드, 루프)가 일정 횟수 이상 호출되거나 실행되면 컴파일 대상이 된다. 이를 컴파일 임계치라고 한다.
  2. 코드 컴파일
    • 컴파일 대상이 된 코드는 기계어로 변환되어 실행 속도가 빨라진다.
  3. 캐싱 및 재사용
    • 변환된 코드는 캐시에 저장되며, 동일한 코드가 다시 실행될 때 재컴파일 과정 없이 바로 사용된다.
  4. 스택 상의 교체(OSR)
    • 실행 중인 루프 코드가 컴파일될 경우, *JVM(Java Virtual Machine)은 해당 루프를 컴파일된 코드로 즉시 교체한다. 이를 스택 상의 교체(On-Stack Replacement, OSR)라고 한다.

예시: Java에서의 JIT 컴파일

Java 프로그램은 JVM(Java Virtual Machine)에서 실행된다. JIT 컴파일러는 자주 실행되는 루프나 메서드를 기계어로 변환하여 프로그램 성능을 높인다.

예를 들어, 특정 루프가 오랫동안 실행되면 JVM은 루프의 코드를 컴파일하고, 다음 반복부터는 컴파일된 코드를 실행한다.

※ JVM(Java Virtual Machine) : OS에 종속받지 않고 CPU가 JAVA를 인식, 실행할 수 있게 하는 가상 컴퓨터

※ 참조 : hyeinisfree.tistory.com

위 그림에서 볼 수 있듯이, 반복되는 코드를 컴파일하여 캐시에 저장해두면 인터프리터가 해당 코드를 다시 해석할 필요 없이 컴파일된 코드를 직접 사용할 수 있다.


JIT 컴파일러의 장점

1. 성능 향상

  • 일반적인 인터프리터는 바이트코드나 소스코드를 매번 해석하므로 성능이 낮다.
  • JIT 컴파일러는 자주 실행되는 코드만 기계어로 변환해 실행 속도를 개선한다.

2. 효율적인 실행

  • 정적 컴파일러와 달리 프로그램 전체를 컴파일하지 않고 필요한 부분만 컴파일하므로 효율작이다.
  • 바이트코드를 미리 최적화하여 변환 시간을 단축한다.

3. 플랫폼 독립성

  • Java와 같은 언어에서 JIT 컴파일러는 다양한 플랫폼에서 실행 가능한 바이트코드를 플랫폼에 맞는 기계어로 변환하므로 플랫폼 독립성과 성능을 모두 제공한다.

JIT 컴파일러 vs. 정적 컴파일러 vs. 인터프리터

특성정적 컴파일러인터프리터JIT 컴파일러
컴파일 시점실행 전실행 중실행 중
성능높음낮음높음
컴파일 범위전체 코드실행 중 전체필요한 코드만
유연성낮음높음중간
profile
어제보다 더 나은

0개의 댓글