본문 바로가기
language/java

Java JIT Compiler 동작 원리 완벽 이해하기

by 죄니안죄니 2026. 5. 26.
반응형

Java JIT Compiler 동작 원리 완벽 이해하기

많은 사람들이 Java를 처음 배울 때:

Java는 인터프리터 언어라 느리다
 

라고 생각합니다.

하지만 실제 운영 환경에서는 Java가:

  • Spring Boot 서버
  • 대규모 금융 시스템
  • 고성능 게임 서버
  • Kafka
  • Elasticsearch

같은 초고성능 시스템에도 매우 많이 사용됩니다.

그 핵심 이유 중 하나가 바로:

JIT Compiler(Just-In-Time Compiler)

입니다.

실제로 JVM은 단순히 ByteCode를 해석만 하지 않습니다.

실행 중:

  • 자주 실행되는 코드 탐지
  • Native Machine Code 변환
  • CPU 최적화
  • 런타임 프로파일링

까지 수행합니다.

이번 글에서는:

  • Interpreter vs JIT
  • HotSpot JVM
  • C1 / C2 Compiler
  • Tiered Compilation
  • Escape Analysis
  • Deoptimization

까지 JVM 내부 관점으로 깊게 정리해보겠습니다.


1. JIT Compiler란?

Just-in-time compilation 는:

실행 중(ByteCode 실행 중)에 Native Machine Code로 컴파일하는 기술

입니다.

즉:

ByteCode 실행
↓
자주 실행되는 코드 발견
↓
기계어로 최적화 컴파일
↓
CPU 직접 실행
 

구조.


2. Java 실행 방식 다시 보기

Java 실행 흐름:

.java
 ↓
javac 컴파일
 ↓
.class(ByteCode)
 ↓
JVM 실행
 

3. ByteCode는 기계어가 아니다

매우 중요합니다.

.class 파일은:

CPU가 직접 실행 불가능
 

합니다.

즉 JVM이 실행 필요.


4. 초기 Java 실행 방식: Interpreter

초기 JVM은:

ByteCode 한 줄씩 해석 실행
 

했습니다.


5. Interpreter 방식 예시

예:

 
int sum = a + b;
 

실행 시마다:

ByteCode 읽기
↓
해석
↓
실행
 

반복.


6. Interpreter 장점


장점 설명
시작 빠름 컴파일 필요 없음
구현 단순 O
플랫폼 독립성 O

7. Interpreter 단점

문제:

반복 실행 시 느림
 

왜냐하면:

매번 해석 필요
 

하기 때문.


8. 그래서 등장한 JIT

핵심 아이디어:

“자주 실행되는 코드는
기계어로 바꾸자”
 

입니다.


9. HotSpot JVM

HotSpot JVM 은:

가장 대표적인 JVM 구현체

입니다.

여기서:

Hot Spot
 

이란:

자주 실행되는 코드 영역
 

의미.


10. HotSpot 탐지

JVM은 실행 중:

어떤 코드가 반복 실행되는가
 

계속 분석합니다.


11. 대표 대상

예:

  • 반복문
  • 자주 호출되는 메서드
  • 빈번한 분기

12. Hot Method

반복 호출되면:

Hot Method
 

판단.

즉:

컴파일 가치 있음
 

으로 판단.


13. JIT 컴파일 수행

그 다음:

ByteCode
↓
Native Machine Code 변환
 

수행.


14. Native Code란?

실제 CPU가 직접 실행 가능한 코드.

즉:

x86
ARM
 

CPU 명령어 수준 코드.


15. 왜 빨라질까?

Interpreter:

매번 해석
 

필요.

JIT:

이미 컴파일된 기계어 직접 실행
 

가능.


16. 그래서 Java가 생각보다 빠르다

많은 경우 Java는:

C++ 수준 가까운 성능
 

도 가능.

특히 반복 로직.


17. JIT 동작 흐름

전체 구조:

ByteCode 실행
 ↓
Hot Spot 탐지
 ↓
JIT 컴파일
 ↓
Native Code 캐시
 ↓
이후 직접 실행
 

18. Native Code 저장 위치

컴파일 결과는:

Code Cache
 

영역 저장.


19. JVM이 “학습”한다는 의미

JIT는 실행 중:

  • 호출 빈도
  • 분기 패턴
  • 타입 정보

등 계속 수집.

즉:

런타임 최적화
 

수행.


20. C1 Compiler

HotSpot 내부 JIT 중 하나.

