자바의 실행과정과 JIT에 대하여

2024. 6. 12. 21:23·Java
목차
  1. 자바 코드가 실행되기까지
  2. JIT 컴파일러
  3. HotSpot VM
  4. C1과 C2의 동작
  5. 코드 캐시
  6. JIT 컴파일러의 한계

 

오늘은 자바 코드의 실행과정과 메모리 구조에 대해서 알아보겠습니다.

 

자바 코드가 실행되기까지

Java 코드 실행 과정

 

 

우리가 작성한 자바 소스 코드는 javac (Java Compiler)를 통해 바이트 코드(.class)로 변환된 뒤,  최종적으로 기계어로 변환되어 CPU가 이를 처리하는 과정을 거친다.

 

 

이때 바이트 코드를 기계어로 변환하는 방법에는 2가지가 있다.

1. JVM의 JIT (Just-In-Time)와 관련된 환경변수 설정(default Y)을 파악하여, SPARC(Scalable Processor Architecture) 혹은  Intel의 기계어(machine code)를 통해 실행되는 방법

2. 환경변수 설정이 없을 시, interpreter를 통한 실시간 번역으로 기계어로 바뀌는 방법

 

이러한 과정을 거쳐 번역된 기계어는 각 플랫폼의 JVM 통해(Windows, Linux, Mac) 실행될 수 있다.

 


JIT 컴파일러

 

그렇다면 JIT와 Interpreter를 통한 기계어로의 번역에는 어떤 차이가 있을까?

 

Interpreter의 경우 코드를 한 줄씩 번역하여 실행되므로, 코드의 양이 늘어날 수록 실행 시간이 증가하고 이는 성능 감소로 이어진다.

이러한 문제를 해결하기 위해 JIT 컴파일러가 등장하였다.

 

JIT 컴파일러는 한 마디로 빠른 컴파일 및 특정 환경에 맞춤화된 최적화를 제공하여 성능을 향상시킨다.

 

그럼 JIT 컴파일러가 사용된 JVM, HotSpot JVM에 대해 알아보면서 JIT 컴파일러에 대해 자세히 알아보자.

기본 JVM 버전 확인

 


 

HotSpot VM

HotSpot VM의 구조

 

JDK 1.3 부터 JVM의 구현체 중 하나인 HotSpot VM이 기본 JVM으로 JIT 컴파일러 C1, C2가 포함되어 있다.

 

두 컴파일러의 특징을 비교하면 다음과 같다.

(두 컴파일러는 모두 바이트 코드를 기계어로 번역하기 위한 컴파일러임을 잊지 말자)

JIT 컴파일러 C1 (클라이언트 컴파일러) C2(서버 컴파일러)
컴파일 속도 빠름 c1보다 느림
코드 최적화 정도 기본적인 최적화만 수행 높은 최적화 (warm-up 후 성능 극대화)
적합 어플리케이션 즉시 실행되는 클라이언트 어플리케이션 장기 실행되는 서버 어플리케이션

 

 

그렇다면 c1, c2는 어떻게 동작할까?

 


C1과 C2의 동작

JVM은 처음에 실행된 코드에 대해서는 interpreter를 활용하여 데이터를 수집한다. 자주 실행되는 코드가 식별되면, C1 컴파일러가 이를 native code(기계어)로 컴파일(빠른 컴파일과 간단한 최적화)한다. 이를 통해 이후 실행되는 interpreter를 거치지 않고 직접 실행된다. 더 많은 데이터가 수집될 경우 높은 최적화를 통해 C2 컴파일러가 중요 코드들을 다시 컴파일하며 실행 성능을 향상시킨다. 

(프로그램 실행 중에 컴파일하여 런타임 최적화를 수행)

 

 

최적화 기법의 종류

더보기

Loop Unrolling, Inlining, Escape Analysis, Branch Prediction, Memory Layout Optimization, Devirtualization

 

 

이렇듯 컴파일러를 순차적으로 적용하는 방식을 계층형 컴파일(Tiered Compliation)이라고 한다.

 

