十分なメモリの場合、JVMのガベージコレクション機構、明示的にSystem.gc()を呼び出していない限り、それ以外の場合は、ごみは収集されません。ガベージコレクションは、自動的に適切にメモリ不足の状態で実行されます。
参照カウントアルゴリズム
1.定義:参照カウントアルゴリズムは、自分の時間の場所への参照は、カウンタがインクリメントされるたびに、オブジェクトのカウンタへの参照を追加する、カウンタ基準値をフェイルデクリメントされます。カウンタが0である場合には、オブジェクトを回収することができます。
2.短所2つの円形の基準メモリオブジェクトを生じる循環参照の存在は、解放することができません。このアルゴリズムを使用して達成されたJVMのガベージコレクションが全くありません。
3.ステータス:循環参照の問題を解決することは困難であるため、主流のJava仮想マシンは、メモリを管理するために参照カウントアルゴリズムを使用していません。
第二に、到達可能性解析アルゴリズム
1.アイデア:「GCルーツ」の一連の出発点としての目的は、ノードの探索から下方に開始する、検索パスと呼ぶ横断「参照のチェーン。」オブジェクトがこのオブジェクトへのGCの根から到達不能であるGCルーツの参照鎖に接続されていない場合、それは、このオブジェクトが利用できないことを証明しています。相互に関連がObject5、Object6、Object7に示すが、それらは、オブジェクト再利用可能と判定されているので、それらは、アップGCのルーツではないとして。
いくつかのオブジェクトはルートオブジェクトとして、JVMは、ルートオブジェクトを再利用することができないと思うし、ルートオブジェクトによって参照されるオブジェクトは、非リサイクル可能です。Java言語では、GC ROOTは以下を含むオブジェクトとして使用することができます。
(1)仮想マシンのスタック(ローカル変数表のスタックフレーム)参照形成ああ
(2)静的属性参照におけるオブジェクトのメソッド
(3)一定の基準物体領域の方法
(4)ローカルネイティブメソッドスタック主題の方法参照。
:本当に倍の長ラベリング処理の経験として、死者のオブジェクトを宣言するために、オブジェクトの到達可能性解析手法では2であっても到達できない場合、またFeisibukeは、
(1)の場合は、オブジェクトの到達可能性分析を行った後、GCルーツに接続されたチェーンへの参照は、それが最初に参照されていないが見つかりました。
(2)finallizeオブジェクトをカバー()、またはfinallize()メソッドが覆われている場合、オブジェクトは、finallize()を行う必要があるかどうかを決定する、仮想マシンがこれを行う必要はありません。
- finallizeゆっくりとオブジェクト()メソッドが実行する、あるいは無限ループ場合は、廃棄物のFQueue内のオブジェクトを再利用することができないので、いつまでも待って、さらにはクラッシュ回復にシステム全体を引き起こすFQueueキュー他のオブジェクトが発生します。
- オブジェクトがファイナライズ()メソッドを実行するために必要であると判断された場合、オブジェクトは、キューF-キューに入れ、後で仮想マシンによって確立されます。ファイナライザ低い優先度のスレッドが実行します。実行は、ここでこの方法をトリガする仮想機会であるが、プロセスが終了するのを待つことを約束していない、その理由は次のとおりです。ファイナライズ()メソッドのターゲットへの最後の機会は、オブジェクトのfinalize()メソッドに成功救助場合、死の運命を免れています私自身、そのような変数やクラスのメンバ変数に割り当てられた(この)彼自身のような連鎖仲間、上の任意のオブジェクトへの参照のコレクションは、それを取り外し、すぐに次のマークの時点で回収されます。
- オブジェクトを逃れるために管理されていない場合は、基本的にそれは本当に(回収され、第二のマーク)。
彼のfinalize()メソッドのオブジェクトは実行されません場合は回復が下向きにされると、オブジェクトのいずれかの方法で自動的に、システムを呼び出しますFinallize。それはC / C ++プログラマがより簡単に、個々のオブジェクトの呼び出しシーケンスを表現することができない、彼の走行コストがかかり、高い不確実性を妥協製のJavaを受け入れることだけのためであるので、ファイナライズ方法を避けるようにしてください。---つづきます