바이트 코드 실행 및 플랫폼 독립 제공
자바 소스 코드를 .class 파일로 컴파일함 (자바 바이너리 코드라는 중간 언어로 변환됨) JVM은 이 바이트 코드 해석하고 실행함 → 이 때문에 운영체제나 하드웨어에 맞게 바이트 코드를 기계어로 변환해 실행함. → 어떤 운영 체제에도 실행 가능
메모리 관리
JVM은 자바 애플리케이션이 사용할 메모리를 자동으로 관리합니다. JVM은 힙(Heap), 스택(Stack), 메소드 영역(Method Area), 프로그램 카운터(Program Counter) 등으로 메모리를 나누어 관리하며, 가비지 컬렉션(Garbage Collection)이라는 기능을 통해 더 이상 사용되지 않는 객체들을 자동으로 메모리에서 제거합니다.
JVM 내에서 클래스 로더는 자바 클래스 파일들을 메모리로 읽어들이는 역할을 함.
필요한 클래스 파일들을 로드하고, 메모리에 배치하며, 필요에 따라 링킹(클래스 검증 및 준비)을 수행.
실행 엔진은 로드 된 바이트 코드를 실제 기계어로 변환해 실행하는 역할을 함.
인터프리터(Interpreter)는 바이트 코드를 한 줄 씩 해석해 실행.
JIT(Just-In-Time) 컴파일러는 바이트 코드 전체를 기계어로 변환하여 실행 속도를 높임
JVM 내부적으로 해당 메서드가 얼마나 자주 수행되는지 체크하고 일정 정도를 넘을 때만 수행
GC는 더 이상 사용되지 않는 객체를 자동으로 메모리에서 제거하는 기능을 함
개발자가 명시적으로 메모리 해제를 하지 않아도 되므로 메모리 누수 문제를 크게 줄일 수 있음.
자바 애플리케이션이 실행되는 동안 JVM이 OS에서 할당 받아 사용하는 메모리 영역