"자바 완전 정복" 공부 2일차 - 자바의 메모리 구조
자바의 메모리 구조
pg 152
왼쪽 영역: 클래스, 메서드, 상수 (final), 정적 (static)
중앙 영역: 스택 (stack)
- 기본 자료형, 참조 자료형 상관 없이 모든 지역 변수가 위치하는 영역
오른쪽 영역: 힙 (heap)
- 객체가 위치하는 공간
- 참조 변수가 가리키는 실제 데이터
- 모든 참조 자료형의 실제 데이터 (객체)는 힙 메모리에 생성 됨.
배열과 힙 메모리
int[] a = new int[3]
해설:
- "int 자료형 3개를 저장할 수 있는 공간을 힙 메모리에 넣어 두고 어디에 넣었는지 참조 변수 a에 저장하라." pg 154.
- "new" 단어는 힙 메모리에 객체를 넣으라는 의미.
참고:
- 스택 메모리 공간에서는 변수를 초기화 하지 않으면 빈 공간으로 존재.
- 힙 메모리 공간에서는 빈 공간이 존재 하지 않음. 그래서 초기화 하지 않으면 컴파일러가 강제로 초기화 함.
객체의 위치를 참조 변수에 저장하는 이유
"new" 키워드를 사용해 객체를 생성하면 JVM은 힙 메모리 내에 빈 공간에 객체를 생성 하는데, 이 빈 공간이 매 순간 달라서, 저장할 때마다 위치가 달라 질 수 있음. 따라서 JVM이 생성한 객체의 위치를 알아야지 개발자가 생성된 객체를 사용할 수 있음.
기본 자료형 복사 vs 참조 자료형 복사
- 기본 자료형은 변수를 복사하면 스택 메모리에 있는 변수의 실제 데이터 값이 복사 됨. 변수를 복사 한 후 원본 변수의 값을 수정해도 복사한 변수의 값에 영향을 미치지 않음.
- 참조 자료형은 변수를 스택 메모리, 실제 데이터는 힙 메모리에 위치하기 때문에, 참조 자료형 변수를 복사하면, 객체를 가르키는 변수만 복사 되고, 실제 객체는 복사 되지 않는다. 그래서 복사한 변수가 참조 하는 객체를 수정하면, 원본이 가르키는 객체도 영향을 받음. 왜? 둘 다 같은 객체를 참조하고 있기 때문.
Author And Source
이 문제에 관하여("자바 완전 정복" 공부 2일차 - 자바의 메모리 구조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jungdaesuh/자바-완전-정복-공부-2일차-자바의-메모리-구조저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)