JVM이란 자바를 실행하기 위한 가상 기계라고 할 수 있다.
JVM의 장점은 OS에 종속받지 않고 Java를 실행시킬 수 있다는 특징이 있다.
이 글에서는 JVM의 구조와 java의 실행과정이 어떻게 이루어지는지 알아보겠다.
JVM내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행한다.
런타임시 한번에 모든 클래스 파일을 로드하는 것이 아니라, 필요한 클래스 파일의 바이트 코드를 JVM 메모리에 로드하는데, 여기에는 클래스의 메타데이터가 생성된다.
JVM 실행중 더 이상 필요하지 않은 클래스나 인스턴스가 생기게 되면 Garbage Collector가 이를 감지하여 메모리 상에서 제거해줘 메모리 누수를 막는다.
JVM이 프로세스로 사용되기 위해 OS로부터 할당받는 메모리 영역이다.
우리가 작성하는 JAVA 코드인 JAVA source 파일들은 사실 컴퓨터는 알지 못하는 코드이다. 컴퓨터는 단지 0과 1만을 알고 있을 뿐이다.
따라서, 다음과 같은 순서로 컴퓨터가 코드를 이해할 수 있도록 해석한다.
JVM은 바이트 코드를 해석할 때, 인터프리터 방식 + JIT 컴파일 방식을 혼합해서 사용한다.
인터프리터 방식은 한줄씩 해석하고 실행하는 방식이다. 초기 방식이고 속도가 느리다는 단점이 있다.
느린 속도를 보완하기 위해서 나온것이 JIT 컴파일 방식이다.
JIT 컴파일 방식은 같은 코드를 매번 컴파일 하지 않고, 실행할 때 컴파일을 하면서 해당 코드를 캐싱해버린다.
이후에는 바뀐 코드에 대해서만 컴파일하고, 나머지는 캐싱된 코드를 사용한다.
이 때문에, JIT 컴파일 방식이 인터프리터 방식보다 훨씬 빠르다.