并发编程-java内存模型
1. 基本概念
程序:靜態(tài),用于完成某些功能的代碼。
進程:動態(tài),運行中的程序
線程:進程中的實際運作單位,一個進程可以包含一個或多個線程。
2. JVM內存區(qū)域
- 堆:線程共享,存放實例對象 (OOM)
- 虛擬機棧 :線程私有 ,Java方法在運行時的內存模型 (OOM),存放局部變量、引用類型數(shù)據(jù)的地址、操作數(shù)棧
- 本地方法棧
- 方法區(qū) : 線程共享,存放類信息,常量,靜態(tài)變量等
- 程序計數(shù)器 : 線程私有, 存放下一條指令的地址
3. java內存模型(java memory model, JMM,抽象的模型)
作用: 規(guī)范內存空間和工作空間數(shù)據(jù)的交互
主內存: 線程共享的信息
工作內存:線程私有的信息。基本數(shù)據(jù)類型,直接分配到工作內存。引用的地址存放在工作內存,引用的對象存放在堆中。
工作方式:
線程修改私有數(shù)據(jù),直接在工作空間改
線程修改共享數(shù)據(jù),把數(shù)據(jù)復制到工作空間中,在工作空間中修改,修改完成后,刷新到內存。
4. 硬件內存架構
CPU緩存一致性問題的解決方案:
1. 總線加鎖(粒度太大) : 降低CPU的吞吐量
2. 緩存一致性協(xié)議(MESI)
讀操作:不做任何事情,把cache中的數(shù)據(jù)讀到寄存器
寫操作:發(fā)出信號通知其他CPU將該變量的cache line置為無效。其他CPU要訪問這個變量只能從內存中讀取。
?5. java線程與硬件處理器
6. 并發(fā)編程的三個特性
原子性:不可分割? x=1
可見性:線程只能操作自己工作空間中的數(shù)據(jù)
有序性:程序中的順序不一定就是執(zhí)行的順序(編譯重排序、指令重排序,目的:提高效率
JMM對三個特征的保證
多個原子性的操作合并到一起沒有原子性
保證方式:
Synchronized
JUC ? Lock的lock
?
JMM與可見性 :?線程只能操作自己工作空間中的數(shù)據(jù)
?
?? ? Volatile
?? ? Synchronized:加鎖
? ? ?JUC ? JUC ? Lock的lock
?
? Volatile:
? Synchronized:
Happens-before原則:
?
轉載于:https://www.cnblogs.com/yintingting/p/11409370.html
總結
以上是生活随笔為你收集整理的并发编程-java内存模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《安全测试指南》——信息收集测试【学习笔
- 下一篇: 并发编程-volatile和synchr