-
자바 JVM(Java Virtual Machine) 메모리 구조Programming Language/- Java 2022. 6. 1. 20:12
JVM(Java Virtual Machine) 이란?
JVM은 컴파일된 자바의 바이트코드(. class)들을 OS에서 실행하기 위한 표준 스펙이며 다양한 구현체가 존재한다.
Java 언어 자체는 JVM에서 동작하기 때문에 OS 독립적이지만
JVM은 각 OS에 종속적(윈도우용 JVM, 리눅스용 JVM 등)이다.
자바 프로그램 레이어 (출처 : http://www.tcpschool.com/java/java_intro_programming) JVM은 크게 아래와 같이 분류할 수 있다.
- Class Loader
- JVM Memory(Run-time Data Areas)
- Execution Engine
JVM 구조 (출처 : https://en.wikipedia.org/wiki/Java_virtual_machine)
오늘은 JVM의 메모리에 대해서 알아본다.
JVM Memory (Run-time Data Areas)
JVM의 메모리는 위 그림에서와 같이
- Method Area
- Heap
- JVM Language Stacks
- PC Registers
- Native Method Stacks
로 구성되어 있다.
JVM 메모리는 크게
- JVM의 실행과 동시에 생성되고 종료되면 삭제되는 메모리 영역
- Method Area
- Heap
- 스레드의 생성과 삭제에 따라 생성되고 삭제되는 메모리 영역
- PC Register
- JVM Language Stacks
- Native Method Stacks
2가지가 있다.
JVM 메모리 (출처 : https://dzone.com/articles/jvm-run-time-data-areas) 각 메모리 영역에 대해 알아보자.
Method Area (Class Area, Static Area)
데이터 할당
- Class 요소들
- 필드
- 메서드 데이터
- 메서드와 생성자를 위한 코드
- static 변수
- final 변수
- Runtime Constant Pool(상수) 등
특징
- 모든 스레드에서 정보 공유
Heap
데이터 할당
- 실행 중 생성된 객체들
- new 로 생성된 객체
- Array와 같이 동적으로 생성된 데이터
- Reference Type의 데이터 등
특징
- Garbage Collector 가 제거하지 않는 한 데이터 유지
- 모든 스레드에서 정보 공유
JVM Language Stacks (Java Stack)
데이터 할당
- 지역변수
- Primary Type : 값을 저장
- Reference Type : Heap에 저장된 데이터의 주소값을 Stack에 저장해서 사용
- 메서드 호출 및 반환(stack frame)
- 호출되는 메서드의 매개변수, 지역변수
특징
- 스레드마다 개별 JVM Language Stack을 가지고 있음
- 스레드와 동시에 생성됨
PC(Program Counter) Register
특징
- 어느 시점에서도 스레드는 단일 메서드를 실행
- 스레드가 생성되면서 생기는 메모리 영역
- 스레드가 어느 명령어를 처리하고 있는지 그 주소를 등록
- JVM이 실행하고 있는 현재 위치를 저장하는 역할
- 스레드마다 개별 PC Register를 가지고 있음
Native Method Stacks
특징
- Java가 아닌 다른 언어(C, C++)로 구성된 메서드를 실행할 때 사용되는 영역
- 스레드마다 개별 Native Method Stack을 가지고 있음
참조
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5
반응형