1. JVM 메모리 구조
JVM 메모리 구조는 크게 3가지 영역으로 나뉜다.
- Method Area
- Stack Area
- Heap Area
각 영역은 서로 다른 역할을 담당한다.
1) Method Area
Method Area는:
"자바 파일들의 정보가 저장되는 공간"
이라고 이해할 수 있다.
쉽게 비유하면:
책들이 꽂혀 있는 책장
같은 느낌이다.
이 영역에는:
- 클래스 정보
- 메서드 정보
- static 데이터
등이 저장된다.
즉, 작성한 자바 파일들의 정보가 JVM 안에 올라가는 공간이라고 볼 수 있다.
2) Stack Area
Stack Area는 메서드 실행 정보를 저장하는 공간이다.
쉽게 말하면:
"실행 중인 작업들이 순서대로 쌓이는 공간"
이다.
비유하자면:
접시를 차곡차곡 쌓아두는 구조
와 비슷하다.
Stack 특징
메서드가 실행되면 Stack에 쌓인다.
main()
└─ sum()
└─ print()
이런 느낌으로 실행 순서대로 쌓인다.
그리고 메서드 실행이 끝나면:
가장 위에 있는 것부터 제거된다.
즉:
- 먼저 들어온 것이 나중에 빠지는 구조
- 후입선출(LIFO)
방식이라고 이해할 수 있다.
3) Heap Area
Heap Area는 객체(Object)가 저장되는 공간이다.
Heap 특징
new 키워드로 생성한 객체들이 Heap 영역에 저장된다.
예시:
Person person = new Person();
여기서 생성된 Person 객체는 Heap 영역에 저장된다.
쉽게 비유하면:
부풀어 오르는 풍선
같은 느낌이다.
객체마다 크기가 다르기 때문에 Heap 영역도 상황에 따라 계속 사용된다.
JVM 메모리 흐름 이해하기
정리하면:
Method Area
→ 클래스 정보 저장
Stack Area
→ 메서드 실행 흐름 저장
Heap Area
→ 객체 저장
이라는 역할을 가진다.
코드 흐름 관점에서 보기
자바 프로그램이 실행되면:
- 클래스 정보가 Method Area에 올라간다
- main 메서드가 Stack Area에 쌓인다
- new로 생성된 객체는 Heap Area에 저장된다
- 메서드 실행이 끝나면 Stack에서 제거된다
이런 흐름으로 동작한다고 이해할 수 있다.
Frames 와 Object
자바 실행 시각화 자료를 보면:
- Frames → Stack 영역
- Object → Heap 영역
으로 표현되는 경우가 많다.
Java 코드 실행 시각화 도구
자바 메모리 흐름은 눈으로 보면 이해가 훨씬 잘 되는 것 같다.
특히 아래 사이트가 유명하다고 한다.
코드를 실행하면:
- Stack
- Heap
- 객체 생성 흐름
등을 시각적으로 볼 수 있다.
가비지 컬렉터(Garbage Collector)
자바에는 사용하지 않는 객체를 자동으로 정리해주는 기능도 존재한다.
이를:
Garbage Collector (GC)
라고 부른다.
예를 들어 더 이상 사용하지 않는 객체가 있으면:
- 자동으로 제거하고
- 메모리를 정리해준다.
덕분에 메모리 낭비를 줄일 수 있다.
오늘 배운 점
처음에는 JVM 메모리 구조가 굉장히 어렵게 느껴졌는데,
각 영역을 역할별 공간이라고 생각하니까 조금 이해되기 시작했다.
특히:
- Method Area → 클래스 정보
- Stack Area → 실행 흐름
- Heap Area → 객체 저장
이라는 흐름이 중요하다는 걸 알게 되었다 😊
'Java' 카테고리의 다른 글
| JAVA 기초 정리 - static과 인스턴스 멤버란? (0) | 2026.06.05 |
|---|---|
| JAVA 기초 정리 - 래퍼 클래스(Wrapper Class) (0) | 2026.05.21 |
| JAVA 기초 정리 - 클래스(Class)와 객체(Object) (0) | 2026.05.19 |
| JAVA 기초 정리 - 메서드(Method) (0) | 2026.05.18 |
| JAVA 기초 정리 - 배열(Array) (0) | 2026.05.15 |