JVMのガベージコレクションとメモリ割り当て戦略

I.概要

  以下の3つのことを考慮し、ガベージコレクタを設計します。

  メモリを回収する必要がある(1)

  (2)時にリサイクルへ

  (3)どのようにリサイクルへ

  Javaのメモリランタイムそれぞれの部分領域です:プログラムカウンタ、Java仮想マシン・スタック、ネイティブメソッドスタック、Javaヒープ、プログラムカウンタのメソッドエリア、仮想マシン・スタック、ネイティブメソッドスタックスレッドで生まれたスレッド、と三つの領域死は、入力し、ストリップが凝集することなく実行とポップ操作をスタックしている間、プロセスとスタックのスタックフレームを終了します。実質的に確定あたり既知のクラス構造に配置されているどのくらいのメモリ各スタックフレーム。メモリの割り当てと、これらの分野の回復が確実に装備されています。

  異なっていてもよく、必要なメモリの実装複数のインターフェースは、方法の異なる分岐が必要なメモリのみに、同じではないかもしれない行うことクラス2つの領域のJavaヒープおよびメソッド領域は、著しい不確実性を有しています動作時に、プログラムは、我々が作成されたオブジェクトの数、オブジェクトが作成されている内容を正確に把握することができ、メモリの割り当てと回復のこの部分は、ガベージコレクタが、それはメモリ管理のこの部分で懸念しているか、動的です。

第二に、メモリを回復するために必要なものを決定?

(1)カウント状態決意参照オブジェクト(生死)

  ライブオブジェクトをカウントする基準が決定される障害に言及する場合、対象における参照カウントを追加して、それが参照される場所たびに、カウンタの値が1だけインクリメントされ、カウンタ値を1だけデクリメントされ、任意の時間カウンタオブジェクトは0ではありませんこれは、再び使用することができます。参照カウント、彼らがカウントされるために、いくつかの余分なメモリ空間を取るが、それは原則的にシンプルでありながら、高効率を決定します。しかし、それは循環参照の問題を解決することはできません。

  A = B、B = A、ケースA、B参照互いに、それらは、参照カウントが基準カウント方法は、その回収されず、0ではない引き起こします。

生きているオブジェクトを決定するために、(2)到達可能性解析アルゴリズムの場合?

  A場合は、このアルゴリズムの基本的な考え方は、参照関係に応じて、これらのノードから下方に検索を開始する、開始ノードセットとして「GCのルーツ」と呼ばれるルート・オブジェクトの一連を通して、検索プロセスは、「参照のチェーン」として知られている経路を取っていますオブジェクトは、任意の参照GCルーツ・チェーンに接続されていない場合、そのオブジェクトは、もはや参照されません。

  GCのルーツコレクションは、次のとおりです。

  1)ターゲット仮想マシンのスタックがどのようにローカル変数、一時変数、参照します。

  2)メソッドは、オブジェクトの属性は、クラス変数などの静的領域を参照します。

  3)このような引用符で囲まれた文字列定数プールとして一定領域内の参照オブジェクトの方法。

  このような基本的なデータ型に対応するクラスオブジェクトとして、仮想マシンの参照、内部4)。

  5)すべてのオブジェクトは、同期ロック(同期)によって保持されています。

  注:別のユーザー選択ガベージコレクタとメモリ領域の現在の回復、オブジェクトはヒープ・オブジェクトの他の領域で参照することが全く可能であるエリアので、これらのオブジェクトは、領域もGCに追加される関連することが必要中ルーツ。

基準の(3)タイプ

  1)強力なアプリケーション:オブジェクトOBJ =新しいオブジェクト()にかかわらず、どのような状況のような参照関係と同様に、ガベージコレクタは、参照先の失われたオブジェクトを回復することはありません。

  2)ソフト引用:いくつかの便利ではなく、必要なオブジェクト。オブジェクトは、システムメモリのオーバーフローが例外の前に発生しますに関連する唯一のソフト参照されている。この回復は十分なメモリ、メモリオーバーフロー例外がスローされますされていない場合、これらのオブジェクトは、第2の回収への列の範囲内で回復します。

  3)弱参照:弱参照オブジェクトは、次のガベージコレクションが発生するまで生き残るために関連付けることができます。かかわらず、現在のメモリーの妥当性の仕事にガベージコレクタが、唯一の回復する場合には、失われたオブジェクトは弱参照と関連しています。

  4)仮想基準:参照して、仮想オブジェクトのインスタンスを取得できません、単にオブジェクトコレクタを回収する通知を受信するオブジェクトシステムに関連付けられたファントム参照の唯一の目的のために提供されます。重要なオブジェクトを回復するためにリスニング、仮想基準周波数GCによって判断することができ、それが大きすぎる場合、メモリ使用量が問題になることがあり、システムGC頻繁にコールの結果でした。

  

おすすめ

転載: www.cnblogs.com/hdc520/p/12540063.html