heap과 stack

keep_going·2023년 6월 22일

지식저장

목록 보기
11/11
int i = 5;

class Animal {
	int id;
    Animal(int id) {
    	this.id = id;
    }
}

Animal dog = new Animal(12);
Animal cat = new Animal(15);

자바 프로그램이 실행될때 사용되는 두가지 종류의 메모리

  • heap
    자바프로그램에서 공유되는 기본 저장소
    새로운 객체가 생성될때마다 모두 heap에 저장됨
    heap 안에서도 저장 공간이 여러개로 나뉨

  • stack
    기본 변수들을 생성하면 모두 stack에 저장됨
    위의 예제에서 dog에 대한 값은 dog가 아니라! 객체가 저장된 경로의 참조정보(1A)가 stack에 저장됨
    그래서 dog를 참조변수라고 부르는것

즉 실제 객체 정보는 heap에 저장되고
실제 객체가 저장된 메모리의 경로가 stack에 저장됨

  • 서로 다른 참조변수의 값이 같으려면 같은 저장경로를 가져야함

  • 참조 변수를 복사할때 복사되는 내용은 저장경로(객체가 아님!)

  • 참조 변수를 ==로 비교할때 비교하는 것은 객체(값이 아님!)

Animal dog = new Animal(12);
Animal dog2 = new Animal(12);

에서 id가 12로 동일하더라도 heap의 다른 영역에 저장되므로
dog == dog2false로 출력됨

기본 변수를 ==로 비교할때는 값을 비교한다.

profile
keep going

0개의 댓글