본문 바로가기

프로그래밍/자바(JAVA)

[자바 질문] 자바 가비지 콜렉션 질문드립니다.

자바 가비지 콜렉션 질문드립니다.


아래와 같은 소스가 있습니다.
public class Tahiti {
Tahiti t;
public static void main(String[] args) {
Tahiti t = new Tahiti();
Tahiti t2 = t.go(t);
t2 = null;
// 프로그램이 이곳에 도달 했을때 
               // 몇 개의 객체가 가비지 콜렉터에 의해 수집이 가능한지

// more code here...
}
Tahiti go(Tahiti t) {
Tahiti t1 = new Tahiti();
Tahiti t2 = new Tahiti();
t1.t = t2;
t2.t = t1;
t.t = t2;
return t1;
}
}

질문이 저 빨간색인데
답은 0개라고 하는데 저는 왜 0개가 되는지 잘 모르겠습니다.
t2 에 null을 설정 했으므로 1개가 아닌가 싶은뎅...

더불어 가비지 콜렉터에 의해 수집가능한 객체의 조건도 알려주시면
완전 쎈스쟁이..

답변

public class Tahiti {
Tahiti t; <-------------------- 1번
public static void main(String[] args) {
Tahiti t = new Tahiti();     <--------------------- 2번
Tahiti t2 = t.go(t);            <----------------------  3번
t2 = null;
// 프로그램이 이곳에 도달 했을때 
               // 몇 개의 객체가 가비지 콜렉터에 의해 수집이 가능한지

// more code here...
}
Tahiti go(Tahiti t) {
Tahiti t1 = new Tahiti();            <--------------- 4번
Tahiti t2 = new Tahiti();            <---------------- 5번
t1.t = t2;
t2.t = t1;
t.t = t2;
return t1;
}
}
 
위의 코드인데요. 변수이름을 동일하게 주셔서 아마 헷갈리시는듯 합니다. 위에서 선언된1번 ~ 5번 까지의 변수들은 싸그리 다른 녀석들 입니다. 그래서 헷갈리실수도 있으니 변수이름 말고 번호로 그려진 그림으로 설명을 드리도록 하겠습니다.
 
 
 
 
 
 
 
 위의그림이 t2=null 넣기 전까지의 상황입니다.
t2=null을 넣으시더라도 t2가 가리키고 있는 객체를 다른 변수가 가리키고 있으니 가비지 컬렉션이 호출되지 않는 것입니다.
 
추가적으로 궁금하신 사항은 댓글 달아 주세요.