Java, 배열의 메모리 구조

Soobin Kim·2024년 3월 26일

Java

목록 보기
8/47

new 키워드는 배열의 크기에 따라 힙 위치에서 메모리를 할당한다.

1차원 배열

int[] arr = new int[3];

출처: https://www.testinglpoint.com/array-in-java-contd/

  • 요약하자면, 배열 참조는 스택 메모리 위치에 저장되고 배열 요소는 힙 내부에 저장된다.
  • 배열의 주소(Heap 영역의 주소)가 스택 영역에 저장된다. 이때 저장되는 주소 값은 첫 번째 요소의 주소, 즉 1차원 배열의 시작 주소다.
  • 요소의 실제 값은 Heap 영역에 저장된다.
  • 따라서 배열 요소에 접근하기 위해서는 참조변수와 함께 인덱스 값을 사용해야 한다!
arr[1];

다차원 배열

int arr[ ][ ] = new int[3][4];

출처: https://www.testinglpoint.com/array-in-java-contd/

  • 다차원 배열 역시, 배열 참조는 스택 메모리 위치에 저장되고 배열 요소는 힙 내부에 저장된다.

  • 스택 메모리에 저장된 값은 힙 내부의 이차원 배열의 주소값이다.

  • 각 행 인덱스에 접근하면, 행의 첫 번째 요소 참조 값이 출력된다.

    arr[0] // [I@5594a1b5
    arr[1] // [I@6a5fc7f7
    arr[2] // [I@3b6eb2ec
  • 정리: 스택에 저장된 것은 이차원 배열의 참조이며, 힙 영역 내부로 들어가 참조를 따라가면 이차원 배열의 행 주소를 찾을 수 있다. 각 주소는 각 행의 첫 번째 요소의 주소값, 즉 시작 주소이므로 각 행 정보와 인덱스 번호를 통해 각 요소에 접근할 수 있다(ex: arr[0][1]).

0개의 댓글