JVM은 Java Virtual Machine의 약자로 직역해 자바 가상 머신이라고도 부른다. JVM은 Java 애플리케이션과 운영체제 사이의 중개 역할을 하여 Java 애플리케이션이 운영체제에 대한 종속, 제약 없이 실행될 수 있도록 해주는 일종의 가상 컴퓨터다.
JVM의 구성
자연어로 작성된 원시코드를 기계어로 변환해주는 걸 컴파일이라고 하는데 자바 소스 코드(.java)의 경우 컴파일 과정을 거친다고 해서 바로 기계어로 변환되는 게 아니라 Java Compiler에 의해 JVM이 읽어 들일 수 있는 자바 바이트 코드(.class)로 변환된다. 바이트 코드는 기계어는 아니지만 가상 머신에 의해 손쉽게 기계어로 변환될 수 있는 중간 언어다.
✔ 클래스 로더 Class Loader
JVM에 자바 바이트 코드, 즉 클래스 파일(.class)을 로드하고 링크하여 배치한다.
✔ 실행 엔진 Execution Engine
클래스 파일을 실행한다. 자바 바이트 코드를 JVM에서 실행할 수 있는 형태로 변경한다.
- 인터프리터 Interpreter
자바 바이트 코드를 명령어 단위로 한 줄씩 읽어서 컴파일 과정 없이 바로 실행한다. 수행 속도가 느리다는 단점이 있다.
- JIT 컴파일러 Just-In-Time Compiler
인터프리터의 단점을 보완하기 위해 도입된 것이 JIT 컴파일러다. JIT 컴파일을 동적 번역(Dynamic Translation)이라고도 한다. 이름에서 유추할 수 있듯 JIT 컴파일러는 코드 실행 시점에 실시간으로, 동적으로, 바이트 코드를 컴파일하여 기계어로 빠르게 변환한다. 한 번 컴파일된 코드는 캐싱되어 재사용될 수 있다. 수행 속도가 빠르고 재사용이 가능하다는 이점이 있지만 컴파일 과정에 비용이 들기 때문에 한 번만 수행할 코드라면 컴파일하지 않고 인터프리팅하는 것이 더 좋다. JVM은 인터프리터와 JIT 컴파일러를 혼합하여 사용한다.
- 가비지 컬렉터 Garbage Collector
가비지 컬렉션과 가비지 컬렉터에 대한 상세한 내용은 아래 포스팅 참고.
Java 가비지 컬렉션(Garbage Collection, GC), 가비지 컬렉터
가비지 컬렉션 Garbage Collection이란? 프로그램을 실행하면 Heap 영역에 메모리를 동적으로 할당받은 객체들이 생겨난다. JVM의 런타임 데이터 영역 Runtime Data Area은 총 다섯 개로 나뉘는데 그중 Method
min-ism.tistory.com
✔ 런타임 데이터 영역 Runtime Data Area
Runtime Data Area는 JVM이 프로그램 실행을 위해 운영체제로부터 할당받은 메모리 공간이다.
- PC Register
스레드가 실행될 때 생성되며 스레드마다 하나씩 존재한다. 현재 수행 중인 JVM Instruction(바이트 코드 컴파일의 결과 생겨난 명령어)의 주소를 가진다. 스레드가 어떤 명령을 실행할지 기록하는 부분이라고 할 수 있다.
- JVM Stack
메서드 호출 시 메서드와 메서드의 매개변수, 지역변수, 리턴 주소, 임시 변수 등이 저장되는 공간이다. 각 스레드 별로 생성되기 때문에 다른 스레드의 스택 정보에 접근하는 것은 불가하며 메서드 호출이 끝나면 스택에서 정보가 제거된다.
- Native Method Stack
자바 외의 언어로 작성된 네이티브 코드를 위한 공간이다. Java Native Interface를 통해 호출되는 C 언어 등을 바이트 코드로 변환하여 저장한다.
- Method Area
모든 스레드가 공유하는 메모리 영역으로 클래스, 인터페이스, 메서드, 필드, 정적 변수 등의 바이트 코드가 저장된다. Method Area 내부의 Runtime Constant Pool은 상수 자료형을 저장하고 참조하여 중복을 막는 역할을 수행한다.
- Heap
런타임 시점에 동적으로 할당되는 공간이다. new 연산자를 사용해 생성된 객체를 저장한다. 그 외 JVM의 Heap 영역에 대한 상세한 내용도 위의 가비지 컬렉션 포스팅을 참고하면 좋을 것 같다.
- References
[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...)
JVM이란 무엇인가 Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되
doozi0316.tistory.com
[JAVA] JVM(Java Virtual Machine)이란?
JVM(Java Virtual Machine)이란? JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. JVM은 OS와 Java 애플리케이션 사이의 중개자 역할을 한다. JVM은 자바 바이트코드를 실행할
code-lab1.tistory.com
JIT 컴파일 - 위키백과, 우리 모두의 백과사전
JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다. 전통적인 입장에서 컴퓨터 프로그램을 만드는 방법은 두
ko.m.wikipedia.org