Java Garbage Collectorとは何ですか
Java Garbage Collectorは、Java仮想マシン(JVM)の3つの重要なモジュールの1つです(他の2つは通訳とマルチスレッドメカニズムです)。自動メモリ割り当て(メモリ割り当て)と自動メモリコレクション(ガベージ収集)関数をアプリケーションに提供します。両方の操作がJavaヒープで発生します(メモリの一部は高速です)。特定の時点で、オブジェクトに複数の基準を指している場合、オブジェクトはライブです。それ以外の場合、それはゴミと見なされ、ゴミコレクターによってリサイクルされて再利用できます。ごみ収集操作には、CPU、スレッド、時間、その他のリソースが必要であるため、ごみ収集操作がリアルタイムで発生しないことを理解するのは簡単です(オブジェクトは死亡直後にリリースされます)。メモリが消費されるか、特定のインジケータに到達すると(しきい値、0.75などのメモリとトータルメモリの比率が使用されます)、ガベージコレクション操作がトリガーされます。オブジェクトの死には例外があります。スレッドがまだ実行されている限り、タイプjava.lang.threadのオブジェクトが参照されていなくても、リサイクルされません。
リサイクルメカニズム
統計分析によると、Javaのほとんどのオブジェクト(他の高レベルの言語を含む)には短いライフサイクルがあるため、Javaメモリは世代で管理されています。世代間部門の目的は、パフォーマンスを最大化するために、さまざまな世代のメモリブロックに異なる管理戦略(アルゴリズム)を使用することにすぎません。古い世代と比較して、若い世代は通常はるかに小さく、リサイクル周波数が高く、速度が高くなります。高齢者はリサイクル頻度が低く、長い時間がかかります。記憶は若い世代に分配されます。若い世代のオブジェクトは、複数のリサイクルサイクルの後、自動的に古い世代に促進されます。
デザインの選択
設計の選択は、JVMガベージコレクターとJVMパフォーマンスインジケーターの実装の難易度に影響を及ぼし、さまざまなシナリオに適しています。リサイクルアルゴリズムのスタイル特性について説明します。
シングルスレッドシリアルリサイクル対マルチスレッドパラレルリサイクル
リサイクル操作自体が複数のスレッドで処理されるかどうかの問題。シングルスレッドリサイクルの利点は、単純で、簡単に実装でき、フラグメントがほとんどなく、単一コアマシンに適していることです。マルチスレッドパラレルリサイクルは、マルチコアマシンでCPUリソースを完全に利用し、リサイクル時間を短縮し、生産性を向上させることができます。欠点は、それが複雑であり、一部のフラグメントがリサイクルされない可能性があることです。
リサイクル中のアプリケーションスレッドを一時停止し、リサイクルとアプリケーションの同時
リサイクル操作中にアプリケーションスレッドを一時停止するかどうかを発行します。一時停止するアプリケーションスレッドの利点は、それらがシンプルで正確で、比較的きれいにクリーンアップし、短時間(CPUリソースを除く)クリーンアップであることです。不利な点は、アプリケーションスレッドを一時停止すると、ゴミ収集サイクル中にアプリケーションの応答時間が延長され、非常に高いリアルタイムパフォーマンスのシステムがより敏感になることです。リサイクルとアプリケーションスレッドの並列処理の利点は、アプリケーションの反応時間が比較的安定していることであり、欠点は、達成が困難であり、洗浄頻度が高いこと、および断片化の可能性があることです。
不マッジフリードメモリフラグメントvsマージ解放されたメモリフラグメントvsアライブを新しい場所にコピーする
これらの3つのオプションは、死んだメモリブロックフラグメントを管理する方法を説明しています。通常、死んだ記憶フラグメントは、ヒープ内のどこにでも散らばっています。それらが管理されていない場合、2つの問題があります。利用可能なメモリを見つけるためにメモリの割り当てが遅い場合、小さなフラグメントはメモリ廃棄物につながります(大きな配列など、大きな連続メモリフラグメントが必要です)。管理する方法は2つあります。リビングメモリをメモリブロックの一端に移動するか、使用可能なメモリの開始位置を記録するか、単にリビングメモリを新しいメモリ領域にコピーするだけで、元のメモリブロックが完全に空です。
パフォーマンスメトリック
①。生産性(スループット)
非回復時間とより長い期間内の合計時間の比率(長期間のみが意味があります)。システムの動作効率の測定。
②。ごみ収集オーバーヘッド
回復時間と総時間の長い期間の比率。生産性に対応して、合計は100%です。
③。一時停止時間
Java仮想マシンがゴミをリサイクルすると、一部のアルゴリズムはすべてのアプリケーションスレッドの実行を一時停止し、一部のシステムは一時停止時間間隔に敏感である可能性があります。
④。収集の頻度
回復するのにどれくらい時間がかかりますか?
⑤。メモリ使用量のサイズ(フットプリント)
ヒープのサイズのように。
⑥。リアルタイム(プロンプト)
オブジェクトがオブジェクトからメモリをリサイクルするのにどれくらい時間がかかりますか?
ごみ収集の種類
すべてのリサイクルタイプは、世代の技術に基づいています。 Java Hotspot Virtual Machineには、3世代、若い世代、古い世代、恒久的な世代が含まれます。
①世代の世代
クラス、方法、およびその説明情報を保存します。初期サイズと最大値は、2つのオプションオプション-XX:permsize = 64mおよび-xx:maxpermsize = 128mで指定できます。通常、このパラメーターを調整する必要はありません。デフォルトの永続的な生成サイズで十分ですが、ロードされていて十分でないクラスが多すぎる場合は、最大値を調整します。
②世代の世代
複数のリサイクルサイクルがまだ生きている後も生き残ってアップグレードする若い世代の主要なストレージオブジェクト。もちろん、いくつかの大きなメモリの割り当てでは、それらは永続的な世代に直接割り当てられることもあります(極端な例は、若い世代がまったく節約できないということです)。
YOUNG世代
ほとんどのメモリの割り当ておよびリサイクルアクションは、若い世代で発生します。下の図に示すように、若い世代は、元の領域(エデン)と2つの小さな生存地域(生存者)の3つの領域に分かれています。 2つの生存領域は、その機能からの間に分けられます。ほとんどのオブジェクトは元のエリアに割り当てられており、複数のガベージコレクション操作がまだ生存しているのはリビングエリアに配置されています。
シリアルコレクター
単一のスレッドがリサイクル操作を実行し、リサイクル期間中にすべてのアプリケーションスレッドの実行を一時停止します。クライアントモードのデフォルトのリサイクル業者は、-xx:+useSerialgcコマンドラインオプションを介して指定されることを余儀なくされます。
若い世代のためのミノールコレクション
エデンエリアの生き残ったオブジェクトをエリアに移動します。エリアをインストールできない場合は、古い世代に直接移動します。地域からインストールできない場合は、古い世代に直接移動します。地域からのエリアが非常に古い場合は、古い世代にアップグレードしてください。リサイクルが完了した後、エデンとエリアからの両方が空になります。現時点では、fromとto交換の機能は、リサイクルの各ラウンドの前に、とそれに変更され、空になります。デザインの選択は複製です。
hold高齢者向けのリサイクルアルゴリズム(フルコレクション)
高齢者のリサイクルは、マーク、スイープ、マージの3つのステップに分かれています。マーキングステージはすべての生き残ったオブジェクトをマークし、クリアリングステージはすべての死んだオブジェクトを放出し、マージステージはすべての生き残ったオブジェクトを古い世代の前の部分にマージし、すべての自由な断片をすべて残します。デザインの選択は、メモリの断片化を減らすためにマージされます。
平行コレクター
複数のスレッドを使用して、同時にガベージコレクションを実行します。マルチコア環境は、CPUリソースを完全に利用し、リサイクル時間を短縮し、JVMの生産性を高め、デフォルトのリサイクルをサーバーモードで使用できます。シリアルリサイクルと同様に、すべてのアプリケーションスレッドの実行はリサイクル中に停止されます。 -xx:+useparallelgcコマンドラインオプションを介して指定を余儀なくされました。
若い世代のためのミノールコレクション
複数のスレッドを使用してゴミをリサイクルし、各スレッドのアルゴリズムはシリアルリサイクル業者のアルゴリズムと同じです。
hold高齢者向けのリサイクルアルゴリズム(フルコレクション)
古い世代は、シリアルリサイクルと同じで、まだ単一のスレッドがあります。
並列圧縮コレクション
若い世代と古い世代のリサイクルは、マルチスレッドによって処理されます。コマンドオプション-xx:+useparalleloldgc、xx:parallelgcthreads = 3で指定できます。さらに、並列リサイクルに参加するスレッドの数をさらに指定できます。シリアルリサイクルと同様に、すべてのアプリケーションスレッドの実行はリサイクル中に停止されます。並列リサイクルと比較して、古い世代のリサイクル時間が短く、一時停止時間が短縮されます。 xx:+useparalleloldgcコマンドラインオプションを介して指定を強制されます。
若い世代のためのミノールコレクション
パラレルコレクターと同じ
hold高齢者向けのリサイクルアルゴリズム(フルコレクション)
高齢者は、マーキング、カウント、マージの3つのステップに分かれています。分裂の概念はここで使用され、古い世代は固定サイズの多くの領域に分かれています。マーキング段階では、すべての生き残ったオブジェクトはNグループに分割されます(リサイクルされたスレッドの数は、リサイクルされたスレッドの数と同じでなければなりません)。各スレッドは独自のグループに対して独立して責任を負い、存続するオブジェクトの位置と地域の生存率情報(地域)をマークし、並列としてマークします。統計段階では、各領域の生存率がカウントされます。原則として、正面の生存率は比較的高くなっています。正面から後ろまで、合併する価値のある開始位置が見つかります(ほとんどのオブジェクトが生き残る領域は統合する価値がありません)。統計段階はシリアル(単一スレッド)です。マージ段階では、統計段階の情報に基づいて、複数のスレッドが存続するオブジェクトをある領域から別の領域に並列にコピーします。
同時マークスイープコレクター
低遅延コレクターとしても知られているこのアプリケーションは、さまざまな手段で短時間中断されます。基本的に、操作をマージしてコピーすることなく、アプリケーションと同時にリサイクル操作を実行します。コマンドライン-xx:+useConcmarksweepgcを介して指定されている場合、シングルコアまたはデュアルコアシステムでの増分リサイクルモード-xx:+useConcmarksweepgcの使用も指定することもできます。インクリメンタルリサイクルとは、リサイクル操作を複数のフラグメントに分割し、1つのフラグメントを実行し、CPUリソースをアプリケーションにリリースし、将来の特定の時点で最後の結果をリサイクルし続けることを指します。目的はまた、遅延を減らすことです。
若い世代のためのミノールコレクション
パラレルコレクターと同じ
hold高齢者向けのリサイクルアルゴリズム(フルコレクション)
それは、最初のマーク、同時マーク、発言、および同時スイープの4つのステップに分かれています。特に注意してください、マージ操作はありませんので、フラグメントがあります。
Java Garbage Collectorのパフォーマンス評価ツール
①xx:+printgcdetailsおよびxx:+printgctimestamps
開始時刻、期間、各世代の予備メモリなどに関する情報。
②jmap[options] pid
JAMP 2043 2043プロセスでロードされた共有オブジェクトを表示します。通常、dllファイル。
JMAP -HEAP 2043構成情報とメモリヒープの使用を確認します。
JMAP -PermStat 2043永久発電の負荷ステータスを確認します。
JMAP -HISTO 2043クラスの読み込みとメモリの使用量を確認します。
③jstat[options] pid
JSTAT -Class 2043クラスの読み込み、アンロード、メモリの使用。
JSTAT -GC 2043 GC実行ステータス。
ポストスクリプト
Javaは、自動選択と自動パフォーマンスの最適化関数を提供します。ガベージコレクターのチューニングを行う前に、最初に心配しているパフォーマンスインジケーターをリストし、JVMにコマンドラインを介して心配しているパフォーマンスインジケーターを伝え、JVMによって自動的に調整されます。満足していない場合は、ゴミコレクターを指定できます。 OutOfMemoryは通常、ヒープメモリが不十分なため、-XMX1024Mおよび-XX:MaxPermsize = 128Mコマンドラインを調整できます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。