2010-01-12 4 views
5

나는 SCJP 준비 사이트에서이 질문을하고 있었다. 답변 A는 정확합니까?자바 가비지 콜렉션

"// some code goes 여기"란 줄에있는 a, b, aa가 참조하는 객체에 대해서는 무엇이 사실입니까?

class A { 
    private B b; 
    public A() { 
     this.b = new B(this); 
    } 
} 

class B { 
    private A a; 
    public B(A a) { 
     this.a = a; 
    } 
} 

public class Test { 
    public static void main(String args[]) { 
     A aa = new A(); 
     aa = null; 
     // some code goes here 
    } 
} 


A) The objects referenced by a and b are eligible for garbage collection. 
B) None of these objects are eligible for garbage collection. 
C) Only the object referenced by "a" is eligible for garbage collection. 
D) Only the object referenced by "b" is eligible for garbage collection. 
E) Only the object referenced by "aa" is eligible for garbage collection. 

답변 :

답변

8

자바는 간단한 참조 카운팅 가비지 수집기를 사용하지 않습니다.

JVM이 전체 GC 실행을 수행하면 찾은 각 항목을 표시하여 전체 개체 그래프를 탐색합니다. 표시되지 않은 항목은 정리 대상입니다.

ab도 메인 코드에서 더 이상 접근 할 수 없으므로 표시되지 않으므로 정리 대상이됩니다.

2

글쎄, 가비지 콜렉터 블이 아닌 무언가를 위해, 스택의 어느 곳에서나 도달 할 수 있어야합니다. 그 시점의 스택이 aa와 단일 문자열 배열 (args)에 대해서만 null 값을 가지고 있다고 생각하면 a 또는 b에 도달 할 방법이 없습니다.

관련 문제