특징:

빠른 컴파일
 

중심.


21. C2 Compiler

고급 최적화 담당.

특징:

느리지만 매우 강한 최적화
 

수행.


22. 왜 두 개 존재할까?

컴파일 전략 차이 때문.


Compiler 특징
C1 빠른 컴파일
C2 강한 최적화

23. Tiered Compilation

현대 JVM 핵심 전략.

구조:

처음엔 Interpreter
↓
C1 빠른 최적화
↓
충분히 Hot하면 C2 고급 최적화
 

24. 왜 이렇게 할까?

처음부터 C2 쓰면:

컴파일 비용 너무 큼
 

즉 startup 느려짐.


25. Inline Optimization

매우 중요한 최적화.

예:

 
add()
 

같은 작은 메서드.

JIT는:

메서드 호출 제거
 

가능.


26. 왜 중요할까?

메서드 호출도 비용 존재.

Inline하면:

직접 코드 삽입
 

가능.


27. Escape Analysis

Escape Analysis 는:

객체가 메서드 밖으로 나가는지 분석

기술.


28. 예시

 
void test() {

    User user = new User();
}
 

만약 user가:

메서드 밖으로 안 나감
 

이면?


29. JVM 최적화 가능

JIT는:

Heap 객체 생성 생략
 

가능할 수도 있음.

즉:

Stack Allocation
 

최적화 가능.


30. Scalar Replacement

객체 자체 제거 가능.

예:

객체 → 개별 변수 치환
 

즉:

객체 생성 자체 제거
 

가능.


31. Lock Elision

동기화 제거 최적화.

예:

 
synchronized
 

지만 실제 경쟁 없으면:

락 제거 가능
 

32. Branch Prediction 최적화

JIT는:

어떤 if가 자주 실행되는가
 

분석 가능.

즉 CPU 친화적 코드 생성.


33. Deoptimization

매우 중요합니다.

JIT 가정이 틀리면:

최적화 취소
 

가능.

이를:

Deoptimization
 

이라고 함.


34. 왜 필요할까?

예:

“항상 Dog 타입”
 

이라 가정하고 최적화했는데:

Cat 등장
 

하면 최적화 깨짐.


35. JVM은 다시 Interpreter로 복귀 가능

즉:

최적화 실패
↓
안전한 코드로 롤백
 

가능.


36. Warm-up이란?

Java 서버는 보통:

초기 느림
↓
점점 빨라짐
 

현상 존재.

이유:

JIT 학습 및 최적화 시간 필요
 

하기 때문.


37. Benchmark 시 주의

실무에서 매우 중요.

Java 성능 테스트는:

Warm-up 없이 측정하면 부정확
 

가능.


38. JIT 관련 옵션

대표 옵션:

 
-XX:+PrintCompilation
 

설명:

옵션 의미
-XX:+PrintCompilation JIT 컴파일 로그 출력

39. Code Cache 관련 옵션

 
-XX:ReservedCodeCacheSize=256m
 

설명:

옵션 의미
ReservedCodeCacheSize JIT Code Cache 크기

40. 실무에서 자주 하는 실수

1) Java는 무조건 느리다고 생각

JIT 최적화 매우 강력.


2) Benchmark Warm-up 안 함

결과 왜곡 가능.


3) 객체 생성 비용 과소평가

JIT가 최적화해줄 수도 있지만 항상은 아님.


41. 핵심 흐름 요약

Interpreter 실행
↓
Hot Spot 탐지
↓
JIT 컴파일
↓
Native Code 생성
↓
CPU 직접 실행
 

42. 가장 중요한 핵심 한 줄

JIT는
“자주 실행되는 ByteCode를
실시간으로 기계어 최적화하는 JVM 엔진”
 

입니다.


43. 정리

JIT Compiler는 단순 성능 기능이 아닙니다.

실제로는:

  • JVM 성능
  • 런타임 최적화
  • 객체 생성 최적화
  • CPU 최적화
  • 대규모 서버 처리 성능

전체와 연결되는 JVM 핵심 기술입니다.

특히 실무에서는:

  • HotSpot JVM
  • Tiered Compilation
  • C1/C2 Compiler
  • Escape Analysis
  • Warm-up

을 정확히 이해하는 것이 매우 중요합니다.

다음 글에서는:

인터프리터 vs JIT Compiler

를 Python/JavaScript 비교와 함께 JVM 실행 전략 관점으로 깊게 정리해보겠습니다.

반응형

댓글