BackEnd/Java
[Java] 자바 가상 머신(JVM, Java Virtual Machine) 이란?
뽀뽀이v
2020. 9. 8. 18:51
JVM은 사전적 의미로 자바 바이트코드를 실행할 수 있는 주체다. JVM의 장점으로는 각 플랫폼에 독립적이다.
JDK를 설치하기 위해서 OS에 맞는 파일을 찾아서 설치하는 것만으로도 알 수 있다.
그렇다면 JDK에 JVM이 포함되어 있나? 그렇다.
JDK = JRE + Development Tools
JRE = JVM + Library Classes
사실 JVM을 면접에서 또는 누군가 물어봤다면 다음 그림의 Runtime Data Areas의 역할을 제대로 알고 있는지가 궁금한 거라고 생각된다.

- Method Area : JVM 시작 시 생기는 영역으로 바이트코드가 저장된다. 클래스 정보, 변수 정보, static으로 선언한 변수가 저장되며 모든 스레드가 공유하는 영역이다.
- Heap : 동적으로 생성된 객체가 저장되는 영역으로 GC의 대상이 되는 영역이다.
- Stack : 지역변수, 메서드의 매개변수, 임시적으로 사용되는 변수, 메서드의 정보가 저장되는 영역이다.
- PC Register : 스레드 구동 시 생성되며, JVM의 명령어 주소가 저장되는 영역이다. 스레드가 어떻게 수행할지를 저장하는 영역이라고 생각하면 된다.
- Native Method Stack : Java가 아닌 다른 언어로 작성된 코드를 위한 영역이다.
// new Car("BMW", "대형"); => Heap영역
// Car c => Stack영역 (Heap영역에 할당된 객체의 Address값이 저장된다고 보면 된다.)
Car c = new Car("BMW", "대형");
Heap 부분은 new 연산자로 생성한 객체들이라고 생각하시면 편할 것 같다.
c = null;
위에 같은 코드를 실행한다면 Heap영역에 있는 new Car("BMW", "대형"); 은 어떻게 될까?
그것은 다음 가비지 컬렉션 시간 때 알아보자.