"자바 완전 정복" 공부 2일차 - 자바의 메모리 구조

자바의 메모리 구조

pg 152

왼쪽 영역: 클래스, 메서드, 상수 (final), 정적 (static)

중앙 영역: 스택 (stack)

  • 기본 자료형, 참조 자료형 상관 없이 모든 지역 변수가 위치하는 영역

오른쪽 영역: 힙 (heap)

  • 객체가 위치하는 공간
  • 참조 변수가 가리키는 실제 데이터
    • 모든 참조 자료형의 실제 데이터 (객체)는 힙 메모리에 생성 됨.

배열과 힙 메모리

int[] a = new int[3]

해설:

  • "int 자료형 3개를 저장할 수 있는 공간을 힙 메모리에 넣어 두고 어디에 넣었는지 참조 변수 a에 저장하라." pg 154.
  • "new" 단어는 힙 메모리에 객체를 넣으라는 의미.

참고:

  • 스택 메모리 공간에서는 변수를 초기화 하지 않으면 빈 공간으로 존재.
  • 힙 메모리 공간에서는 빈 공간이 존재 하지 않음. 그래서 초기화 하지 않으면 컴파일러가 강제로 초기화 함.

객체의 위치를 참조 변수에 저장하는 이유

"new" 키워드를 사용해 객체를 생성하면 JVM은 힙 메모리 내에 빈 공간에 객체를 생성 하는데, 이 빈 공간이 매 순간 달라서, 저장할 때마다 위치가 달라 질 수 있음. 따라서 JVM이 생성한 객체의 위치를 알아야지 개발자가 생성된 객체를 사용할 수 있음.

기본 자료형 복사 vs 참조 자료형 복사

  • 기본 자료형은 변수를 복사하면 스택 메모리에 있는 변수의 실제 데이터 값이 복사 됨. 변수를 복사 한 후 원본 변수의 값을 수정해도 복사한 변수의 값에 영향을 미치지 않음.
  • 참조 자료형은 변수를 스택 메모리, 실제 데이터는 힙 메모리에 위치하기 때문에, 참조 자료형 변수를 복사하면, 객체를 가르키는 변수만 복사 되고, 실제 객체는 복사 되지 않는다. 그래서 복사한 변수가 참조 하는 객체를 수정하면, 원본이 가르키는 객체도 영향을 받음. 왜? 둘 다 같은 객체를 참조하고 있기 때문.

좋은 웹페이지 즐겨찾기