코드 캐시

native code로 컴파일된 코드는 캐시 코드라고하는 특수 힙에 저장된다. 이 캐시는 반복되는 메서드 호출 시 컴파일된 코드를 재사용함으로써 코드의 실행 속도를 향상시킨다. 또한 JVM은 코드 캐시의 크기를 관리하며, 메모리 관리를 수행하기도 한다.

 

 

 


JIT 컴파일러의 한계

 

1. 복잡한 코드 ( C++ 사용)로 인한 최적화와 유지보수 지속성의 어려움

 👉   GraalVM의 등장

 

2. 초기 실행 시 (warm-up 전) 성능 저하

3. 코드 캐시 메모리 과부하 가능성

4. 런타임 최적화로 인한 성능 변동 가능성

 

 

 

 

GraalVM은 이후 포스팅에서 자세히 다루겠습니다.

 

출처

더보기

본 게시글은 망나니개발자 선생님의 포스팅을 참조하였습니다.

https://mangkyu.tistory.com/301

 

[Java] Hotspot VM의 한계(JIT, Just-In-Time 컴파일러)와 이를 극복하기 위한 GraalVM의 등장

이번에는 Hotspot VM의 한계와 이를 극복하기 위한 GraalVM에 대해 알아보도록 하겠습니다. 1. Hotspot VM과 JIT 컴파일러(Just-In-Time Compiler) [ C 언어의 동작 방식 ] C, C++, GoLang, Rust 등과 같은 컴파일 언어는

mangkyu.tistory.com

https://docs.oracle.com/cd/E19455-01/806-3461/ch1intro-3/index.html

 

Sun Just-In-Time (JIT) Compiler (JDK 1.1 for Solaris Developer's Guide)

Sun Just-In-Time (JIT) Compiler The Sun Java JIT compiler, an integral part of the Solaris JVM, can accelerate execution performance many times over previous levels. Long-running, compute-intensive programs show the best performance improvement. JIT Compil

docs.oracle.com

 

'Java' 카테고리의 다른 글

객체지향의 사실과 오해를 읽고  (1) 2025.02.12
VO(Value Object)는 무엇이고 왜 쓰는 걸까?  (1) 2025.01.23
자바의 런타임 데이터 영역에 대하여  (2) 2024.06.15
추상클래스와 인터페이스에 대하여  (0) 2024.06.12
JAVA를 잡아보자 (프로그래밍 언어, 자바)  (2) 2024.01.21
  1. 자바 코드가 실행되기까지
  2. JIT 컴파일러
  3. HotSpot VM
  4. C1과 C2의 동작
  5. 코드 캐시
  6. JIT 컴파일러의 한계
'Java' 카테고리의 다른 글
  • VO(Value Object)는 무엇이고 왜 쓰는 걸까?
  • 자바의 런타임 데이터 영역에 대하여
  • 추상클래스와 인터페이스에 대하여
  • JAVA를 잡아보자 (프로그래밍 언어, 자바)
지화자_
지화자_
나만의 글로 기록하기
지화자_
냉정과열정사이
지화자_
전체
오늘
어제
  • 분류 전체보기 (47)
    • 알고리즘 (18)
      • 개념정복 (6)
      • 문제풀이 (12)
    • ComputerScience (5)
      • 데이터베이스 (3)
      • 네트워크 (0)
      • OS (2)
    • SSAFY (2)
    • Java (6)
    • Server (10)
    • Spring (3)
    • 일상 (1)
    • OpenSource (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • OOP
  • 분할정복
  • 백준
  • BFS
  • 조합
  • 알고리즘
  • dfs
  • 인터페이스
  • 빌드
  • 배포
  • 부분집합
  • 백준바이러스
  • cd
  • 백트래킹
  • 비트마스크
  • n-queen
  • 구현
  • CI
  • AOP
  • 추상클래스
  • 소프티어
  • 재귀함수
  • 아니안무서워
  • 병합정렬
  • 나무섭지

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
지화자_
자바의 실행과정과 JIT에 대하여
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.