A
클래스의 인스턴스는 가비지 수집 될 것입니까? 아니면 영원히 메모리에 남아 있을까요?메소드를 finilize 할 때 객체의 참조를 객체 속성으로 설정하면 어떻게됩니까
개체가 가비지 수집 대상이되고 해당 finalize()
메서드가 호출되었고이 메서드 내에서 개체가 실행중인 라이브 스레드에서 액세스 할 수있게되면 가비지 수집되지 않는다는 것을 알고 있습니다.
public class A{
String someString = null;
private A a=null;
public String getSomeString() {
return someString;
}
public void setSomeString(String someString) {
this.someString = someString;
}
@Override
protected void finalize() throws Throwable {
try {
this.a=this;
System.out.println("final called");
} finally {
super.finalize();
}
}
}
public static void main(String args[]) throws Exception {
A s1=new A();
s1=null;
System.gc();
System.out.println("gc called");
......
}
는
Can we switch off finalizers?
this.a = this는 gc를 방지하지 못합니다. 'life'에 의해이 객체에 대한 참조가 여전히 존재하지 않으므로 gc가됩니다. 라이브 스레드와 같이 다른 것으로부터 참조한다면 살아남을 수 있습니다. – Vladp
@Vladp 그 대답을하고 당신이 내 최대 - 투표를 얻을거야 ... –
@ Vladp 내 생각 this.a =이 속성에 대한 참조를 할당? 내가 틀렸다면 나를 수정 해주세요. –