Javaのメモリモデル(Javaのメモリモデル、JMM)

今日はああ、簡単なチャットのJavaメモリモデルではなく、JVMのメモリ構造何と呼ばれています。

JMMは、言語レベルのメモリモデルで、プロセッサのハードウェアモデルは、ハードウェアレベルで、Javaメモリー・モデルは、メモリの基本的な保証の可視性です。可視性を実現するように、私たちの揮発性メモリには礎石を提供します。主な目的は、Javaプログラマは、アクセス様々なプラットフォームで一貫性のある結果を達成できるようにすることです

JMMは、別のスレッドが表示されているときに、スレッドが共有変数への書き込みを行うことを決定、これはJMMの主な役割で、すぐに読むの他のスレッドを変更した後、特に共有変数への読み取りおよび書き込みに、。ビューの抽象的な点から、JMMは、スレッドとメインメモリとの間に抽象的関係を定義しています。メインメモリ(メインメモリ)内のスレッド間でメモリ変数を共有し、各スレッドは、専用のローカルメモリ(ローカルメモリ)を持っています、ローカルメモリが共有変数を読み出し/書き込みするスレッドのコピーを保存します。JMMローカルメモリは抽象的な概念であり、本物ではないです。これは、キャッシュ、書き込みバッファ、レジスタとその他のハードウェアおよびコンパイラの最適化をカバーしています。抽象Javaメモリー・モデルは、図1に概略的に示されています。

画像

説明揮発性私たちの基本原理の前で言えば、この実現には、意味のJavaメモリモデルを使用することです。私たちは、メモリの可視性を達成するための詳細情報を保護するために、関心のある読者は、記事が公共の早い番号行わ見ることができます達成揮発性の原則を根底を

なぜJMM?

1に、ソース・コードからの命令のシーケンスを並べ替えます

プログラムを実行すると、多くの場合、プログラムの実行結果と実行結果を確認するために最適化された命令の順序を変更しますプロセッサのコンパイラで、パフォーマンスを向上させるために、本と一致しているが、個々のステートメントにコードシーケンス入力が実行されていることを保証するものではありません。同じ順序。(もちろん、の場合にはシングルスレッドと言います)。

メモリバリアを並べ替える前に、メモリバリアはなく、後続の命令を追加することに相当する再配列修飾命令コードが存在しないように揮発性。

2.事前発生主義(最初に発生)

たまたま、前に定義しました:

  • 事前発生した場合の動作のさらなる動作、第2動作の動作の実行結果が表示されますが、第2の動作前に最初の操作の実行の順序。
  • 事前発生関係が存在する2つの操作の間、必ずしも順序指定された実行コードを意味するものではありません。実行結果と一致して並べ替えの実装の結果が結果、前に起こる場合は、それが可能です。

Bへの最初の操作A操作がBの前に発生し、オペレータAがBにより製造することができることは、実際に発生した場合、Java(登録商標)メモリ・モデルで定義された2つの操作の間の第1の部分的順序関係を発生「、影響を観察しました「メモリ内の共有変数の値を変更するなど、メソッドを呼び出し、メッセージを送信します。例えば:

//在线程 A 执行  1
i =  2;`
// 在线程 B 执行   2
j = i;`
// 在线程 C 执行   3
i =  3;
  • 仮定する実行順序1 - > 3 - > 2:3は、jの値ということです。

  • 仮定する実行順序1 - > 2 - > 3:2、次いでjの値です。

私たちは、1、2、3順序に従って実行したい場合。だけにして一貫性を確保するために同期。

要するに:

  • JMMメモリモデルによって、可視性を達成するための不揮発性メモリは、保証することができました。しかし、彼らは、異なるプラットフォームの詳細に注意を払うように私たちを必要としません。揮発性変数の変更が変更されると、JMMは、メインメモリにフラッシュスレッドローカルメモリの共有変数に対応するであろう。

  • 揮発性可変時間を読み出す場合、スレッドは、無効な設定に対応したローカルメモリをJMM、メインメモリから共有変数を読み込みます。

  • 揮発性の原則を満足する場合に事前発生、無効化コマンド並べ替えを。

親愛なる読者は、優れたエッセイの親指や社会的関心の数が私の最大のサポートになります感じます。最新の技術記事を得るために、国民の関心番号へようこそ。
JavaStorm.png

おすすめ

転載: www.cnblogs.com/uniqueDong/p/10944267.html