☕ Java Heap과 Stack 메모리 구조 완벽 정리
변수를 선언하면 메모리에 어디에 저장될까?
JVM 메모리 구조를 Stack vs Heap 관점에서 쉽고 명확하게 설명합니다.
🔍 Stack과 Heap 메모리 구조: 한눈에 비교
구분 | Stack | Heap |
---|---|---|
저장 대상 | 기본 타입, 참조 변수 | 객체, 배열, new로 생성된 데이터 |
저장 위치 | 메서드 실행 시 자동 할당 | JVM이 관리하는 동적 메모리 |
생명 주기 | 메서드 종료 시 자동 소멸 | GC에 의해 수명 관리 |
접근 속도 | 매우 빠름 | 느림 |
대표 키워드 | 지역 변수, 참조 주소 | new, 인스턴스, 동적 생성 |
✨ Stack 메모리란? - 빠르고 일시적인 공간
void hello() {
int age = 7; // Stack에 직접 저장
String name = "홍길동"; // name은 참조만 Stack에 저장
}
✔️ 기본형 변수는 Stack에 직접 저장되고, 문자열 같은 객체는 Heap에 저장되며 참조만 Stack에 있음.
🌐 Heap 메모리란? - 객체가 저장되는 공간
class Person {
String name;
}
void create() {
Person p = new Person(); // 'p'는 Stack, 객체는 Heap
p.name = "홍길동"; // Heap 내 필드에 값 저장
}
⚠️ Heap 메모리는 너무 많이 사용하면 OutOfMemory 오류가 발생할 수 있어요.
🧠 Stack과 Heap 메모리의 연결 구조
Stack은 "이거 어디 있어?"라고 주소만 들고 있고,
Heap은 진짜 "내용물"이 담겨 있는 구조예요.
[Stack]
int age = 7 -------------------→ 직접 저장
String name = (참조) ----------→ "홍길동" (Heap)
Person p = (참조) -------------→ new Person() (Heap)
[Heap]
"홍길동" (String 객체)
Person 객체 (name="홍길동")
📌 Stack vs Heap 차이를 언제 활용할까?
- 디버깅: 참조 에러, 메모리 누수 추적 가능
- 성능 최적화: 불필요한 객체 생성을 줄여 Heap 사용 최소화
- 객체 생명 주기: 소멸 시점 예측 가능
✏️ 자바 메모리 구조 요약 정리
Stack | Heap |
---|---|
메서드 실행 중 잠깐 사용됨 | 객체가 생성되어 오래 유지됨 |
기본 타입, 참조 변수 저장 | new로 생성한 인스턴스 저장 |
자동 소멸 | GC가 회수 |
0 댓글