🧐 배열의 메모리 할당 과정
Java에서 배열을 선언하고 사용할 때, 메모리에서는 다음과 같은 과정이 발생합니다.
1️⃣ 배열 변수 선언 (스택 메모리)
int[] students;
students
라는 배열 참조 변수(Reference Variable) 가 스택(Stack) 에 생성됨.- 아직 배열 객체가 생성된 것이 아니며,
students
변수는 배열을 가리킬 준비만 된 상태.
2️⃣ 배열 객체 생성 (힙 메모리)
students = new int[5];
new int[5]
를 실행하면 힙(Heap) 메모리 에 크기가 5인int
배열 객체가 생성됨.- 힙 메모리에 할당된 배열의 각 요소는 int 타입의 기본값
0
으로 초기화됨. students
변수는 힙에 생성된 배열의 주소(reference) 를 저장하여 참조함.
📌 메모리 구조 예시
(예를 들어, students
의 메모리 주소가 0x100
이라고 가정)
스택(Stack) | 힙(Heap) |
---|---|
students → 0x100 |
0x100 → [ 0, 0, 0, 0, 0 ] |
🧐 배열 요소 값 변경과 메모리 변화
students[0] = 90;
students[1] = 20;
students[2] = 60;
students[3] = 30;
students[4] = 70;
- 힙 메모리에 저장된 배열의 각 요소 값을 변경함.
스택(Stack) | 힙(Heap) |
---|---|
students → 0x100 |
0x100 → [ 90, 20, 60, 30, 70 ] |
💡 참고: students 변수 자체는 변하지 않으며, 여전히 0x100 주소를 참조 중!
즉, 참조형 변수는 값을 직접 저장하는 것이 아니라 메모리 주소를 저장 한다.
🧐 배열이 메모리를 어떻게 관리하는가?
- 배열은 힙(Heap) 메모리 에 저장되며, 자동으로 초기화됨.
- 배열을 담고 있는 변수(참조 변수)는 스택(Stack) 메모리 에 저장됨.
- 배열이 더 이상 참조되지 않으면, GC(Garbage Collector) 가 힙 메모리에서 자동 제거.
✅ 메모리 관련 주요 개념 요약
- 스택(Stack): 메서드 실행 시 생성되는 지역 변수 및 참조 변수가 저장됨.
- 힙(Heap):
new
키워드를 통해 생성된 객체(배열 포함)가 저장되는 영역. - 참조 변수: 배열은 스택에 저장된 참조 변수를 통해 힙 메모리의 데이터를 접근함.
- 가비지 컬렉션(GC): 더 이상 사용되지 않는 객체(배열 포함)는 자동으로 제거됨.