2012-06-04 4 views
2

A에 대한 참조를 포함하는 오래 지속되는 오브젝트 A와 많은 임시 오브젝트 B, C 등이있는 경우 A가 참조하는 한 해당 임시 오브젝트가 수집됩니다. 어떤 것? (하지만 다른 개체에 도달) B와 C에 도달 할 수있는 방법이없는 경우 B와 C는 요청에 대해 존재하지만, A.에 대한 참조를 포함Java 가비지 콜렉션

class A {} // (sits in web app session) 

class B { 
    private A a; 
} 

class C { 
    private A a; 
} 

답변

2

그들은, 그들은 것입니다 것입니다 평소대로 수집.

4

B와 C는 요청 후에 즉시 가비지 수집 될 수 있습니다. 그들에 대한 언급이 없습니다.

+1

아니요. * 즉시 수집 할 수 있습니다. 필수는 아닙니다. – delnan

+0

요청 범위에있는 요청은 요청 범위에 포함됩니다. 도달 할 수 없게 될 때 그렇게됩니다. 포스터에 "요청을 위해 존재 함"이라고 표시되어 있습니다. – Gus

+0

가비지 수집기가 즉시 메모리를 지우지 못하고 ** 수집 할 수 있음을 의미하지는 않습니다 ** 그 시점에 ** 수집됩니다. –

2

예, 수집 할 수 있습니다. A가 그들에 대한 참조를 보유하고 있다면 A가 여전히 도달 할 수있는 한 수집되지 않을 것입니다.

1

예, 그렇습니다. 가비지 콜렉션은 루트 도달 가능 오브젝트 (기본적으로 현재 활성 콜의 로컬 변수와 글로벌)에서 도달 할 수있는 한 오브젝트를 활성 상태로 유지합니다.

ABC 개체에 대한 참조가 없으면 해당 개체를 활성 상태로 유지할 수 없습니다. A이 및 C 개체로 참조된다는 사실은 부적절합니다.

+1

+1 GC 작업을 100 % 정확하게 다시 쓰는 것을 보았던 드문 기쁨에 감사드립니다. – delnan

관련 문제