データ統合のJVMの一部
ランタイムデータ領域
[仮想マシン、ローカルエリアスタック、プログラムカウンタ]領域に分割されているプライベートメモリ領域スレッドJavaメソッド、スレッド共有領域[Javaヒープ、メソッド領域]、ダイレクトメモリ(不JVM GC管理)
1、スレッドプライベート部分
1.1、プログラムカウンタ
プログラムカウンタ(プログラムカウンタレジスタ)小さなメモリ空間は、現在のスレッドは、行番号インジケータで実行されるバイトコードです。
1.2、仮想マシンのスタック
同じスレッドのライフサイクル。スタックJava仮想マシン(Java仮想マシンスタック)を実行する方法を説明するJavaメモリモデルで実行する方法が、各方法は、ローカル変数のテーブルを格納するためのスタックフレーム(スタックフレーム)、オペランドスタック、動的リンクを作成します輸出およびその他の情報。実行手順が完了するまで各方法は、仮想マシン・プロセス・スタック内のスタックをプッシュするために、対応するスタックフレームと呼ばれます。
1.3、ネイティブメソッドスタック
ネイティブメソッドスタック(ネイティブメソッドスタック)と、仮想マシンのスタックが果たした役割はメソッドスタックサービスを実行するためのJava仮想マシンのことを除いて、非常に似ており、地元のネイティブメソッドスタック方式では、サービスでした。ネイティブメソッドスタックのHotSpot VMとVMスタックを合わせ。
2、スレッドシェア
2.1、ヒープ(ヒープ)
そして、Javaヒープメモリに格納されて作成されたオブジェクトの配列は、ガベージコレクタは、メモリのガベージコレクションの中で最も重要な領域です。古い時代(サバイバーへサバイバー地区と地域からエデン地区)新世代:Javaヒープはまたに分けることができますので、現代のVMは基本的に、世代コレクションアルゴリズムを使用して。Javaスタックは限り論理的に連続することができて、不連続な物理メモリ空間であってもよいです。
2.2方法面積/永久世代(素子空間)
JVMを格納するための生成永久クラス情報(パーマネント世代)は、定数、静的変数、例えば、GC世代コレクタ領域は、方法に及ぶとのHotSpot VM、Javaヒープの、すなわち永久生成が達成されるようJITコンパイルされたコードデータをロードされますメソッド領域は、そのようなホットスポットのガベージコレクタは、メソッド領域のための特別なメモリマネージャ(永久バンドのメインターゲットメモリ回復を開発回復するためのものであり、一定のプールを入力しなくても、このメモリを管理するように、Javaヒープを管理するようにすることができアンインストール、その収入は、一般的に非常に小さいです)。
Java8では、永久に代わっ地域「メタデータ領域」(要素スペース)が置き換えと呼ばれ、削除されました。違いは次のとおりです。次元の仮想マシンではなく、スペースが、ローカルメモリを使用します。
2.3、実行時定数プール
実行時定数プール(実行時定数プールは)方法の一部の領域に属しています。クラス、フィールド、メソッド、およびインターフェース記述情報等に加えて、クラス・ファイルのバージョン、定数プール情報(定数プールテーブル)があり、様々なリテラルシンボルを格納するため、この部分に発生した基準をコンパイルクラスのメソッドに格納されたコンテンツは、プールの時定数領域を実行ロード。(天然に定数プールを含む)クラスファイルの各部分のためにJava仮想マシンフォーマット各バイトが仕様の要件を満たさなければならないデータを格納するのに使用され、厳格なルールを有し、これは、仮想マシンによって認識されるであろう、ロードと実行。
2.4ダイレクトメモリ
ダイレクト・メモリ(ダイレクト・メモリ)は、仮想マシンのデータ領域の一部が実行されているが、仮想マシンのメモリ領域は、本明細書に定義されていません。JDK1.4新しく追加されたNIO(新しい入力/出力)チャネル(チャネル)の導入に基づいて、タイプ、およびI / Oモードでのバッファ(バッファ)には、直接外部ヒープメモリが割り当てられたネイティブ関数を使用することができ、次いで動作させるための基準としてのJava DirectByteBufferにこのメモリをオブジェクトのスタックを格納することによって。
第二に、ガベージコレクションアルゴリズム
1、どのようにごみを決定するには?
1.1リファレンスカウント
これは、参照カウント(参照カウント)オブジェクトを回収することができるか否かにより判断されます
1.2、到達可能性解析
到達可能性分析(到達可能性分析)によるJavaはオブジェクト生きているかどうかを判断します。検索するための出発点として、「GCのルーツ」オブジェクトの一連。オブジェクトは、任意の基準GCルーツ・チェーンに接続されていない場合、それは、この被験体が利用可能でないことを証明しています。[シモンズ:利用できないオブジェクトは(到達不能オブジェクト)オブジェクトの回収と同等ではない、リサイクルオブジェクトが利用できないオブジェクトとなる少なくとも二つのマーキングプロセスです。2つのマークは、リサイクル可能なオブジェクトが残っているの後、それは回復に直面するだろう]
2、マークスイープアルゴリズム
「マーク - クリア」(マーク・スイープ)アルゴリズムは、アルゴリズムは「フラグ」と「クリア」2つの段階に分けられ、すべてのオブジェクトが明確な位相空間を回復し、マークされたオブジェクトによって占有相マーカーを回復する必要がマークします。
短所:
- 効率
- スペースの問題
3、複製アルゴリズム
「コピー」(コピー)アルゴリズムは、メモリ容量によれば、2つの等しい大きさにのみ、それらのいずれかのたびに分割されます。この1つはメモリが不足するとコピー、それはまだ、その後使用済みの1時間クリーンアップのメモリ空間を入れ、別の部分へのオブジェクトの上に存在します。
図4に示すように、照合アルゴリズムをマーキング
次の工程は、次に、全ての生存オブジェクトが最後に移動され得る直接外部端子境界メモリを一掃するように、(マークコンパクト)アルゴリズム、タグ付けプロセスとマークスイープアルゴリズム - 「マーク仕上げ」。
5、世代コレクションアルゴリズム
別のオブジェクトに基づいて「世代別コレクション」(世代別コレクション)アルゴリズムは、生きているメモリ・サイクルは、いくつかの作品に分かれています。個々の養子縁組の特性を収集する最も適切な方法。一般的にリサイクルのために古い時代を使用して、新しい世代に使用されるレプリケーションアルゴリズム - - 「マークを終えた」アルゴリズム「のクリアマーク」や
三、Javaの4つの参照型の
1、強い参照(強い参照)
プログラムで流行しているが、限り強い参照があると、ガベージコレクタは、参照されるオブジェクトをオフに回復したことがありません。
2、ソフト参照(ソフト参照)
そこのオブジェクトのいくつかを記述するために使用されるが、システムメモリは、それがリサイクルされますが不足しているシステムメモリ空間があるときそれは、回復できないことが十分にあるときに、必須ではありません。
3、弱参照(弱い参照)
非本質的なオブジェクトを記述するために使用され、弱参照のためのオブジェクトは、長期的にガベージコレクタなどとして、関係なく、JVMのメモリが十分ではありませんが、メモリはオブジェクトによって占め再利用が常にあります。
図4に示すように、仮想基準(ファントム参照)
ゴーストやファントムと呼ばれているが、引用文献、およびキューへの参照を組み合わせて使用する必要があり、唯一の目的は、オブジェクトシステムは、コレクタを回復されるときに通知を受信することです。(ガベージコレクションオブジェクトトラッキング状態)
第四に、ガベージコレクタ
ガベージコレクションのアルゴリズムは、方法論のガベージコレクションで、ガベージコレクタは、メモリ回復の実現です。Javaのヒープメモリは二つの部分、新旧世代のコピーおよびマークスイープガベージコレクションアルゴリズムの新世代の、主な用途に分けて、古いのは、主にマークコンパクトガベージコレクションのアルゴリズムを使用していました。
1、シリアルコレクタ
コレクターは、それが終わりを収集するまでの時間のガベージコレクタの間に他のすべての作業スレッドを中断しなければならない、シングルスレッド(の古いマーク・コンパクト化アルゴリズムを使用して、新しい生成アルゴリズムを使用してコピーする)です。この作品は、仮想マシンによって自動的に開始し、バックグラウンドで自動的に完了します。
2、ParNewガベージコレクタ
それは行為およびシリアル・コレクターの残りの部分はまったく同じ、マルチスレッドのガベージコレクション外の使用に加えて、マルチスレッド版のシリアルコレクターです。
図3に示すように、並列スカベンジコレクタ
コレクタの新しい世代に属する、使用マルチスレッドのように、コピーアルゴリズムを使用し、彼の焦点は、プログラムにある「優先スループット」コレクタとしても知られている(スループット)を制御スループットに達します。
4、シリアル旧コレクター
シリアルは古いのコレクターのバージョンは、「マーク・コンパクト」アルゴリズムを使用して、また、シングルスレッドのコレクターです。
5、パラレルオールド・コレクター
昔の並列スカベンジコレクタのバージョン、マルチスレッドおよび「マーク・コンパクト」アルゴリズムを使用することです。
6、CMSコレクタ
並行マークスイープ(CMS)コレクタは「マーク・スイープ」アルゴリズムに基づいて、最短目標復旧時間コレクタの一時停止され、
次の4つのステップに分け:
初期マーク
ただ、直接関連するGCのルーツオブジェクトをマークし、非常に速く、まだすべてのワーカースレッドの停止を必要とします。
並行マーク
追跡プロセスGCのルーツ、およびユーザー・スレッドは、ワーカースレッドを一時停止することなく、一緒に働きます。
ラベルを変更
ユーザスレッドが動作し、マークの変更にリードを生成し続けるので、オブジェクトの一部が並行マーク中に補正することをそれらをマークします。
同時クリア
クリアGCのルーツの到達不能オブジェクト、およびユーザー・スレッドは、ワーカースレッドを一時停止することなく、一緒に働きます。
図7に示すように、G1のコレクタ
G1ガベージコレクタは、サーバーアプリケーションのためのコレクタであります
それは特性があります。
- 並列並行
- 世代別コレクション
- 空間統合
- 予測可能な一時停止
G1コレクタを使用する場合、Javaヒープメモリのレイアウトは、他のコレクターによって大きく変化するであろう、それは全体のJavaヒープは、同じサイズの複数の独立した領域(地域)に分割されているであろう
G1コレクタは、一般的なプロセスを動作させます。
- 初期マーク
- 並行マーク
- 最終マーク
- フィルターのリサイクル