배열과 메모리 구조

🧐 배열의 메모리 할당 과정

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)
students0x100 0x100[ 0, 0, 0, 0, 0 ]

🧐 배열 요소 값 변경과 메모리 변화

students[0] = 90;
students[1] = 20;
students[2] = 60;
students[3] = 30;
students[4] = 70;
  • 힙 메모리에 저장된 배열의 각 요소 값을 변경함.
스택(Stack) 힙(Heap)
students0x100 0x100[ 90, 20, 60, 30, 70 ]

💡 참고: students 변수 자체는 변하지 않으며, 여전히 0x100 주소를 참조 중!

즉, 참조형 변수는 값을 직접 저장하는 것이 아니라 메모리 주소를 저장 한다.


🧐 배열이 메모리를 어떻게 관리하는가?

  1. 배열은 힙(Heap) 메모리 에 저장되며, 자동으로 초기화됨.
  2. 배열을 담고 있는 변수(참조 변수)는 스택(Stack) 메모리 에 저장됨.
  3. 배열이 더 이상 참조되지 않으면, GC(Garbage Collector) 가 힙 메모리에서 자동 제거.

✅ 메모리 관련 주요 개념 요약

  • 스택(Stack): 메서드 실행 시 생성되는 지역 변수 및 참조 변수가 저장됨.
  • 힙(Heap): new 키워드를 통해 생성된 객체(배열 포함)가 저장되는 영역.
  • 참조 변수: 배열은 스택에 저장된 참조 변수를 통해 힙 메모리의 데이터를 접근함.
  • 가비지 컬렉션(GC): 더 이상 사용되지 않는 객체(배열 포함)는 자동으로 제거됨.