본문 바로가기
BackEnd/Java

[Java] 자바 가상 머신(JVM, Java Virtual Machine) 이란?

by 뽀뽀이v 2020. 9. 8.

JVM은 사전적 의미로 자바 바이트코드를 실행할 수 있는 주체다. JVM의 장점으로는 각 플랫폼에 독립적이다.

JDK를 설치하기 위해서 OS에 맞는 파일을 찾아서 설치하는 것만으로도 알 수 있다.

그렇다면 JDK에 JVM이 포함되어 있나? 그렇다.

 

JDK = JRE + Development Tools
JRE = JVM + Library Classes

 

사실 JVM을 면접에서 또는 누군가 물어봤다면 다음 그림의 Runtime Data Areas의 역할을 제대로 알고 있는지가 궁금한 거라고 생각된다.

JVM 아키텍처

  • 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", "대형"); 은 어떻게 될까?

그것은 다음 가비지 컬렉션 시간 때 알아보자.

댓글