[개발 일기] 2025.03.24 - JIT 컴파일러

2025. 3. 24. 13:37·개발 일기

💡 개요

 

자바는 정적 언어이고, JVM 위에서 동작하기 때문에 다른 언어들보다 느리다는 단점이 있다.

 

 

하지만 JVM 내부에는 JIT(Just-In-TIme) 컴파일러를 통해 성능을 향상한다는데 어떻게 그런 걸까?

 

 

 

📕 JIT 컴파일러

 

JIT 컴파일러는 런타임에 바이트코드를 네이티브 코드(기계어)로 변환하는 기술이다.

 

 

JVM 내부에선 컴파일러 시, 모든 코드를 네이티브 코드로 변환하는 것이 아닐, JVM이 바이트 코드를 해석하면서 실행한다.

 

 

그런데 바이트 코드를 한 줄 읽고, 또 그 코드를 네이티브 코드로 변환하면 당연히 속도가 드려질 수밖에 없다. (참고로 이 방식을 인터프리팅이라고 한다.)

 

 

JIT 컴파일러는 이를 해결하기 위해 핫스팟(반복적으로 사용되는 코드)을 감지해서 네이티브 코드로 변환한 후, 변환된 코드를 재사용할 수 있게 한다.

 

 

 

🛠️ JIT 컴파일러의 동작 방식

 

처음 실행

  • 바이트코드가 JVM의 인터프리터(Interpreter)에 의해 한 줄씩 실행됨
  • 이 단계에서는 빠르게 실행되지만 속도는 최적화되지 않음

 

핫스팟(Hotspot) 감지

  • JVM은 반복적으로 실행되는 코드를 핫스팟으로 판단함
  • 이 코드가 자주 실행된다는 걸 감지하면 JIT 컴파일러가 개입함

 

JIT 컴파일 및 최적화

  • JIT 컴파일러는 핫스팟 코드를 네이티브 코드로 변환함
  • 변환된 네이티브 코드를 캐시에 저장하여 이후 실행 시 빠르게 로드함
  • 컴파일에 적용되는 기법은 불필요한 코드 제거(Dead Code Elimination), 인라이닝(Inlining), 루프 최적화(Loop Optimization) 등이 있음

 

이후의 컴파일 과정

  • 동일한 코드가 다시 실행될 때 네이티브 코드로 변환된 부분을 재사용하여 속도를 극대화함

 

 

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.03.26 - REDO, UNDO  (0) 2025.03.26
[개발 일기] 2025.03.25 - forward 프록시 (Nginx)  (0) 2025.03.25
[개발 일기] 2025.03.23 - 무중단 배포  (0) 2025.03.23
[개발 일기] 2025.03.22 - 스케줄링 기법  (0) 2025.03.22
[개발 일기] 2025.03.21 - 외부에서의 주입이 테스트 코드에 용이한 이유  (0) 2025.03.21
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.03.26 - REDO, UNDO
  • [개발 일기] 2025.03.25 - forward 프록시 (Nginx)
  • [개발 일기] 2025.03.23 - 무중단 배포
  • [개발 일기] 2025.03.22 - 스케줄링 기법
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

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

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.03.24 - JIT 컴파일러
상단으로

티스토리툴바