- Oracle이 만든 JVM의 이름이 Java HotSpot Performance Engine입니다.
줄여서, HotSpot VM이라고 부르거나, HotSpot이라고 부릅니다. - 즉, HotSpot은 Oracle이 만든 JVM의 제품명입니다.
- C/C++ 컴파일러는 C/C++ 소스 코드를 기계어 코드로 변환합니다.
- C/C++ 소스 파일을 컴파일하여 생성된 *. exe 실행 파일에는 기계어 코드가 들어있습니다.
- *. exe 파일은 직접 CPU에서 실행됩니다.
- 실행 파일의 구조는 OS에 따라 다릅니다.
- 표준 Java 컴파일러는 Java 소스 코드를 바이트 코드로 컴파일합니다.
- *. java 소스 파일을 컴파일하여 생성된 *. class 파일에는 바이트 코드가 들어있습니다.
- JVM이 *. class 파일을 읽어 바이트 코드를 실행합니다.
표준 Java 컴파일러 실행 파일은 javac.exe
표준 Java 가상 기계 실행 파일은 java.exe
- 기계어 코드로 컴파일 하지 않고 바이트 코드로 컴파일 하는 방식의 장단점은 다음과 같습니다.
- CPU와 OS에 독립적입니다.
- JVM만 있으면 실행할 수 있습니다.
- 느립니다. (CPU가 기계어 코드를 직접 읽어 실행하는 방식이 가장 빠릅니다.)
- Java는 JIT 컴파일 방식을 사용합니다.
- JIT 컴파일이란, 바이트 코드를 실행하기 직전에 기계어 코드로 컴파일하는 방식을 뜻합니다.
- JVM은 실행하기 직전, 바이트 코드를 기계어 코드로 변환(컴파일)해서 실행합니다.
- 바이트 코드를 해석해서 실행하는 것(인터프리터 방식)보다 기계어 코드로 변환해서 실행하는 것이
훨씬 더 빠르기 때문입니다.
- JVM 내부에는 JIT 컴파일러가 내장되어 있습니다.
- 장점 : dynamic optimization 가능
- 단점 : 변환된 기계어 코드를 따로 저장하지 않기 때문에, 실행할 때마다 매번 JIT 컴파일을 해야 합니다.
-
컴파일러가 소스 코드를 컴파일할 때,
소스 코드와 동일한 순서로 기계어 코드를 생성하지 않고, 더 빠르고 효율적으로 실행될 수 있도록
실행 순서를 재배치하고 조정하여 기계어 코드를 생성하는 것을
컴파일러 최적화(compiler optimization)이라고 합니다. -
소스 코드를 컴파일할 때가 아니고,
실행하는 시점에 실행 순서를 재배치하고 조정하여 기계어 코드를 생성하는 것을 동적 최적화(dynamic optimization) 라고 합니다. -
JVM의 JIT 컴파일러는 dynamic optimization을 수행합니다.