JVM - 자바 가상 머신
- JDK를 설치하면 jre, 컴파일러가 설치
- jre - 자바 런타임 환경, 라이브러리들과 JVM을 들고 있음
- 컴파일러(javac) - 하드에 저장된 java파일을 컴파일 하기 위해 메모리에 올림. 로드된 java파일을 컴파일러가 class파일로 변환하여 하드에 저장하게 된다. class 파일을 JVM이 해석이 가능하다.
- 기본적인 시스템 구조
- H/W - OS - APP
- JVM 이 추가된 구조
- H/W - OS -JVM -APP 구조가 생성
- RAM의 어느 영역을 논리적으로 쪼개서 JVM에게 할당
- JVM
- class 파일 로드 - static 찾기 - main 실행 - main의 queue가 생성됨
구조
- 메소드 영역(Method Area)
- 정의: 클래스 수준의 메타데이터를 저장하는 영역
- 내용: 클래스 정보(메서드, 필드), 인터페이스, 상수, 정적 변수, 메서드 코드 등.
- 역할: JVM이 시작될 때 생성되며, 모든 쓰레드가 공유
- 힙 영역(Heap Area)
- 정의: 객체와 배열이 동적으로 할당되는 영역
- 내용: 모든 객체와 배열.
- 역할: GC(가비지 컬렉션)가 관리하며, 모든 쓰레드가 공유. 메모리 할당 및 해제
- 스택 영역(Stack Area)
- 정의: 각 쓰레드가 자신만의 스택을 가지며, 메서드 호출 시 프레임이 생성
- 내용: 지역 변수, 메서드 호출, 매개 변수, 반환 값 등.
- 역할: 메서드 실행의 상태를 관리하며, 프레임은 LIFO(Last In, First Out) 방식으로 관리
- LIFO(Last In, First Out) : 스택에 마지막으로 입력된 자료가 제일 먼저 삭제 하는 방식
- PC 레지스터(Program Counter Register)
- 정의: 각 쓰레드마다 존재하며, 현재 실행 중인 JVM 명령의 주소를 가리킴
- 역할: JVM이 현재 실행할 명령을 추적.
예제
public class JvmTest {
int num1 = 1;
static int num2 = 2;
void method1(int num3){
System.out.println("num3 : "+num3);
int num4 = 4;
System.out.println("num4 : "+num4);
}
public static void main(String[] args) {
System.out.println("JVM Start");
System.out.println("num2 : "+JvmTest.num2);
JvmTest jt = new JvmTest();
System.out.println("num1 : "+jt.num1);
jt.method1(3);
}
}
코드 설명
- Method Area
- 클래스 로드 시 JvmTest 클래스의 메타데이터가 저장
- static 변수 num2 와 method 메서드 정의가 저장
- Heap Area
- new JvmTest()로 생성된 객체 jt가 힙 영역에 저장
- 객체 jt의 인스턴수 변수 num1이 저장
- Stack Area
- 메인 메서드의 호출 프레임이 스택 영역에 생성
- 메인 메서드 내에서 jt 변수는 힙 영역의 JvmTest 객체를 참조
- method1 메서드 호출 시 새로운 스택 프레임이 생성
- method1 메서드의 매개 변수 num3와 지역 변수 num4가 스택 프레임에 저장
흐름
클래스 로딩 단계
Method Area
- JvmTest 클래스가 로드되면 Method Area에 클래스 구조 정보와 정적 변수 num2가 저장
- 정적 메서드와 인스턴스 메서드도 이 영역에 저장
main 메서드 실행 단계
Stack Area
- JVM은 main 메서드를 호출하여 main 스택 프레임을 생성
- 이 스택 프레임에는 args 변수가 저장
PC Register
- 현재 실행 중인 명령어를 추적
JvmTest jt = new JvmTest()
Heap Area
- new JvmTest()로 생성된 객체가 힙 영역에 저장
- num1 인스턴스 변수가 초기화되어 저장
Stack Area
- jt 참조 변수가 스택 프레임에 추가되고, 힙 영역의 객체를 참조
jt.method1(3)
Stack Area
- method1 메서드의 스택 프레임이 생성됩니다.
- 매개 변수 num3와 지역 변수 num4 가 저장됩니다.
예제의 메모리 구조를 그림으로 변환

Share article