ホームページ  >  に質問  >  本文

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

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

天蓬老师天蓬老师2743日前665

全員に返信(2)返信します

  • 阿神

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

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

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

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

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

    リーリー

    実行結果:

    リーリー

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

    リーリー

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

    リーリー

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

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

    返事
    0
  • 巴扎黑

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

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

    返事
    0
  • キャンセル返事