あなたは、最適化されたJVMと話 - ガベージコレクションのイラストを

個人ブログのナビゲーションページ(クリック、右側にリンク個人のブログを開くために):ダニエルは、テクノロジ・スタックにあなたを取ります 

このことから我々はいくつかのJVMのチューニングの問題を探求し始めました。JVMのチューニングでは焦点は、システムが高い同時実行のボトルネックを達成するためになると、ガベージコレクション、ガベージコレクションと不可分である「自動」ガベージコレクション技術ならば、我々は、JVMの必要な監視と規制を必要としています。

これは、最適化シリーズの最初の記事のJVMで、以下のその他を参照してください。

以下のためのチューニングの前に、私たちはその動作原理を理解する必要があり、Javaのガベージコレクションのガベージコレクションは、多くの場合、1960年に誕生した「GC」と呼ばれる、MITのLisp言語、半世紀後、現在、非常に成熟しています。したがって、この章で理解するために、3つの側面から示しています。

リサイクルするために必要なものオブジェクト1.?

2.ときに回復?

3.どのようにリサイクルするには?

 

回収されるまず、

メモリは、それぞれの用途を有する異なるデータ領域、多数のためにそれを管理するJavaプログラムの実行時にJava仮想マシンに分割されます。主に以下のコンポーネントが含まれています。

 

1、プログラムカウンタ

メモリ空間は、我々が無視することができ占有プログラムカウンタは、それが各スレッドの行番号インジケータで実行されるバイトコードです。

2、仮想マシンのスタック

Java仮想マシンのスレッドスタックは、プライベート、ライフサイクルと同じスレッドです。メモリモデルは、それが説明し、実行する方法です。ローカル変数、オペランドスタック、動的リンク、方法輸出を記憶する一方。

3、ネイティブメソッドスタック

仮想マシンのスタックに類似のネイティブメソッドスタックは、それがはいネイティブメソッドを呼び出します。

4、ヒープ

JVMのヒープメモリ管理で最大の一つです。これは、ストアオブジェクトのインスタンスを共有しています。またとして知られている「GCヒープ。」ガベージコレクションのための主要な管理領域

5.メソッド領域

メソッド領域は、メモリ領域を共有しています。これは、仮想マシンに格納された情報の主なタイプがロードされたコンパイルされた定数、静的変数、タイムコンパイラ(JIT)コードデータです。

 

これらは、実行時の構成で、我々だけでなく、ヒープに存在するが、ヒープ管理の管理プログラムに不可欠であるが、また、他の分野に存在する一般的なメモリ使用量を参照してくださいJVMのメインメモリですが、我々はちょうどこれに限定されるものではないことができ面積は、メモリリークがある場合は特に、我々は、ヒープメモリの例調査に加えて、持っている仮想マシンのスタックおよびメソッド領域を考慮する必要があります。

知っているとメモリ管理のにそれらの領域には、私も時にガベージコレクションのためにこれらの領域を知る必要があります。

 

第二に、回復

 

ガベージコレクションの前にいるかどうか、我々は、オブジェクトが生き残る一つのことを判断しなければなりませんか?これは、オブジェクトが実行可能なアルゴリズムであるかどうかを決定することを含みます。

 

参照カウントアルゴリズム

その場所を参照し、故障を参照カウンタ+ 1、カウンタ-1。任意の時間カウンタオブジェクト0がもはや使用されているときはいつでも、オブジェクトのカウンタへの参照を追加しません。

利点:シンプル、高効率決意、Pythonのactionscript3、広く使用。

短所:参照それぞれの問題は、オブジェクト間で解決することはできません。Javaは採用されていません

 

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

オブジェクトは、任意の基準GCRootsチェーンに接続されていない参照の探索経路トラバースチェーンと呼ばれるこれらのノードから下方に検索を開始するために、出発点として、「GCのルーツ」と呼ばれるオブジェクトの一連によってこれが実証されたときオブジェクトが使用できません。

、物体の右側はGCRoots時間に到達できないような、オブジェクトが再利用可能に決定することができます。

 

Javaでは、GCRootオブジェクトには以下のものが含まれて:

*仮想マシンのスタックには、オブジェクトを参照しました。

*静的プロパティ参照内のオブジェクトのメソッド。

*メソッドゾーン一定の参照オブジェクト。

* JNIネイティブメソッドは、オブジェクトを参照しました。

以上を踏まえ、我々は現在のオブジェクトを回収することができた時間までGCRootにないときにことを知ることができるゴミを満たしています。

これは、これらのオブジェクトは、必ずしも、この時点でのみ、本当に死のオブジェクトを宣言するために、彼らは「保護観察」のステージの種類に存在する文章ができ、死ななければならないではありません。少なくとも二つのマーカーを通過するには:

