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", "대형"); 은 어떻게 될까?
그것은 다음 가비지 컬렉션 시간 때 알아보자.
'BackEnd > Java' 카테고리의 다른 글
[Java] 더 자바, Java 8 이야기 1부 - 함수형 인터페이스 & 람다 (0) | 2020.09.20 |
---|---|
[Java] 컬렉션 프레임워크(collection framework) 이야기 2부 - Set (0) | 2020.09.18 |
[Java] 컬렉션 프레임워크(collection framework) 이야기 1부 - List (0) | 2020.09.17 |
[Java] JUnit5 애플리케이션을 테스트하는 다양한 방법 이야기 1부 - Assertion (0) | 2020.09.15 |
[Java] 가비지 컬렉션(GC, Garbage Collection) 이란? (0) | 2020.09.10 |
댓글