JVM은 도달성 분석 알고리즘을 사용하여 객체를 재활용할지 여부를 결정합니다. 객체가 두 번 표시되면 Lose로 표시됩니다. 이 도달성 분석 알고리즘은 바이두에서 직접 검색해 볼 수 있는데 원리는 매우 간단합니다.
그럼 물건의 재활용 여부를 모니터링하려면 어떤 방법을 사용하나요? 물론 저는 fianlize를 사용했습니다;
코드를 확인하세요:
으아악
실행 결과:
으아악
이것은 finalize가 실행된 후에 객체가 확실히 재활용된다는 뜻인가요? 실제로 다음과 같이 finalize가 호출될 때 객체가 자신을 저장할 수 있는 기회가 단 한 번만 있다는 것이 반드시 사실은 아닙니다.
으아악
실행 결과는 다음과 같습니다.
으아악
첫 번째 가비지 수집 중에 finalize 메서드는 재활용을 방지하기 위해 현재 재활용 객체에 새로운 참조를 할당하는 것을 볼 수 있습니다. 그러나 두 번째 재활용에서는 finalize 메서드가 한 번만 호출될 수 있습니다. 호출되지 않습니다.
위의 두 가지 예에서 결론을 내릴 수 있습니다. finalize는 재활용할 객체를 모니터링할 수 있지만 finalize를 호출하는 객체가 동시에 재활용된다는 보장은 없습니다. 두 번째로 재활용을 위해 Finalize가 실행됩니다! 객체가 재활용되는지 여부를 절대적으로 모니터링하려면 JVM에 -XX:+PrintGCDetails 매개 변수를 추가하여 GC 로그를 분석하면 됩니다
객체의 재활용 여부는 단순히 현재 객체의 참조 여부만으로 판단되지 않습니다.
JVM은 도달성 분석 알고리즘을 사용하여 객체를 재활용할지 여부를 결정합니다. 객체가 두 번 표시되면 Lose로 표시됩니다. 이 도달성 분석 알고리즘은 바이두에서 직접 검색해 볼 수 있는데 원리는 매우 간단합니다.
그럼 물건의 재활용 여부를 모니터링하려면 어떤 방법을 사용하나요? 물론 저는 fianlize를 사용했습니다;
코드를 확인하세요:
으아악실행 결과:
으아악이것은 finalize가 실행된 후에 객체가 확실히 재활용된다는 뜻인가요? 실제로 다음과 같이 finalize가 호출될 때 객체가 자신을 저장할 수 있는 기회가 단 한 번만 있다는 것이 반드시 사실은 아닙니다.
으아악실행 결과는 다음과 같습니다.
으아악첫 번째 가비지 수집 중에 finalize 메서드는 재활용을 방지하기 위해 현재 재활용 객체에 새로운 참조를 할당하는 것을 볼 수 있습니다. 그러나 두 번째 재활용에서는 finalize 메서드가 한 번만 호출될 수 있습니다. 호출되지 않습니다.
위의 두 가지 예에서 결론을 내릴 수 있습니다. finalize는 재활용할 객체를 모니터링할 수 있지만 finalize를 호출하는 객체가 동시에 재활용된다는 보장은 없습니다. 두 번째로 재활용을 위해 Finalize가 실행됩니다! 객체가 재활용되는지 여부를 절대적으로 모니터링하려면 JVM에 -XX:+PrintGCDetails 매개 변수를 추가하여 GC 로그를 분석하면 됩니다
반드시 그런 것은 아닙니다. 해당 객체 클래스의 소멸자를 사용할 수 없나요?