* intro
- java의 컴파일러가 소스 코드를 바이트 코드로 컴파일 진행.
- 클래스 로더에 의해 메모리에 적재된 바이트 코드는 JVM 실행 엔진을 통해 실행된다.
- 이 때, 실행 엔진이 각 명령을 실행하기위해 운영체제가 이해 할 수 있는 기계어로 변환하는데, 다음 두 가지 방식이 사용된다.
1. 인터프리터 (Interpreter)
2. JIT(Just In Time) 컴파일러
1. 인터프리터
- 인터프리터는 런타임 시에 JVM 메모리에 올라온 바이트코드를 한 문장씩 실행하는데 바이트코드도 기계어가 아니기 때문에 매번 변환-실행 과정을 거침.
- 이 때문에 C언어 처럼 미리 기계어로 컴파일 되고 실행하는 언어에 비해 실행 속도가 느려짐.
- 예를 들어 반복문안의 간단한 연산도 매번 변환-실행 과정을 거침
2. JIT 컴파일러. Just In Time Compiler.
- 앞서 설명한 인터프리터는 바이트코드를 실행하기 위해 이미 실행했던 실행문도 다시 읽고 번역하는 과정을 거치기 때문에 프로그램의 속도가 저하된다는 단점을 보안하기 위해 등장함.
- 바이트코드 중 빈번하게 접근하는 영역에 대해 런타임중 기계어로 컴파일 하고 컴파일 된 명령문을 캐싱해 같은 부분이 호출되면 캐싱된 데이터로 실행함.
- 이때 지트컴파일러는 별도의 스레드에서 진행함.
- 매번 JIT 컴파일러가 실행되지는 않고, JVM에서 미리 정의된 "컴파일 임계값"을 가지는데 바이트 코드의 특정 부분에 대한 호출 횟수를 "컴파일 임계값"을 넘길때 JIT 컴파일러를 실행한다.
'Computer Science > JAVA' 카테고리의 다른 글
Error와 Exception 의 개념 (0) | 2024.11.20 |
---|---|
디폴트 메서드, 추상 클래스와 인터페이스 (1) | 2024.11.20 |
Java의 컴파일 과정 (0) | 2024.11.20 |
컬렉션 프레임 워크 (1) | 2024.11.20 |
Class Loader에 대해서 (0) | 2024.11.19 |