まず:到達可能性解析対象がGCRootsに接続されていない発見された後、この時間はマークされ、初めて上映されます。

第二:オブジェクト(ファイナライズをカバーしていない)方法、またはファイナライズ()メソッドは、仮想マシンを介して呼び出されたが、この時間は、実行するために必要に応じて認識されません。

 

第三に、どのようにリサイクルへ

 

二つの点の上に説明した後、我々は、おそらくどのオブジェクトがリサイクルされ、回復の基盤は何ですが、仕事の回復を回復することができ、特定のすべてのオブジェクトをスキャンする、それが最初のニーズを実装することは簡単ではない、理解し、スキャン「の世界を止める」オブジェクトの間に必要に続くが、凍結することができる、またはあなただけの彼の参照情報が変更されたスキャン、あなただけの何をしたん。

 

世代回復

私たちは、世代別ガベージコレクションのアルゴリズムでの回復軌道を説明OBJECT1から来ます。

 

1、オブジェクト1新築、エデンエリアで生まれた新世代。

2、マイナーGCは、Fromsuvivorスペース、今回も新しい世代への移行、まだ生きOBJECT1。

3、マイナーGC、まだ生きているオブジェクト1、この時は、となり、アルゴリズム、今回オブジェクト1歳の年齢+ 1をコピーしてToSuvオブジェクト1の領域に移動します。

4、マイナーGCは、まだ生きているオブジェクト1、及びオブジェクト1歳でこの時間遺族はので、この場合には、半分の生存者の目標に達しなかった、アルゴリズムをコピーしてfromSuvとTosuvエリアインターチェンジは、生き残ったオブジェクトはTosuvに移動されます。

5、マイナーGC、オブジェクト1まだ生きている、とオブジェクトのオブジェクト1歳でこの時間生存者がオブジェクト1は、歳のエリアに移動されて、より多くの遺族(toSuv領域が充填された)の半分以上に達しています。

6、オブジェクト1は、しばらくの間存続した後、今度はオブジェクト1到達不能GcRootsを見つけましたが、今回は古いスペース年比は、majorGCを(もfullGCと考えられるが、接触にガベージコレクタの特定のニーズにすることができます)、トリガー、今回のしきい値を超えましたオブジェクト1を回収しました。fullGCトリガーは世界を停止します。

 

新生代、我々は、オブジェクトを言及している歳以上では、オブジェクトは状態の生存者の下で生き残る、すぐに古い世代のオブジェクトに昇格されなかった彼らができる前に、あまりにも多くの影響を引き起こすために、古い世代を避けるために、彼らは次の基準を満たす必要があります。プロモーション:

1は、マイナーGC後、年齢+1は、ときに、より古い時代に移動する15の(デフォルト)時間、より、生存者の標的領域に存続します。

2、動的オブジェクトは、生存空間の場合、今年の目標に等しいかよりも、同じ年齢のすべてのオブジェクトとSurvivor領域の半分以上全体のサイズ、グレード大きいが、古い時代に直接移動します。

上記のアイデア世代別ガベージコレクションを使用して、死への生存からのオブジェクトの履歴を経験しました。明確なアルゴリズム(マーク・スイープ)アルゴリズムやマーク - - 新生代この間、複製アルゴリズムは、古い時代に、用いられる標識があるかもしれない、使用される照合アルゴリズム、これらは別の領域に基づいてガベージコレクションアルゴリズムです実装は、我々はコレクションアルゴリズムのこれらのタイプの原則を達成するために見えます。

 

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

 

メソッド明確なマーク(マークスイープ)

クリア標識法は、ガベージコレクションのアルゴリズムのためのイデオロギー的な基盤です。相マーキングおよびクリアランス相:クリアラベル付けアルゴリズムは、2つのフェーズに分け拒否します。

マーク・フェーズは、ルートを通じて、ルートから到達可能なすべてのオブジェクトをマークし、非標識オブジェクトがガベージオブジェクト参照ではありません。

ステージクリア、マークされていないすべてのオブジェクトをクリアします。

  

レプリケーションアルゴリズム(コピー)

レプリケーションアルゴリズム、元のメモリ空間は、二分割の一つのコピーのみ、ガベージコレクションと、それぞれ、メモリはライブオブジェクト未使用のメモリ・ブロックに適用され、その後に使用されるメモリブロックを消去していますオブジェクトのすべて。

 

タグの圧縮アルゴリズム(マーク・コンパクト)

マーク圧縮アルゴリズムは、古い時代のアルゴリズムのリサイクルです。

