밍 석
밍석의 devlog
밍 석
  • 분류 전체보기 (58)
    • 글쓰기(=writing) (8)
      • 어떤 개발자가 되고 싶은가? (1)
      • 깊이 학습 한다는 것은? (1)
      • 23년 생각 정리 + (회고) (1)
    • TIL (=Today I Learned) (0)
    • 프로젝트(project) (2)
      • ERD 설계 느낀 점 (1)
      • AWS 배포 느낀 점 (1)
    • aws (8)
    • Java (28)
    • Spring (0)
    • Linux (1)
    • git (3)
    • ETC (4)
      • h2 DB 설치 (0)
      • 우아한 테크코스 (백엔드) (4)
      • IntelliJ IDEA (0)
    • project 환경 세팅 (0)
    • Dev Book Review (0)
      • git 레포로 관리 -> 링크 (0)
    • 기록하고 싶은 글 (2)
전체 방문자
오늘
어제

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
밍 석

개발과 관련된 내용을 기록하는 블로그

배열의 선언과 메모리 할당
Java

배열의 선언과 메모리 할당

2023. 11. 7. 15:37

📝느낀 점

배열은 코딩테스트 할때만 사용했었다, 그리고 코딩테스트 풀기 위한 용도로만 알고 있었다.

jvm을 공부하면서 배열 또한 메모리에서 어떻게 관리되고, 저장되는지 궁금하였기에 이렇게 정리했던 결과를

작성해볼까 한다. 내용이 다소 부족할수도 있지만, 점점 살을 붙여가며, 좀 더 좋은 글을 만들수 있도록 하겠다.

중요한 것은, 배열 또한 불변이라는 것이고 연속적인 자료구조 라는 것이다. 또한 객체 생성처럼 배열 또한 힙 영역에서

생성되어 jvm 스택영역에 주소값을 가지게 된다는 것입니다. 또한 배열의 첫번째 값을 대표로 주소값을 반환 해준다는 것

 

 

 

배열이란?

배열은 같은 타입의 데이터를 연속적으로 저장한 자료구조입니다.

 

 

배열의 특징?

'정적'이라는 점과 '연속적'이라는 것이다. 처음 배열의 크기가 정해지면 크기를 변경할 수 없고,

메모리 상에서 배열의 첫번째 요소는 두번째 요소와 연이어 붙어있기에, 연속적인 것이다.

  • 즉, 모든 요소들이 저장된 위치는 연속적으로 붙어있습니다.

 

 

변수에 배열 직접 할당

int[] nums = {12, 37, 44};

 

 

스택 영역에 변수 nums가 할당되며, 이 변수 nums는 정수형, 배열타입 객체를 참조한다.

즉, 스택에는 배열 객체의 주소를 저장되게 되는 것이다. 힙 영역에서는 {12, 37, 44}배열이 할당되며,

이 배열의 첫 요소의 주소가 배열 객체의 메모리 주소가 된다.

나머지 배열 요소들은 연속적으로 저장되게 되는데, 37은 #54214, 44는 #54215 등의 방식이다.

 

 

그렇기에,

코드를 실행하여 보면, 변수가 참조하고 있는 배열 객체의 주소가 출력 되는 걸 알 수 있습니다.

 

 

new 연산자를 통한 배열 생성

int[] nums = new int[3];
nums[0] = 12;
nums[1] = 37;
nums[2] = 44;

이처럼 new연산자를 통해 배열을 할당하게 되면, 힙 영역에 초기화 된 배열이 생성되게 된다.

그 이후에, 인덱스를 통해 데이터를 삽입할 수 있게 되는 것이다. 여기서 주목할 점은 배열이 초기값을

가지며 할당된다는 것이다.

 

 

 

 

 

Reference :

https://93jpark.tistory.com/100

https://93jpark.tistory.com/123

저작자표시 (새창열림)

'Java' 카테고리의 다른 글

JVM 동작원리와 내부구조  (0) 2023.11.07
JIT 컴파일러는 무엇인가요?  (0) 2023.11.07
static primitive, static reference 저장 / static 메서드와 일반 메서드의 차이점  (0) 2023.11.07
exception VS error 차이가 무엇인가요?  (0) 2023.11.07
불변 객체나 final을 굳이 사용해야 하는 이유가 있나요?  (0) 2023.11.07
    밍 석
    밍 석
    밍 석

    티스토리툴바