2012-03-02 5 views
7

일부 클래스에 연결할 수 없다고 가정하고 있지만 익명의 클래스가 도달 할 수있는 클래스가 있습니다. 첫 번째 가비지 수집기에서 제거 할 수 있습니까?Java 익명 클래스 및 가비지 컬렉터

예 : 모든 비 정적 내부 클래스는 외부 클래스 인스턴스에 내재 rerefence을 갖기 때문에


class Outer { 
    public Object getInner() { 
    return new Object() {}; 
    } 
} 

... 

Outer outer = new Outer(); 
Object inner = outer.getInner(); 

// Could the "outer" instance be removed here considering that "inner" is using below? 
+0

코드에서 'Outer' 클래스의 메서드를 호출하고 있습니다. 아마도 거기에 도달 할 수없는 무엇입니까? – Marcelo

답변

8

상관 외부 인스턴스가 여전히이 경우에 도달된다.

+0

차이점은 내 예제의 익명 클래스는 외부 클래스에 대한 참조를 명시 적으로 (내부적으로 또는 외부 적으로) 사용하지 않는다는 것입니다. 그래서 나는 실제로 외부 클래스에 도달 할 수 없다고 생각합니다. –

+4

아직 참조가 있습니다. 그리고 JVM은이 참조가 절대로 사용되지 않는다는 것을 알 수 없습니다. 이 외부 참조를 절대로 사용하지 않으면 클래스는 정적 내부 클래스 또는 최상위 클래스 여야합니다. –

+0

이제 분명해진다. 고맙습니다! –