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

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

天蓬老师
天蓬老师

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

全員に返信(2)
阿神

オブジェクトがリサイクルされるかどうかは、現在のオブジェクトが参照されているかどうかだけでは判断されません。

JVM は、到達可能性分析アルゴリズムを使用して、GC ROOT によって到達できないノードがマークされます。オブジェクトが 2 回マークされると、そのノードはリサイクルされます。この到達可能性分析アルゴリズムについては、Baidu で自分で検索することができます。原理は非常に簡単です。

それでは、オブジェクトがリサイクルされているかどうかを監視するにはどのような方法が使用されるのでしょうか?もちろんフィアンリーゼを使いました

コードを参照してください:

リーリー

実行結果:

リーリー

それは、ファイナライズを実行した後、オブジェクトは確実にリサイクルされるという意味ですか?実際、次のように、finalize が呼び出されたときにオブジェクトが自身を保存する機会が 1 回しかないということは必ずしも真実ではありません:

リーリー

実行結果は以下の通りです:

リーリー

最初のガベージ コレクション中に、finalize メソッドが現在のリサイクル オブジェクトに新しい参照を割り当ててリサイクルを回避していることがわかります。ただし、finalize メソッドはオブジェクトに対して 1 回だけ呼び出すことができ、実行中には呼び出されません。 2回目のリサイクルが呼び出されました。

上記の 2 つの例から結論付けることができます。finalize は、リサイクルされるオブジェクトを監視できますが、finalize が呼び出されたオブジェクトがリサイクルされるという保証はありません。同時に、オブジェクトは、finalize をトリガーすることはありません。は 2 回目のリサイクル対象としてマークされています。オブジェクトがリサイクルされているかどうかを完全に監視したい場合は、パラメータ -XX:+PrintGCDetails を JVM に追加して GC ログを分析するだけです

いいねを押す +0
巴扎黑

必ずしもいつというわけではありません。そのオブジェクトクラスのデストラクタを使用することはできないでしょうか?

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート