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つの機能が確実に
- JMMと不可分
- X = 10原子書き込み共有データがアトミックでない場合には(読み書き)、原子を有する個人データである場合
- Y = X原子なし
- Xワークスペースのデータの読み出し(アトミック)
- X Yの値は、(原子)を書き込みます
- いいえ、原子Iなかっ++
- 私はワークスペースに読み込みます
- +1;
- メモリへの更新結果
- Z = Z + 1原子なし
- Zは、ワークスペースに読み込みます
- +1;
- メモリへの更新結果
アトミック操作複数のアトミックことなく一緒にマージします
保証の:
シンクロナイズド
JUCロック的ロック
JMM与可见性
Volatile
Synchronized:加锁
JUC JUC Lock的lock
- JMM与有序性
Volatile:
Synchronized:
Happens-before原则:
- 程序次序原则
- 锁定原则 :后一次加锁必须等前一次解锁
- Volatile原则:霸道原则
- 传递原则:A---B ---C A--C