Garbage Collection GC
2435 ワード
JAvaごみ回収回収は何ですか
不要なオブジェクトの回収をクリーンアップし、メモリ領域を空けます.
JVMのメモリ領域プログラムカウンタ メモリバイトコードが少ない行番号インジケータスレッドごとにメモリ漏洩は発生しません java仮想マシンスタック スレッドごとに実行されるスタック1つの方法は、スタックフレームがスタックをスタックアウトすることによって実行される方法です.ローカル変数テーブルメソッド出口ダイナミックリンクオペレータスタックを含むstackoverflowの例外(スタックフレームがjvmで許可されているスタックの深さを超えすぎます)スタックの深さを申請するときに、十分なメモリがないとOOMが表示されます.ローカルメソッドスタック 仮想マシンスタックと同様にスレッドがプライベートです javaスタック 共有メモリ領域には、対像インスタンスが格納されます.メソッド領域 クラス情報の定数静的変数などの実行時定数プールの実行中に発生する定数は、実行時定数プールでメモリが申請できない場合のOOMテストメソッドstringに格納される.intern
JAva GCは主にjavaスタックとメソッドゾーンで死んだオブジェクトを回収しています
オブジェクトが死んでいるかどうかを判断するには、オブジェクトが参照されているかどうかを判断することによってGCアルゴリズムによって参照があるかどうかを計算します.
GCアルゴリズム
1.参照カウンタアルゴリズム
もし1つのオブジェクトがカウンタ+1を参照されていたらカウンタ-1の利点を参照しないと分かりやすく判定効率が高い欠点を理解しやすくなり循環参照の問題を解決できない下のコードは回収できません
2.達成性分析アルゴリズム(javaで使用)
GCRootsで参照チェーンを下に検索参照されているオブジェクトがGCRootsに接続されていない場合は、jvmがGCを行う場合、この部分をマークして下をクリーンアップした後、図を補完します.
JAvaでの参照強引用Object A=new Object()ゴミ収集器で参照していれば回収しない-ソフトリファレンスSoft Referenceソフトリファレンスがあれば回収しないメモリオーバーフローが発生すると回収範囲に列挙して2回目の回収 を行う弱引用Weak Referenceは次の までしか生きられない虚引用Phantom Referenceはオブジェクトの生存時間に影響しないが、オブジェクトが回収されたときにfinalizeの低優先度のFinallizerスレッドに通知され、彼が仮想マシンに呼び出された上書きであることをトリガーするシステムがある.この方法は が実行されることはありません
ごみ収集アルゴリズムタグ-クリーンアップ クリーンアップされたすべてのクリーンアップをマークします.クリーンアップの効率が低いように、クリーンアップされたスペースが連続していません.大きなオブジェクトが入ってきてメモリを割り当てることができない場合は、ゴミ収集を行わなければなりません.コピー スペースをA Bの2つに分けて集めるときに届くオブジェクトをBに置いて元のオブジェクトのAを片付ける欠点は、使えるメモリスペースが半分を占めることです
ビジネス仮想マシンはこのアルゴリズムで新世代を処理しますエデン区の2つの生存区の割合8:1 新生代のオブジェクトの多くは朝生夕死であるため、使用区が大きいほうが生きているオブジェクトの領域が小さいほうがオブジェクトを作成するときはエデン区と1つの生存区を回収するときは生きているほうを別の生存区に置く.エデン区が生きているオブジェクトの多くが別の生存区より大きい場合は、古い年代の領域を候補にすることができる.タグ-整理 クリアされたすべてのオブジェクトをマークして一端に移動し、境界を覚えて境界外を直接クリーンアップします.
昔はこのアルゴリズムを使っていました古い世代のオブジェクトの生存周期が長い複製法を用いると複製するオブジェクトのたびに多くの効率が低い である.古い年代は保証区がありませんでした2つの区に分かれてもう1つの保存対象の区の空間が足りないならばメモリがなくて分配保証 をします世代別収集 新生代老生代
コレクタ Serial
特徴他のすべてのスレッドを一時停止1つの単一スレッドでゴミ収集を行う Parnew
Serialマルチスレッドバージョン Parallel Scavengeスループット優先コレクタ CMS
低停止収集フェーズはCPUリソースの使用量が多いためプログラムが遅くなります G1
不要なオブジェクトの回収をクリーンアップし、メモリ領域を空けます.
JVMのメモリ領域
JAva GCは主にjavaスタックとメソッドゾーンで死んだオブジェクトを回収しています
オブジェクトが死んでいるかどうかを判断するには、オブジェクトが参照されているかどうかを判断することによってGCアルゴリズムによって参照があるかどうかを計算します.
GCアルゴリズム
1.参照カウンタアルゴリズム
もし1つのオブジェクトがカウンタ+1を参照されていたらカウンタ-1の利点を参照しないと分かりやすく判定効率が高い欠点を理解しやすくなり循環参照の問題を解決できない下のコードは回収できません
class CountingGC{
public Object instance;
public void test(){
CountingGC gcA = new CountingGC();
CountingGC gcB = new CountingGC();
gcA.instatnce = gcB;
gcB.instatnce = gcA;
}
}
2.達成性分析アルゴリズム(javaで使用)
GCRootsで参照チェーンを下に検索参照されているオブジェクトがGCRootsに接続されていない場合は、jvmがGCを行う場合、この部分をマークして下をクリーンアップした後、図を補完します.
JAvaでの参照
ごみ収集アルゴリズム
ビジネス仮想マシンはこのアルゴリズムで新世代を処理します
昔はこのアルゴリズムを使っていました
コレクタ
特徴他のすべてのスレッドを一時停止1つの単一スレッドでゴミ収集を行う
Serialマルチスレッドバージョン
低停止収集フェーズはCPUリソースの使用量が多いためプログラムが遅くなります