Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Spring
- stream
- jpa
- 필드 주입
- 인덱스
- AOP
- StringBuilder
- 생성자 주입
- static
- 조합
- VUE
- DI
- 재정의
- equals
- MSA
- Test
- lambda
- redis
- java
- KEVISS
- 열 속성
- DDL
- SQL
- hashcode
- select_type
- jwt
- docker
- 테스트 코드
- 바이너리 카운팅
- cache
Archives
- Today
- Total
백엔드 개발자 블로그
JIT Compiler 본문
JIT Compiler란?
- JVM 내에 구성된 execution engine을 통해서 바이트 코드를 기계어로 변환하여 애플리케이션을 실행시킨다
- 바이트 코드를 기계어로 실행시키는 과정을 인터프리터 라고 한다
- jit compiler는 인터프리터 과정에서 Java 프로그램의 성능을 향상시키는 데 도움을 준다
💡 그럼 바이트 코드는 어디서 생성되지?
사전에 구현한 소스 코드(.java)를 javac로 컴파일하여 소스 코드(.class)로 변환한다 컴파일된 결과물은 보통 jar, war 형식의 압축 파일로 생성된다
컴파일은 왜 필요하지?
- 컴파일하면 OS와 상관없이 JVM만 설치되어 있으면 어느곳에서도 애플리케이션을 동작시킬수 있다
- 대표적인 컴파일 언어는 C, C++ 이다
인터프리터 과정이 필요한가?
- 컴파일된 소스 코드를 런타임에 실행시 한번에 많은 소스 코드를 실행시키는 과정이 느리다는 단점이 있다.
- 실행시간을 개선하기 위해 인터프리터 과정이 필요하다. 그래서 자바는 컴파일과 인터프리터를 혼합하여 OS에 독립적이고 실행을 빠르게 했다.
💡 인터프리터는 구체적으로 어떻게 동작하지?
- 인터프리터 과정은 실시간으로 바이트 코드를 라인별로 읽어서 수행되므로, 컴파일로 수행하는 것보단 빠를수 있겠지만 런타임시 코드 라인을 읽어서 수행하다보니 속도가 많이 빠르지는 않다.
- 대표적인 인터프리터 언어는 Python, javascript 등이 있다
자바에서 인터프리터 과정은 어떻게 동작하나?
- JVM > execution engine > JIT compiler > C1 Compiler, C2 Compiler가 존재한다
- C1 컴파일러는 컴파일만 수행
- C2 컴파일러는 컴파일 + 캐싱 => 실행 시간 단축
- 모든 코드를 C2 단계에서 캐싱하지는 않는다
- 캐싱되는 크기는 제한이 있어서 캐싱되어 저장되었더라도 몇몇 코드는 다시 제거되기도 한다
참고
'Java' 카테고리의 다른 글
STATIC (1) | 2024.05.02 |
---|---|
Enum (0) | 2024.04.29 |
G1 GC vs ZGC (0) | 2024.04.29 |
heap dump 분석하기 (feat. OOM) (0) | 2024.04.29 |
병렬처리를 이용한 이미지 리사이즈 개선 (0) | 2024.04.29 |