ホームページ >Java >&#&チュートリアル >JVM の高度な機能 - 3. オブジェクト生存アルゴリズムを決定するガベージ コレクション

JVM の高度な機能 - 3. オブジェクト生存アルゴリズムを決定するガベージ コレクション

巴扎黑
巴扎黑オリジナル
2017-06-26 11:34:111548ブラウズ

1. 概要

ランタイムデータ領域では、プログラムカウンタ、仮想マシンスタック、ローカルメソッドスタックはすべてスレッドによって生成および破棄されます

したがって、それらのメモリ割り当てとリサイクルは確実であり、再利用時にリサイクルされます。メソッドまたはスレッドが終了します。 Java ヒープと正方形の領域は不確実です。プログラムの実行中に作成されるオブジェクトのサイズは、プログラムの実行中にのみわかります。オブジェクトが生きているかどうかを判断するには、参照カウント方式と到達可能性分析アルゴリズムの 2 つの主なアルゴリズムがあります

参照カウント方式

参照カウンタ、オブジェクトが 1 回参照されるたびに、カウンタ値は次のようになります。カウンタが 0 の場合は、再度使用されないことを意味します。

    到達可能性分析アルゴリズム
  • このアルゴリズムはGC ROOTとなるノードをルートノードとして使用し、
このルートノードから下方向に探索していきます。オブジェクト GC ROOT に接続されている参照チェーンがない (つまり、到達できない) 場合、そのオブジェクトが GC ROOT として使用できるオブジェクトは次のとおりです。仮想マシンスタックのローカル変数テーブル内 参照オブジェクト

メソッド内のクラス静的プロパティ参照 排他的

  • メソッド内のオープンオブジェクト

    ローカルメソッド内の参照オブジェクト

  • 現在利用可能なアルゴリズムは、参照カウンター アルゴリズムではオブジェクトが相互に参照している問題を解決できないため、参照チェーンが接続されていないことが判明したためです。フィルタリング条件は、オブジェクトがfinalizeメソッドをカバーしていない場合、またはfinalizeメソッドが呼び出されている場合、


    と見なされます。実行する必要がないと判断された場合は、F-Queueというキューに入れられ、後ほどJVM

  • がこれらのオブジェクトを実行するための低優先度のファイナライザースレッドを自動的に作成します。 Finalize メソッドを実行すると、GC は F-QUEUE 内のオブジェクトを 2 回目にマークします。この時点でオブジェクトがエスケープできない場合は、リサイクルされます。
    • finalize()メソッド
    • finalizeメソッドについては上で何度も言及していますが、オブジェクトのfinalizeメソッドはシステムによって自動的に一度しか呼び出されないことに注意してください。

    • このメソッドを使用することはお勧めしません、その関数は代わりに try-finally で完了できます

以上がJVM の高度な機能 - 3. オブジェクト生存アルゴリズムを決定するガベージ コレクションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。