Java仮想マシン[2]

ガベージコレクタとメモリ割り当て戦略

プログラムカウンタ、仮想マシン、スレッド誕生と死とのネイティブメソッドスタック三つの領域、入口/出口の方法として、スタックのスタックフレームで、クラス構造が知られた後に、割り当てられたメモリのサイズが決定され、これらのメモリ領域をスタック回復OKの割り当て。CGは、Javaヒープおよびメソッド領域を考慮する必要があり、インタフェースの実装クラスに必要なメモリの複数の異なる一つであり、この方法は、メモリの複数の分岐を必要と異なっています。これは、ガベージコレクタの関心の一部です。

1.ことを確認したオブジェクト「生と死」

リサイクルガベージコレクタ「死んだ」のオブジェクト、オブジェクトの決意が必要とされ、「生と死」方法:1. 2.参照カウント到達可能性解析アルゴリズム

1.1。参照カウント

-1、+1をカウントし、それへの参照があるオブジェクトカウンタ、への参照を追加し、再び使用することはできませんオブジェクト0のカウントの参照カウントを失敗。

欠点:基準目標ループの(例として)問題を解決することは困難です

 

パブリック クラスReferenceCountingGc {
     パブリックオブジェクトインスタンス= NULL ;
     プライベート 静的 最終 INT * 1024 _iMB = 1024 ; 
     プライベート バイト [] = bigSize 新しい新しい バイト [2 * _1MB]; // ログがGCが見回収されるか否かの使用された全メモリ、
    
    公衆 静的 ボイドtestGC(){ 
        ReferenceCountingGC OBJA = 新しい新しいReferenceCountingGC(); 
        ReferenceCountingGC objB = 新しい新しいReferenceCountingGC(); 
        objA.instance =  objB。
        objB.instance = OBJA; 
        にSystem.gc(); // 2つのオブジェクトが相互に参照するため、参照カウントがゼロではないので、再利用することができません    
    } 
}

 

 

 

1.2。到達可能性解析アルゴリズム

 

基本的な考え方は、オブジェクトがGCのルーツへの参照を持っていない場合、検索パス横断基準鎖(参考鎖)と呼ばれ、これらのノードから下方に検索を開始するために、出発点として、「GCのルーツ」と呼ばれる一連のオブジェクトを介して行われチェーンに接続されている場合、その後証拠が利用可能オブジェクトではありません。

Java言語では、GCRootsなどのオブジェクトは、次のカテゴリが含まれます。

  1. 仮想マシンのスタック(スタックフレーム内のローカル変数は、また、ローカル変数テーブルと呼ばれる)参照されるオブジェクト。
  2. 参照されたオブジェクト領域クラスの静的プロパティの方法。
  3. リテラルの参照方法ゾーンオブジェクト。
  4. オブジェクトのネイティブメソッドスタックJNI(ネイティブメソッド)参照。

仮想マシンまたはファイナライズメソッドを隠蔽オブジェクトが呼び出された場合、オブジェクトは「死」を脱出する唯一のGC基準マークからの第二の時間にすることができ、オフィスの連鎖 "が関連付けられているオブジェクト死。 "

1.3。参考文献

オリジナルの引用を引用し、参照しているオブジェクトを、ソフト参照を追加することにより、硬すぎるので、強い参照するオブジェクトのためのいくつかのあまり「重要」のための唯一の2つの状態、弱い参照、場合ファントム参照方法は、十分なメモリ空間を可能にされます十分なメモリがGCを放棄した後ならば、それは、メモリ内に残ります。

強い参照:オブジェクトobj = - 新しいオブジェクト()

ソフト引用:メモリのオーバーフローが発生する前に、それが回復します

弱参照:専用のメモリが十分であるかない場合でも、次のGC処理の前に生きるためのオブジェクト弱参照は、アウトリサイクル

偽の引用:彼らの生存期間に影響を与えません仮想基準があります。オブジェクトが通知するとコレクタ後に回収されている場合のみ。

1.4。メソッド回復ゾーン

一定の「廃棄物の定数」内かどうかを決定するための方法:

  1. クラスのすべてのインスタンスは、Javaヒープ・クラスは、任意のインスタンスに存在しない、回復されました
  2. クラスローダの負荷が回収されます
  3. (反射を含む)のjava.lang.Classクラスのオブジェクトが参照されていないどこ

例:ガベージコレクションが発生したときに一定のプールへのStringオブジェクト「ABC」が、この一定のStringオブジェクトへの参照が存在しない、オブジェクトが回収されます

2.ガベージコレクションアルゴリズム

 2.1マーク - 明確なアルゴリズム

アルゴリズムは「マーク」と「クリア」2つの段階に分けています。マークフェーズは、objectタグ、クリーンアップフェーズでのクリーンアップを回復する必要があります

短所:1.クリア標識および効率は高くありません。不連続2.ラージオブジェクトを割り当てる必要が、事前に別のガベージコレクションをトリガーする際に、クリア後に破片を大量に生成されます

(2.1に基づいて)2.2のレプリケーションのアルゴリズム(共通

容量は、それらのそれぞれ、メモリがなくなったときに、そこにも、オブジェクトの別のものにコピーされ、その後、メモリ空間を一掃するために使用されている、各時間全体で、二つの等しい量に分割されていますセミメモリ回収ゾーン

長所:高効率

短所:小元の検索の半分にメモリ、コピー、低動作効率

この方法を使用して近代的な商業用の仮想マシン。ターゲット「デッドChaosheng西」の98%のため、それほどメモリ空間は大小サバイバーエデンスペースに分割されています。回復した場合、コピーはサバイバーの別の部分にエデンとサバイバーオブジェクトにまだ生きている、その後、以前に使用されている領域をクリアします。サバイバーが十分でない場合、保証メカニズムを割り当てることによって、古い年に直接、古い時代でオブジェクトを確保します。

2.3マーク - (2.1に基づいて)照合アルゴリズム

比較するとマーク - スイープ、ないクリア処理におけるリサイクル可能なオブジェクトのクリーンアップにはなく、生きているオブジェクトには、境界のメモリ外を一掃、一方の端部に向かって移動します。

2.4。世代コレクションアルゴリズム

サイクルを生き延びた人に応じて、メモリは、各時代の特性に応じて適切なアルゴリズムを使用して、いくつかの(新世代/古い世代)に分割されています。コピーアルゴリズムで死ん限り、より多くの2.1または2.2と一緒に暮らします

3.メモリ割り当ての回復戦略

全体的に、ヒープ上に割り当てられ、主にエデン、エデン地区の新世代に分布する十分なスペースがない場合は、MinorGC(新世代GC)の発生は、高齢者への保証に十分でない場合、オリジナルの標的領域、発生します。

ラージ・オブジェクトは、歳入り

オブジェクトの長期生存率は、歳入り

PS:GCの歳以上の10倍に比べて遅くマイナーGC(フルGC /主なGC)

おすすめ

転載: www.cnblogs.com/tillnight1996/p/12000082.html