java类中的成员成员变量赋值之后什么时候会被回收,有什么办法监听到某一个对象被回收吗
天蓬老师
天蓬老师 2017-04-18 10:50:02
0
2
704

java类中的成员成员变量赋值之后什么时候会被回收,有什么办法监听到某一个对象被回收吗

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

모든 응답(2)
阿神

객체의 재활용 여부는 단순히 현재 객체의 참조 여부만으로 판단되지 않습니다.

JVM은 도달성 분석 알고리즘을 사용하여 객체를 재활용할지 여부를 결정합니다. 객체가 두 번 표시되면 Lose로 표시됩니다. 이 도달성 분석 알고리즘은 바이두에서 직접 검색해 볼 수 있는데 원리는 매우 간단합니다.

그럼 물건의 재활용 여부를 모니터링하려면 어떤 방법을 사용하나요? 물론 저는 fianlize를 사용했습니다;

코드를 확인하세요:

으아악

실행 결과:

으아악

이것은 finalize가 실행된 후에 객체가 확실히 재활용된다는 뜻인가요? 실제로 다음과 같이 finalize가 호출될 때 객체가 자신을 저장할 수 있는 기회가 단 한 번만 있다는 것이 반드시 사실은 아닙니다.

으아악

실행 결과는 다음과 같습니다.

으아악

첫 번째 가비지 수집 중에 finalize 메서드는 재활용을 방지하기 위해 현재 재활용 객체에 새로운 참조를 할당하는 것을 볼 수 있습니다. 그러나 두 번째 재활용에서는 finalize 메서드가 한 번만 호출될 수 있습니다. 호출되지 않습니다.

위의 두 가지 예에서 결론을 내릴 수 있습니다. finalize는 재활용할 객체를 모니터링할 수 있지만 finalize를 호출하는 객체가 동시에 재활용된다는 보장은 없습니다. 두 번째로 재활용을 위해 Finalize가 실행됩니다! 객체가 재활용되는지 여부를 절대적으로 모니터링하려면 JVM에 -XX:+PrintGCDetails 매개 변수를 추가하여 GC 로그를 분석하면 됩니다

巴扎黑

반드시 그런 것은 아닙니다. 해당 객체 클래스의 소멸자를 사용할 수 없나요?

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