Header Ads Widget 배너영역

Responsive Advertisement

[Java] Java Heap과 Stack 메모리 차이 완벽 정리 | 자바 메모리 구조

Java Heap과 Stack 메모리 차이 완벽 정리 | 자바 메모리 구조 Java Heap과 Stack 메모리 차이 완벽 정리 | 자바 메모리 구조

☕ 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 사용 최소화
  • 객체 생명 주기: 소멸 시점 예측 가능

✏️ 자바 메모리 구조 요약 정리

StackHeap
메서드 실행 중 잠깐 사용됨객체가 생성되어 오래 유지됨
기본 타입, 참조 변수 저장new로 생성한 인스턴스 저장
자동 소멸GC가 회수





댓글 쓰기

0 댓글