メモリモデル-java並行プログラミング

1.基本概念

  プログラム:静的、特定の機能を完了するために使用されるコード。

  プロセス:ダイナミック、プログラムを実行しています

  スレッド:単位プロセスの実際の動作は、プロセスは、1つ以上のスレッドを含むことができます。

2. JVMのメモリ領域

  • ヒープ:スレッド共有、ストア​​インスタンスオブジェクト(OOM)
  • 仮想マシンのスタック:スレッドのプライベートアドレス、ランタイムメモリモデル(OOM)でのJavaメソッド、ローカル変数ストレージ、データの参照型、オペランドスタック
  • ネイティブメソッドスタック
  • メソッド地区:スレッド共有、保存クラス情報、定数、静的変数など
  • プログラムカウンタ:プライベート糸、次の命令の格納アドレス

3. Javaのメモリモデル(Javaのメモリモデル、JMM、抽象モデル)

役割:インタラクティブ仕様のメモリ空間と作業空間データ

メインメモリ:スレッドによる情報共有

ワーキングメモリ:個人情報を通します。ワーキングメモリに直接割り当てられた基本データ型、。ワーキングメモリに格納されたアドレスの参照は、オブジェクト参照は、ヒープに格納されています。

仕事:

  スレッドには、プライベートデータ、作業スペースで直接変更を変更します

  スレッドには、ワークスペースに共有データ、コピーデータを修正し、ワークスペースを変更すると、変更はメモリをリフレッシュし、完了しています。

4.ハードウェアのメモリアーキテクチャ

CPUキャッシュ・コヒーレンシの問題の解決策:

1.バスロック:CPUのスループットの減少

2.キャッシュコヒーレンスプロトコルに

キャッシュデータのキャッシュ操作データにCPU、データが共有されている場合、変数は、修飾された、新規登録、およびメモリデータを更新読んだとき

キャッシュラインが無効に設定され、他のCPUは、メモリからデータを読み取ることができます

 5. Javaスレッドのハードウェアプロセッサ

6. 3つの並行プログラミング特性

アトミック:X = 1不可分

可視性:スレッドは、自分のワークスペース内のデータを操作することができます

発注:効率:シーケンスプログラムは、必ずしも順序(再コンパイルされた実行順序、命令の並べ替え、目的ではありません

JMMの3つの機能が確実に

  1. JMMと不可分
  1. X = 10原子書き込み共有データがアトミックでない場合には(読み書き)、原子を有する個人データである場合  
  2. Y = X原子なし
    1. Xワークスペースのデータの読み出し(アトミック)
    2. X Yの値は、(原子)を書き込みます
  3. いいえ、原子Iなかっ++
    1. 私はワークスペースに読み込みます
    2. +1;
    3. メモリへの更新結果
  4. Z = Z + 1原子なし
    1. Zは、ワークスペースに読み込みます
    2. +1;
    3. メモリへの更新結果

アトミック操作複数のアトミックことなく一緒にマージします

保証の:

シンクロナイズド

JUCロック的ロック

 

JMM与可见性

     Volatile

     Synchronized:加锁

     JUC   JUC   Lock的lock

 

  1. JMM与有序性 

  Volatile:

  Synchronized:

Happens-before原则:

  1. 程序次序原则
  2. 锁定原则  :后一次加锁必须等前一次解锁
  3. Volatile原则:霸道原则
  4. 传递原则:A---B ---C    A--C

 

おすすめ

転載: www.cnblogs.com/yintingting/p/11409370.html