JavaとJVMメモリモデルのランタイムデータ領域の違い

まず、二つは全く異なる概念である、それが混同してはなりません。

1. Javaのメモリモデルとは何ですか?

Javaメモリー・モデルは、視認性を解決するために、主にマルチスレッドJava言語(実際に操作量が共有メモリに対応)、マルチスレッドの場合には指定、共有変数マルチスレッドを解決アトミック性の問題の書き込み変数を共有していますオペレーティング競合。

一般的なマルチスレッドプログラミングは次のようになります。

  • 結果として非見ます
  • 肉眼では、プログラムの正確さを検出することができません
  • 異なるパフォーマンスの異なるオペレーティング・プラットフォーム
  • エラーが再現することは困難です

そうJVM仕様は、マルチスレッドメモリ動作のルールの一部のJava仮想マシンを定義し、主に揮発性及び同期二つのキーワードに反映。

  • 揮発性がマルチスレッドの読み取り時に視認性を確保し、JVMによって提供される共有変数への書き込みがあり、主な役割は、共有変数の揮発性の修正は、並べ替えをしない(CPUキャッシュとキャッシュ・コヒーレンシ・プロトコルとここに関連)の禁止を、キャッシュされています(並べ替え:はるかに高速メモリリードよりもCPUの状態での処理の最適化をし、書き込み速度は、パフォーマンスを向上させるために実行される)が、アトミック操作共有変数を保証するものではありません。
  • JVM同期ロック機構は、ロック操作のロック領域、可視、整然としたことを確実にするために、原子メモリバリア特性によって提供されます。
  • ロック競合が目的である(静的クラス・オブジェクトがロックされているが、ロックが現在の非静的なオブジェクト、すなわちこれは、ロックブロックロック方法は、カスタムオブジェクトである)メモリ・オブジェクト・ヘッダ「ソブリン」のヒープメモリにおいて、唯一スレッドは、ロック領域によってロック排他的な保証するために、「主権」、すなわち排他的、アトミック操作を取得することができます。
  • 前とコード(ロードバリア)とストレージ障壁(バリアストア)をロードした後、バリアを添加することにより、ロッキングブロックの視認性または共有変数を操作する方法を確実にするために
  • 障壁(バリアを取得)し、前と後のコード放出障壁(リリースバリア)を添加することにより得、共有変数の操作をロックまたはブロックする整然とした方法を確保するため

2. JVMランタイムデータ領域は何ですか?

JVMランタイムデータ領域は、メソッド地区、ヒープメモリ、仮想マシン・スタック、ネイティブメソッドスタック、プログラムカウンタを含む、着手Javaプロセスのメモリを実行している論理的なJava仮想マシンに分割されています。これらのブロックは、実際には、Java仮想マシンの動作中に異なるデータ構造により、メモリの使用に適用する別のJavaプロセスです。

  • 方法エリア:定数、静的変数、コンパイルされたコード及び他のデータを格納するためのJVMロードクラス情報。異なる仮想マシンは、異なる実装、恒久的要素スペース上のメソッドエリアJava7、Java8方法ゾーンに代わってのHotSpotの神託を持っており、GCメカニズムによって管理されています。
  • VMスタック:スペースの各スレッドにプライベートは、スタックフレーム、スタックフレームに対応する方法の複数のスタックフレームは、局所変数テーブル、オペランドスタック、動的リンク、住所方法、付加情報等を含みます。デフォルトの最大スタックメモリ1Mは、StackOverflowErrorが超えて走りました。
  • ネイティブメソッドがスタック:仮想マシンに似たスタックを、仮想マシンは準備のネイティブおよびネイティブメソッドを使用することです。具体的な実現は、仮想マシンのメーカーによって達成されます。キャストにStackOverflowErrorのサイズを超えている間、一貫性のある仮想マシンのスタックを達成するためのHotSpot仮想マシン。
  • プログラムカウンタ:ネイティブメソッドがnullの場合は現在の実行スレッドの記録位置、バイトコードは、バイトコード命令は、アドレスに格納されています。CPUは命令で同時に唯一つのスレッドを実行することができ、スレッドスイッチは、プログラムカウンタによって正しい位置を復元するために行われます。
  • ヒープメモリ:すべてのスレッドが変更されたオブジェクトのインスタンスが格納されてアクセスすることができますが、データ領域が占めるスペースの大部分は、古いものとのHotSpot仮想マシン内の年の新しい世代に分けられている、新世代は、エデンエリアとSurvivor0エリアに分かれていますSurvivor1エリア。

おすすめ

転載: blog.51cto.com/14230003/2443407