자바에서 Stack 과 Heap
✅ 스택(Stack)과 힙(Heap)은 뭐고, 왜 나뉘는가?
- 자바 프로그램 실행 -> 필요한 데이터를 JVM 에 저장합니다.
- 이때 저장되는 데이터의 성격은 다름 -> JVM 은 크게 Stack 과 Heap으로 나눠서 메모리 관리합니다.
🧮스택(Stack)
📌 정의
- 메서드 호출 정보와 지역 변수를 저장하는 공간 → 스레드마다 하나씩 존재합니다.
public int add(int a, int b) { int sum = a + b; return sum; } - a, b, sum: 모두 지역 변수 → Stack에 저장
- add() 메서드 호출 정보 (파라미터, 복귀 주소 등) → Stack에 저장
⚙️ 작동 방식: LIFO
- 메서드가 호출될 때 → Stack에 쌓임 (Push)
- 메서드가 끝날 때 → Stack에서 제거됨 (Pop)
🧱힙(Heap)
📌 정의
- new 키워드로 생성한 객체(인스턴스)들이 저장되는 공간 → 모든 스레드가 공유합니다.
Person p = new Person(); - p: 지역 변수 (Stack에 저장)
- new Person() 객체 자체 → Heap에 저장
🧠 Stack vs Heap 비교 요약표
| 구분 | Stack | Heap |
|---|---|---|
| 소유 | 스레드마다 별도 | 모든 스레드 공유 |
| 저장 내용 | 지역 변수, 메서드 호출 정보 | 객체 인스턴스 |
| 생성 방식 | 자동 할당/해제 | new로 생성, GC로 해제 |
| 속도 | 빠름 | 느림 |
| 예외 | StackOverflowError | OutOfMemoryError |
'JAVA' 카테고리의 다른 글
| G1 GC vs CMS GC (2) | 2025.07.26 |
|---|---|
| GC(Garbage Collection) (2) | 2025.07.26 |
| 스레드와 멀티스레드 (0) | 2025.07.07 |
| JMM (0) | 2025.07.07 |
| JIT(Just-In-TIme) Complination (4) | 2025.07.07 |