博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并发编程之JMM
阅读量:6480 次
发布时间:2019-06-23

本文共 986 字,大约阅读时间需要 3 分钟。

hot3.png

一、JMM定义

Java内存模型即Java Memory ModelJMM)JMM决定一个线程对共享变量的写入何时对另一个线程可见内存可见性),从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本

二、JVMJava内存模型的实现

三、硬件内存架构

四、支撑Java内存模型的基础原理

1、指令重排序

在执行程序时,为了提高性能,编译器和处理器会对指令做重排序,JMM可以通过插入特定类型的Memory Barrier来禁止。volatile的实现(如果一个变量是volatile修饰的,JMM会在写入这个字段之后插进一个Write-Barrier指令,并在读这个字段之前插入一个Read-Barrier指令)

2、as-if-serial

不管怎么重排序,单线程下的执行结果不能被改变,编译器、runtime和处理器都必须遵守as-if-serial语义。

3、内存屏障(Memory Barrier

或内存栅栏,是一个CPU指令

4、happens-before

在JMM中,如果一个操作的执行结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系,这个的两个操作既可以在同一个线程,也可以在不同的两个线程中。

1、程序顺序规则:一个线程中的每个操作,happens-before于该线程中任意的后续操作。
2、监视器锁规则:对一个锁的解锁操作,happens-before于随后对这个锁的加锁操作。
3、volatile域规则:对一个volatile域的写操作,happens-before于任意线程后续对这个volatile域的读。
4、传递性规则:如果 A happens-before B,且 B happens-before C,那么A happens-before C。
注意:两个操作之间具有happens-before关系,并不意味前一个操作必须要在后一个操作之前执行!仅仅要求前一个操作的执行结果,对于后一个操作是可见的。

 

Ref:

转载于:https://my.oschina.net/u/3787772/blog/2086094

你可能感兴趣的文章
最小Linux操作系统RancherOS的初期使用感受
查看>>
Wi-Fi联盟为低功耗Wi-Fi定名“Halow”
查看>>
网络安全的四层智能化革命
查看>>
RSA2016值得关注的十大威胁情报公司
查看>>
Unicorn首席黑客杨卿:无线电的攻与防
查看>>
Windows 10中常用的15项PowerShell高级任务
查看>>
JavaScript中的遍历详解
查看>>
5G比4G强在哪?高性能、低延迟与高容量
查看>>
物联网时代,智能硬件将如何影响我们的生活
查看>>
企业向云端迁移 这13大挑战一定要清楚
查看>>
如何在部署中和部署后降低私有云成本?
查看>>
存储革命风暴:SCM为何将替代闪存?
查看>>
《资本说》对话银杏谷陈向明
查看>>
影响光伏广告牌发电的几个关键因素
查看>>
唐青昊:Marvel Team 这一年 | 黑客 2016
查看>>
刘强东飞27个小时为联想站台,联想拿身家性命押注AI
查看>>
传统煤炭企业跨入了光伏行业 项目并网运行顺利
查看>>
微软和IBM的云服务变革:区块链即服务
查看>>
TensorFlow教程之资源 4.2 BibTex 引用
查看>>
在创业者中做创业,Onevest 宣布收购创业者社交平台FounderDating
查看>>