JVM
- Category :
- java
JVM
JVM : Java Virtual Machine, 자바 가상 머신의 약자로 자바의 바이트 코드를 운영체제 언어로 변환해줌으로써 자바가 운영체제에 구애받지 않고 사용을 가능하게 해준다.
자바 프로그램 실행 과정
- 프로그램이 실행되면 JVM은 OS부터 메모리를 할당 받는다. JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
- 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환시킨다.
- 클래스 로더를 통해 class파일들을 JVM으로 로딩한다.
- 해석된 바이트 코드는 Runtime Data Areas에 배치되어 실질적인 수행이 이루어지게 된다.
이러한 실행 과정 속에서 JVM 은 필요에 따라 스레드 동기와 GC 같은 관리작업을 수행한다.
JVM 메모리 구조
-
JVM 메모리 구조
- Java Source : 사용자가 작성한 Java 코드
- Java Compiler : Java 코드를 Byte Code 로 변환시켜주는 기능
- Class Loader : Class 파일을 메모리(Runtime Data Area)에 적재하는 기능
- Execution Engine : Byte Code를 실행 가능하게 해석해주는 기능
- Runtime Data Area : 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간
-
Runtime Data Area
-
Class Area(Method Area)
- 클래스에 대한 정보를 저장
- 멤버 변수와 메서드, 클래스 타입 등의 정보를 저장
- Static 변수
- final class 변수의 경우 (상수로 치환되어) 상수 풀에 값 복사
-
Stack Area
- 메서드 호출 시 각각의 스택 프레임 생성
- 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장
- 메서드 수행이 끝나면 프레임별로 삭제
- 기본 자료형
-
Heap Area
- new 연산자로 생성된 객체와 배열을 저장하는 공간
- 클래스 영역에 로드된 클래스만 생성 가능
- 참조 자료형
- Garbage Collector를 통해 메모리 반환
-
Native method stack area
- 자바 외의 다른 언어에서 제공되는 메서드들이 저장되는 공간
-
PC Register
- Thread가 생성 될 때마다 생성되는 공간
- 현재 실행되는 부분의 명령과 주소를 저장
-