< JVM이 Java 코드를 실행하는 방법 >

Java Compiler(javac)를 통해 .class 파일로 변환한다.
변환된 class 파일을 JVM 메모리에 탑재 해야한다 ➡️ 이 과정은 컴파일 타임이 아니라 런타임에 일어난다 (Java의 동적 클래스 로딩 기능이라고 함)
이것을 Class load라고 하고, classloader가 해당 작업을 수행한다.

ClassNotFoundException이 발생한다..java)을 bytecode(.class)로 변환한다.class file

(출처: https://blog.hexabrain.net/397)
javap (역어셈블러)
$javap -c [Class명]
public class com.company.Foo {
int data;
public com.company.Foo(); // 클래스 Foo의 디폴트 생성자
Code:
// 여기서는 this를 피연산자 스택에 푸시한다.
0: aload_0
// 부모 클래스인 Object의 디폴트 생성자를 호출한다. (super())
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public void doSomething();
Code:
0: return
}
프로그램이 성능을 최대로 내려면?
➡️ native 기능을 활용해 CPU에서 직접 프로그램을 실행시켜야 한다
(native code는 CPU가 이해할 수 있는 code)
따라서 핫스팟은 가장 자주 실행되는 bytecode를 native code로 컴파일 한다. (핫스팟의 기능1)
➡️ JIT(Just-In-Time, 적시, 그때그때 하는) 컴파일
핫스팟은 동적 인라이닝도 수행한다 (핫스팟의 기능2)