>  Q&A  >  본문

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

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

天蓬老师天蓬老师2743일 전667

모든 응답(2)나는 대답할 것이다

  • 阿神

    阿神2017-04-18 10:52:02

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

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

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

    코드를 확인하세요:

    으아악

    실행 결과:

    으아악

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

    으아악

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

    으아악

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

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

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:52:02

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

    회신하다
    0
  • 취소회신하다