인스턴스 필드, 배열 요소
개체에 대한 참조가 있으면 가비지 수집 할 수 없습니다. 특히 해당 객체 (및 그 뒤에있는 전체 그래프)가 크면 가비지 수집을 중지하는 참조가 하나만 있고 해당 참조가 더 이상 필요하지 않은 경우 이는 불행한 상황입니다.
병리학 적 사례는 구성에 사용 된 전체 XML DOM 트리에 대한 비 필수적 인스턴스를 유지하는 객체, 등록 해제되지 않은 MBean 또는 전체 클래스 로더가 언로드되는 것을 방지하는 배포되지 않은 웹 응용 프로그램의 객체에 대한 단일 참조입니다. .
따라서 참조 자체를 보유하는 객체가 어쨌든 (또는 그 후에도) 가비지 수집 될 것이라는 확신이없는 경우 더 이상 필요하지 않은 모든 항목을 무효화해야합니다.
범위 변수 :
범위가 끝나기 전에 지역 변수를 null로 설정하여 가비지 수집기에서 회수하고 "지금부터 사용할 수 없음"으로 표시 할 수 있도록 고려중인 경우 대신 더 제한된 범위에 두는 것을 고려해야합니다. .
{
BigObject obj = ...
doSomethingWith(obj);
obj = null; // <-- explicitly set to null
doSomethingElse();
}
된다
{
{
BigObject obj = ...
doSomethingWith(obj);
} // <-- obj goes out of scope
doSomethingElse();
}
길고 평평한 범위는 일반적으로 코드의 가독성에도 좋지 않습니다. 그 목적을 위해 사물을 분해하는 사적인 방법을 도입하는 것도 전례가 없습니다.