담비의 개발블로그

[CS] 자바 메모리 영역&데이터 저장 방식(스택, 힙) 본문

CS(컴퓨터과학)

[CS] 자바 메모리 영역&데이터 저장 방식(스택, 힙)

담비12 2025. 10. 21. 21:48
자바 메모리 영역과 데이터 저장 방식


자바 프로그램이 실행될 때, 운영체제로부터 할당받는 메모리 영역 중 변수 저장과 관련하여 주로 사용되는 영역은 스택(Stack)과 힙(Heap)이다.


1. 스택 영역 (Stack Area)
저장 대상: 주로 원시 타입 변수의 실제 값과 참조 타입 변수의 주소값이 저장된다.


◆ 특징
▶ 메서드가 호출될 때마다 독립적인 공간(스택 프레임)이 생성되며, 메서드 실행이 끝나면 자동적으로 반환된다.
데이터가 LIFO(Last In, First Out) 구조로 쌓이고 제거되므로 접근 속도가 매우 빠르다.
고정된 크기의 데이터가 저장된다.


원시 타입의 저장(값 자체 저장)
원시 타입 변수를 선언하고 값을 할당하면, 그 값 자체가 스택 영역에 바로 저장된다.

변수 메모리 위치(스택) 저장된 내용
int num = 10; num 10 (실제 값)

 

// b를 선언하면 스택에 새로운 공간이 생기고, a의 값인 10이 복사되어 저장된다.
int a = 10;
int b = a;

 

 

2. 힙 영역 (Heap Area)
저장 대상: 주로 참조 타입 변수가 가리키는 실제 객체(인스턴스) 데이터가 저장된다.

◆ 특징
객체가 생성될 때(보통 new 키워드를 사용) 동적으로 할당되며, 크기가 가변적이다.
더 이상 참조되지 않는 객체는 가비지 컬렉터(Garbage Collector)에 의해 자동으로 메모리가 정리된다.
상대적으로 스택 영역보다 느리게 접근된다.

참조 타입의 저장: 주소와 객체 분리 저장
참조 타입 변수를 선언하면 두 단계에 걸쳐 데이터가 저장된다.
1. 스택에 주소 저장: 참조 변수 자체는 힙 영역에 있는 객체의 주소(참조값)를 스택 영역에 저장한다.
2. 힙에 객체 저장: 실제 객체 데이터는 힙 영역에 생성되어 저장된다.

 

변수 메모리 위치(스택) 저장된 내용 힙 영역
String s = "Hello"; s 0x100 (힙 주소) [객체 데이터] "Hello" (0x100)

 

 

// s1이 스택에 저장되고, 힙에 생성된 객체의 주소(예 : 0x100)를 가진다.
String s1 = "Hello";

// s2가 스택에 생성되고, s1이 가지고 있던 주소 0x100을 복사해 저장한다.
// 결과적으로 s1과 s2 둘 다 힙 영역의 동일 "Hello" 객체를 참조하게 된다.
String s2 = s1;​