티스토리 뷰
자바의 JVM(Java Virtual Machine)에서 메모리 구조는 크게 3가지로 나뉜다. ( 메서드 영역, 힙 메모리, 스택 메모리 )
각각 의미와 어떤 데이터가 저장되는지, 또 이를 예제를 통해서 이해해보자.
■ 메서드 영역 : 프로그램 실행에 필요한 클래스 정보를 저장하는 공간
저장되는 것들)
- 클래스 정보 (클래스 이름, 접근제어자 등)
- 메서드 코드 (실제 메서드 구현 내용)
- static 변수들
- 상수 풀 (Constant Pool)
■ 힙 메모리 : new 키워드로 생성한 객체와 배열이 저장되는 공간
저장되는 것들)
- 객체의 인스턴스 변수들
- 배열 객체들
- 실제 객체 데이터
○ Garbage Collector(가비지 컬렉터) : 사용하지 않는 객체를 자동으로 찾아서 메모리를 회수해주는 기능;
→ 현재 실행 중인 스레드에서 도달 가능한 객체(참조가 있는 객체)만 남김.
→ 참조가 전혀 없는 객체를 힙에서 제거함.
■ 스택 메모리 : 메서드가 호출될 때마다 지역 변수와 매개변수를 저장
저장되는 것들)
- 지역 변수
- 메서드 호출 정보 (메서드 프레임)
- 매개변수
- 리턴 주소
이제 예제를 통해서 어떻게 메모리가 작동하는지 추가적으로 이해해보자!!
public class MyClass {
private int number = 10; // 인스턴스 변수
public void methodA() {
System.out.println("A 메서드 실행!");
}
public void methodB() {
int localVar = 5; // 지역 변수
methodA();
}
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.methodB();
}
}
● 메서드 영역
MyClass 클래스 정보
├── methodA() 코드 📝
├── methodB() 코드 📝
└── main() 코드 📝
● 힙 메모리
MyClass 객체 #1234 → new MyClass(); 부분!!
└── number: 10 💾
● 스택 메모리
Thread Main Stack:
├── main() 프레임
│ └── obj: #1234 (참조변수 obj의 힙 메모리 주소 !!)
├── methodB() 프레임
│ └── localVar: 5
└── methodA() 프레임
└── (실행 중...)
여기서 각 메모리의 공유 여부, 관리 방식도 따로 정리해야하지만, 일단 여기까지만 정리하겠다...
자바를 공부하다 보면 강제로 JVM이 어떤 것인지, 또 JVM은 어떤 메모리 구조를 가지고 있는지를 공부하게 된다 ( 조만간 또 수정하러 오겠지...🤩😇)
'Java' 카테고리의 다른 글
| 자바 - static키워드를 써야할까 Instance를 써야할까? (4) | 2025.08.14 |
|---|---|
| 자바 - 참조형 타입 확인 예제 (2) | 2025.08.12 |
| 자바 - 같은 클래스 내부에서 선언된 매서드끼리 호출하기 (1) | 2025.08.12 |
| 자바 - try-catch-finally 구문, switch 구문 간단한 예제 (3) | 2025.08.11 |
| 자바 - 형변환 예제 ( 참조형 ) (1) | 2025.08.10 |