작성
·
472
0
안녕하세요! 강사님 강의를 듣다가 궁금한 점이 생겨서 질문 드려요.
Stack 클래스에 pop메서드가 기존에 배열 해당 참조값을 리턴해 주는 역할을 할 뿐 배열 자체에는 여전히 참조하는 값이 남아있어서 while 문을 돌려서 pop메서드로 다 꺼내도 가비지 컬렉션 대상이 아닌 것은 이해가 갔습니다.
그러면 혹시 Stack 클래스를 사용하는 메서드가 끝나게 되면 Stack을 참조하고 있던 지역 변수가 해제가 되면서 Stack 인스턴스가 가비지 컬렉션 대상이 되고 참조하고 있던 elements 배열도 같이 가비지 컬렉션 대상이 되는 건가요?
제가 이해하기론 Stack을 참조하는 지역변수 참조 관계가 끊어졌다고 하더라도 Heap 영역에 존재하는 elements 배열 내부에는 여전히 다른 Object들을 참조하는 강 결합으로 이어져 있기 때문에 가비지 컬렉션이 가비지 대상이 아니라고 판단하여 다 쓴 참조를 여전히 가지고 있기 때문에 메모리 영역을 차지하여 다 쓴 객체 참조를 해제하라고 이해하였습니다.
다른 곳에서 가비지 컬렉션 대상이 되는 객체들을 보았는데 Heap 영역 내에서 참조를 하고 있는 관계이면 강 결합이어도 가비지 대상이 된다는 글을 봐서 혹시 제가 잘못 이해한 것인지 궁금합니다.
질문이 너무 두서없는 것 같지만 제가 본 글 링크를 남겨 놓습니다.
https://d2.naver.com/helloworld/329631
답변