개요
JVM(Java Virtual Machine)은 자바 프로그램이 실행될 때 메모리를 관리하고 운영하는 가상의 머신이다.
JVM의 메모리 구조는 크게 5가지 영역으로 나뉜다.
- 메소드(Method) 영역
- 힙(Heap) 영역
- 스택(Stack) 영역
- PC 레지스터(PC Register)
- 네이티브 메소드 스택(Native Method Stack)
🎯 JVM 메모리 구조 흐름
- 클래스 로딩 – 메소드 영역에 클래스 정보 로드
- 객체 생성 – 힙 영역에 객체 생성 (new 연산자)
- 메소드 실행 – 스택에 메소드 호출 정보 저장
- PC 레지스터 – 현재 실행 중인 명령어 추적
- 네이티브 메소드 호출 – 네이티브 메소드 스택에서 처리
이 중 메소드, 힙, 스택 영역에 대해서 알아보자
메소드(Method) 영역
정적(Static) 메모리 영역으로 클래스와 관련된 정보를 저장
프로그램이 시작될 때 로드되며, JVM이 종료될 때까지 유지
[저장 내용]
- 클래스 메타데이터 (클래스, 인터페이스 정보)
- 정적 변수 (static 변수)
- 상수 풀 (Constant Pool)
- 메소드 및 생성자 정보
모든 스레드에서 공유되며, 메모리 누수가 발생할 경우 OutOfMemoryError: Metaspace가 발생
힙(Heap) 영역
객체를 저장하기 위한 영역이며, 스레드 간 공유된다.
- 동적 메모리 영역으로 객체와 배열 저장
- new 키워드로 생성된 객체는 힙에 할당
- GC(Garbage Collector)에 의해 관리
메모리가 부족하면 OutOfMemoryError: Java Heap Space가 발생
스택(Stack) 영역
메소드 호출 시마다 생성되며, 지역 변수와 메소드 호출 정보(프레임)가 저장
메소드 실행이 끝나면 프레임이 제거
[저장 내용]
- 메소드 호출 스택
- 지역 변수, 매개변수
- 리턴 주소
스레드마다 별도로 존재하며, 메모리 부족 시 StackOverflowError가 발생
728x90
'웹(WEB) > 자바(Java)' 카테고리의 다른 글
[Java] 자바 메서드 (0) | 2024.12.28 |
---|---|
[Java] 자바 변수의 선언 위치에 따른 분류 (0) | 2024.12.28 |
[Java] 자바 배열 (0) | 2024.12.27 |
[Java] 자바 반복문 for, while, do while (0) | 2024.12.27 |
[Java] 자바 조건문 if, switch (2) | 2024.12.27 |