변수와 객체와 메모리의 관계

지식저장공간·2023년 2월 17일
0

운영체제

목록 보기
1/15

변수와 객체와 메모리의 관계

애플리케이션 : 일반 사용자가 사용할 기능을 제공하는, 컴퓨터가 실행할 수 있는 명령어들의 집합

메모리 : 실행된 애플리케이션이 상주하는곳

CPU : 명령어를 실행하는 주체

애플리케이션이 명령어를 내리면 CPU는 명령어를 처리하여 메모리에 저장한다.

런타임 : 애플리케이션이 실행중인 시간.

메모리


stack 메모리 : 함수나 메서드의 지역변수, 매개변수가 저장된다. 함수나 메서드가 호출될 때 마다 스택 프레임(stack frame)이 쌓인다.
heap 메모리 : 객체가 저장되는 메모리
언어에 따라서 객체는 stack메모리에 저장될 수도 있다.

stack memory

애플리케이션 실행 후 메서드나 함수가 실행되면 stack memory에는 stack frame이 생성된다. stack frame 최하단은 main메서드의 매개변수 args가 쌓이고 args 위로 메서드의 지역변수들이 저장된다.

main메서드의 stack frame이 생성되고, wow메서드의 stack frame은 main메서드의 stack frame위로 생성된다.

wow 메서드의 stack frame이 사라지고, 반환값을 a에 대입해준다.

heap memory

args : 매개변수
c : 지역변수
state : instance variable(인스턴스 변수)

main메서드가 실행되고 stack frame생성 후 생성자 new Counter();의 stack frame이 상단에 생긴다. 그 후 heap memory영역에 Counter 클래스 타입의 객체를 생성하고 생성자의 stack frame은 제거되며 main메서드의 지역변수 c는 객체를 가리킨다.(heap memory영역의 참소주소값)

main메서드의 지역변수 c, two메서드의 매개변수 c, two메서드의 지역변수 c는 모두 같은 객체를 가리킨다. 때문에, 메서드들을 통해 값을 바꾸면 변경된 값이 유지되고 공유된다.

쓰레기 객체(garbage object)

접근이 불가능한 객체를 쓰레기 객체라 한다.
GC(Garbage Collector) : 쓰레기 객체들을 제거해준다.

결론부터 말하자면, make 메서드를 실행하고 make의 지역변수 c는 생성된 객체를 가리키고, make 메서드는 새로 객체를 생성하여 반환한다. 반환하면서 make 메서드의 c는 make의 stack frame이 제거되면서 같이 제거되고 make의 c가 가르키던 객체를 참조 할 수 없다.
즉, main 메서드의 지역변수 c와 make()메서드의 지역변수 c는 서로 다른 객체를 가리킨다.

출처 : 쉬운코드 유튜브

profile
발전하는 개발자가 꿈입니다. 지식을 쌓고 지식을 활용해 목표 달성을 추구합니다.

0개의 댓글