기본 이해
- 개념 정의
- 스택: LIFO(Last In First Out) 구조의 메모리 영역으로, 정적 메모리 할당에 사용
- 힙: 동적 메모리 할당을 위한 자유로운 영역으로, 크기가 불규칙한 데이터 저장
- 일상생활 비유
- 스택: 접시 쌓기 (마지막에 쌓은 접시를 먼저 사용)
- 힙: 도서관 책장 (필요한 공간에 자유롭게 책을 배치)
- 작동 방식
- 스택: 함수 호출과 지역변수 저장, 컴파일 시점에 크기 결정
- 힙: 런타임에 동적으로 메모리 할당/해제
핵심 구성요소
스택:
- 프레임: 함수 호출마다 생성되는 독립적 영역
- 포인터: 현재 실행 위치 추적
- 지역변수 저장소
힙:
- 가용 메모리 풀
- 메모리 블록
- 메모리 관리자
존재 이유와 목적
- 메모리 효율적 관리
- 빠른 액세스 속도 (스택)
- 유연한 메모리 할당 (힙)
- 스코프와 생명주기 관리
주의사항과 일반적 오류
- 스택 오버플로우
- 메모리 누수
- 댕글링 포인터
- 힙 단편화
비교 분석
스택 vs 힙:
특성 | 스택 | 힙 |
---|---|---|
속도 | 빠름 | 느림 |
크기 | 제한적 | 큰 용량 |
할당 | 자동 | 수동 |
관리 | LIFO | 자유로움 |
접근 | 순차적 | 랜덤 |
실무 활용
public class MemoryExample {
public static void main(String[] args) {
// 스택 사용
int x = 5; // 스택에 저장
// 힙 사용
String str = new String("Hello"); // 힙에 저장
// 객체 생성
Person person = new Person("John"); // 참조는 스택, 객체는 힙
}
}
이전 개념:
- 메모리 구조
- 변수와 데이터 타입
후속 개념:
- 가비지 컬렉션
- 메모리 관리 전략
- 동시성 프로그래밍
Best Practices:
- 큰 객체는 힙에 할당
- 작고 임시적인 데이터는 스택 활용
- 적절한 스코프 관리
- 명시적 메모리 해제 (필요한 경우)
'Java > 자바 학습' 카테고리의 다른 글
2. 메모리 - 3. 가비지 컬렉션 기본 (0) | 2025.05.14 |
---|---|
2. 메모리 - 2. 메서드 영역(Method Area) (0) | 2025.05.12 |
1. 자바 플랫폼 - 3. 바이트코드의 개념 (0) | 2025.05.12 |
1. 자바 플랫폼 - 2. 자바의 컴파일과 실행 과정 (0) | 2025.05.12 |
1. 자바 플랫폼 - 1. JDK, JRE, JVM의 차이 (0) | 2025.05.12 |