マークフェーズとマークを作るためのオブジェクトまでのために、明確なコンセンサスアルゴリズムをマーク。

クリーンアップの段階では、生産回避メモリの断片化のために、すべてのライブオブジェクトがメモリの一端に圧縮。

 

第四に、ガベージコレクタ

ガベージコレクタは、ガベージコレクタ異なるベンダーは非常に異なっている、一般的なガベージコレクタを使用するとさまざまな世代のニーズに作用し、ガベージコレクションの具体的な実装です。以下は、様々なガベージコレクタの組み合わせです。

 

長所と短所の様々な組み合わせ:

 

新世代GCポリシー

旧世代GCポリシー

説明

コンビネーション1

シリアル

シリアル古いです

シリアルおよびシリアル旧は、すべてのアプリケーション・スレッドを中断するためにGCによって特徴づけられる単一スレッド化行動のGC、です。

コンビネーション2

シリアル

CMS +シリアル旧

CMS(並行マークスイープ)が同時実行の仕事を達成するためにGC、GCスレッドとアプリケーション・スレッドによって複雑になる、あなたはすべてのアプリケーション・スレッドを中断する必要はありません。また、CMS GCが失敗したとき、それは自動的にSerial旧戦略GCを使用します。

コンビネーション3

ParNew

CMS

使用-XX:+ UseParNewGCオプションが開きます。ParNew並列バージョン、シリアル、あなたは、GCスレッドの数、CPUの数のためのGCのデフォルトのスレッド数を指定することができます。あなたは-XXを使用することができます。ParallelGCThreadsオプションは、GC内のスレッドの数を指定します。

+ UseConcMarkSweepGCをオプション、デフォルトParNew GC戦略の新世代:あなたはオプション-XXを指定した場合。

コンビネーション4

ParNew

シリアル古いです

使用-XX:+ UseParNewGCオプションが開きます。ParNew GCは、デフォルトでは、旧世代のシリアル旧GCポリシーを使用して、戦略の新世代を使用して。

コンビネーション5

パラレル清掃を

シリアル古いです

並列スカベンジ戦略は、制御スループットに焦点です:アプリケーションの稼働時間/(稼働時間+ GC印加時間)、これは永続的な背景を実行するアプリケーションのために、できるだけ高いとしてCPU使用率を行いますことを示し、そしてより多くのアプリケーションをやりとりすることがありません。

6の組み合わせ

パラレル清掃を

パラレル古いです

パラレル旧シリアル旧の並列版であります

 

7の組み合わせ

G1GC

G1GC

-XX:+ UnlockExperimentalVMOptions -XX:+ UseG1GC#オープン

-XX:MaxGCPauseMillis = 50#一時停止時間目標

-XX:GCPauseIntervalMillis = 200#間隔ターゲットを一時停止

-XX:若い世代の+ G1YoungGenSize = 512メートル#サイズ

-XX:SurvivorRatio =比例地区#6存続

付属のJava / C / C ++ /機械学習/アルゴリズムとデータ構造/フロントエンド/アンドロイド/パイソン/プログラマ読み/シングル書籍図書Daquanは:

(乾燥した個人ブログでそこ開くには、右クリックしてください):技術的なドライ開花を
===== >> ①[Javaのダニエルは、高度なへの道であなたを取る] << ====
===== >> ②[+ ACMアルゴリズムデータ構造ダニエルは、高度なへの道であなたを取る] << ===
===== >> ③[データベースダニエルは高度への道であなたを取る] << == ===
===== >> ④[ダニエルWebフロントエンドの高度への道であなたを取るために] << ====
===== >> ⑤[機械学習のPythonとダニエルあなたにエントリを取ります高度なロード] << ====
===== >> ⑥[建築家ダニエルは高度への道であなたを取る] << =====
===== >> ⑦[C ++ダニエルは、道路上をお連れに進ん] << ====
===== >> ⑧[ダニエルは高度への道であなたを取るのiOS] << ====
=====> > ⑨[ウェブセキュリティダニエルは、高度なへの道であなたを取る] ===== <<
===== >> ⑩[Linuxオペレーティングシステムを、ダニエルは高度への道であなたを取る] = << ====

何の未収果物はありません、あなたの若い友人は、友人がテクニックを学びたい願って、道路の方法ですべての障害を克服することは、技術に結びつける本を理解して、コードをノック、原理を理解し、実践を行くことになります決定しましたそれはあなたの将来、あなたの夢を生活、あなたの仕事をもたらすでしょう。

公開された47元の記事 ウォンの賞賛0 ビュー272

おすすめ

転載: blog.csdn.net/weixin_41663412/article/details/104886328