Java Virtual Machine
Java의 바이트 코드를 해석하고 실행하는 가상 머신으로 운영체제에 종속되지 않고 실행할 수 있다.

💡 클래스 로더는 JVM 내료 클래스 파일을 동적으로 로드하여 실행 시에 클래스를 사용할 수 있도록 한다. 로드된 클래스는 JVM의 메모리 영역인 Runtime Data Areas에 저장된다.
💡 메모리에 적재된 클래스들을 기계어로 변경하여 명령어의 단위로 실행시켜주는 역할을 수행한다. 이 때 인터프리터와 JIT 컴파일러 두 가지 방식을 혼합하여 바이트 코드를 실행한다.
초기 방식으로, 바이트 코드를 한 줄씩 해석하고 실행. 속도가 느린 단점이 있다.
인터프리터 방식의 단점을 보완하기 위해 나온 방식.
프로그램 실행 시점에 바이트 코드 전체를 컴파일하여 각 OS에 맞는 Native Code 로 변환.
Native Code 로 변환할 때 소요되는 비용 때문에 평소에는 인터프리터 방식을 사용, 일정 기준을 넘어가면 JIT 컴파일 방식으로 명령어를 실행한다.
또한 같은 코드를 매번 해석하지 않고 캐싱 해두었다가 바뀐 부분만 컴파일한다.
힙 메모리 영역에서 더는 사용하지 않는 메모리를 자동으로 회수해준다.
💡 JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.
런타임 데이터 영역은 크게 Method Area , Heap Area , Stack Area , PC Register , Native Method Stack 으로 나눌 수 있다.
💡 자바가 다른 언어로 만들어진 애플리케이션과 상호 작용할 수 있도록 인터페이스를 제공하는 프로그램
JVM이 Native Method를 적재하고 수행할 수 있도록 하나, 제대로 동작하는 언어는 C, C++ 정도 뿐이다.
💡 C, C++로 작성된 라이브러리를 의미
참고:
JVM 내부 구조 & 메모리 영역 총정리 - Inpa Dev - 티스토리
[Java] 자바 가상머신 JVM(Java Virtual Machine) 총정리
[IT 기술 면접] JVM (자바 가상 머신) 이란?