Javaのマルチスレッド - ランニングスタック解析

クラスファイルの内容

実行されるバイトコード・プログラムを含むJavaクラスファイル、コンパクトなデータフォーマットは、任意の中間分離することなく、クラスファイルのバイナリストリームに厳密に従って配置され、ファイルの冒頭に0xcafebabe(16進)特別なフラグを有しています。

Javaのマルチスレッド - ランニングスタック解析

JVMランタイムデータ領域

Javaのマルチスレッド - ランニングスタック解析
作成および破棄しながら、スレッドのライフサイクルで、各スレッドが別々のスペースを持っています:専用スレッド
のスレッドを共有する:すべてのスレッドは、仮想マシンの作成および破棄またはGCで、このメモリのデータにアクセスすることができます

メソッド地区

JVMは、情報を格納するためのクラス、定数、静的変数、コンパイルされたコード及び他のデータをロードします。
仮想マシン仕様これは論理的な部門です。仮想マシンを達成するための具体的な実装に応じて。
例えば:メタデータのメソッド領域java7、java8空間におけるホットスポット永久通路にOracle、およびGC機構によって領域を管理します

ヒープ

Javaのマルチスレッド - ランニングスタック解析
古い時代、新生代(エデン、サバイバーから、サバイバーへ:ヒープメモリはまたに分けることができます )
JVMの起動保管されたオブジェクトによって作成されたインスタンス。ガベージコレクタは、主に、ヒープメモリを管理しています。
完全な場合は、OutOfMemoryErrorがあるでしょう。

VMスタック

VMスタックは、この空間内の各スレッドには、専用スペースがあります。
スレッドスタック(スタックフレーム)の組成からスタック複数のフレーム。
スレッドは、1つまたは複数の方法、スタックフレームに対応する方法を実行することができます。
スタックフレームは含まれています:ローカル変数テーブル、オペランドスタック、ダイナミックリンク、方法は、アドレス情報や他のアクセサリーを返します。
デフォルトの最大スタックメモリが1Mである、にStackOverflowErrorを超えてスローされます

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

そして、仮想マシンのスタック機能は、仮想マシンの実行スタックは、ネイティブメソッドスタックは仮想マシンのローカルネイティブの方法を用いて調製されるJavaメソッド準備されるように、仮想マシンに似ています。
仮想マシンの仕様が異なる仮想マシンのメーカーによって実装されるように、特定の実装を提供していません。
HotSpot仮想マシン、仮想マシンのスタックと同じのネイティブメソッドスタックの実装。同様に、サイズを超えた後もにStackOverflowErrorをスローすることができます。

プログラムカウンタ

プログラムカウンタ(プログラムカウンタレジスタが)バイトコード実行スレッドの現在の位置を記録し、バイトコード命令は、ネイティブメソッドは、カウンタ値がnullの場合、実行、アドレスに格納されています。
このスペース内の各スレッドには、より少ないメモリスペースを取って、プライベートなスペースがあります。
同時にCPUは、命令の唯一つのスレッドが実行されます。JVMは、スイッチングおよびマルチスレッドCPUの割り当てモードの実行時間交代ます。スレッドスイッチを投稿するには、正しい実行位置を復元するために、プログラムカウンタによって必要とされます。

おすすめ

転載: blog.51cto.com/flowstone/2432376