코딩 이래요래
JVM의 메모리 구조 본문
✅ JVM (Java Virtual Machine)
JVM이란?
- Java 프로그램을 실행하는 가상 기계로, Java 바이트 코드를 실제 기계어로 변환하여 실행함.
- 플랫폼 독립적인 Java 바이트 코드를 플랫폼에 맞는 코드로 해석하여 실행하는 Interpreter 역할을 수행함.
- JVM 자체는 플랫폼에 의존적이다.
- JVM은 JDK 내부에 포함되어 있으므로, 각 OS에 맞는 JVM을 설치해야 한다.
✅ JVM 메모리 구조
JVM 메모리는 다음 세 가지 주요 영역으로 구분됨:
📌 1) Method Area (Static Area)
- JVM이 클래스 로딩 시 클래스 정보, 메소드 정보, 상수, static 변수 등을 저장하는 영역.
- 클래스가 처음 사용될 때 한 번만 로드되며, 모든 스레드가 공유함.
- JVM이 종료될 때까지 유지됨.
📌 2) Heap Area
- 객체가 저장되는 영역이며, Java의 모든 객체는 Heap 영역에 저장됨.
- 객체는 new 연산자로 생성될 때 힙에 저장되고, 더 이상 참조되지 않으면 **Garbage Collector(GC)**가 메모리를 회수함.
📌 3) Stack Area
- 메소드 호출 시 생성된 스택 프레임(stack frame)을 저장함.
- 지역 변수, 파라미터, 메소드 호출 시의 임시 데이터 등이 저장됨.
- 메소드가 종료되면 해당 메소드의 스택 프레임은 제거됨.
✅ 객체 생성과 메모리 할당 과정 예시
예시 코드:
class Test {
String a;
int b;
}
class Application {
public static void main(String[] args) {
Test t = new Test();
t.a = "A";
t.b = 13;
}
}
🔸 1) 클래스 로딩 및 Method Area 저장
- JVM이 처음 프로그램을 실행하면, 클래스 로더가 클래스(Test, Application)를 읽어 Method Area에 클래스 정보를 저장함.
- 아직 객체 생성 전 단계임.
🔸 2) main() 메소드 실행 및 Stack Area 저장
- main() 메소드가 호출되면 Stack 영역에 메소드의 스택 프레임이 생성됨.
- 지역 변수 t는 스택 프레임에 저장되며, 초기값은 null임.
🔸 3) 객체 생성 및 Heap Area 저장
- new Test() 연산자가 실행되면 Heap 영역에 객체가 생성됨.
- 각 필드는 기본값으로 초기화됨.
- String a = null, int b = 0
- 객체의 참조 주소가 변수 t에 저장됨. (t는 Stack 영역에 위치함)
🔸 4) 필드 초기화
t.a = "A";
t.b = 13;
- Stack 영역의 참조 변수 t가 Heap 영역의 객체를 참조하여 값을 변경함.
- 데이터 값("A", 13)은 Heap 영역의 객체 내부에 저장됨.
🔸 5) 메소드 종료 및 객체 소멸
- main() 메소드가 종료되면 Stack 영역의 스택 프레임이 제거됨. 따라서 변수 t도 사라짐.
- 하지만 Heap 영역의 객체는 참조가 사라졌을 뿐 즉시 소멸되지 않음.
- 객체가 더 이상 참조되지 않을 때, JVM의 GC(Garbage Collector)가 자동으로 판단하여 객체를 제거함.
해당 게시글은 학습한 내용을 정리하고 복습하며 정리한 글이므로 틀린 부분이 있을 수 있음.
'JAVA' 카테고리의 다른 글
자료구조 (0) | 2025.04.13 |
---|---|
SOLID 원칙 (0) | 2025.04.07 |
객체지향 프로그래밍(OOP)의 4가지 (0) | 2025.04.01 |
Java의 클래스와 객체 (0) | 2025.03.31 |
객체지향 프로그래밍 (0) | 2025.03.31 |