자바 가비지 콜렉션 질문드립니다.
아래와 같은 소스가 있습니다.
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가 가리키고 있는 객체를 다른 변수가 가리키고 있으니 가비지 컬렉션이 호출되지 않는 것입니다.
추가적으로 궁금하신 사항은 댓글 달아 주세요.
'프로그래밍 > 자바(JAVA)' 카테고리의 다른 글
[자바] 달력프로그램 알고리즘에 대해.. (2) | 2012.05.10 |
---|---|
[자바/JAVA]자바 성적 관리 프로그램 인데요.. 주석좀 달아서 설명해주세요..ㅠ (1) | 2012.05.10 |
[자바 질문] 자바배열에 관해서 질문이 있습니다. (0) | 2012.05.09 |
[자바 질문] 자바 문제좀 풀어주세요!! (0) | 2012.05.09 |
[자바/JAVA] 자바 - 피라미드 만들기 + 모래시계 만들기 소스 (0) | 2012.05.04 |
[자바/JAVA] 자바 한글형태의 숫자를 숫자로 바꾸기 (0) | 2012.05.04 |
[자바/JAVA] 자바 달력만들기 (0) | 2012.05.04 |
[자바/JAVA] 자바 야구 게임 소스 (0) | 2012.05.04 |
[자바/JAVA] 자바 가위바위보 소스 코드 (0) | 2012.05.04 |