文档章节

并发编程之JMM学习摘要

 狠一点
发布于 09/20 11:22
字数 650
阅读 7
收藏 1

一、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://blog.csdn.net/lxm55913153/article/details/79208126

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 18
码字总数 20806
作品 0
java 内存模型

学习,程晓明的《深入理解Java内存模型》。 摘要 文章内容有并发、内存模型、重排序、内存屏障、happens-before规则、as-if-serial语义、顺序一致性内存模型、volatile、锁、final。 并发 并...

___k先生
2017/11/09
0
0
学习笔记二:Java内存模型以及happens-before规则

JMM的介绍 在上一篇文章中总结了线程的状态转换和一些基本操作,对多线程已经有一点基本的认识了,如果多线程编程只有这么简单,那我们就不必费劲周折的去学习它了。 在多线程中稍微不注意就...

刘祖鹏
07/12
0
0
JVM内存结构 VS Java内存模型 VS Java对象模型

Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模型和...

Java架构
07/11
0
0
java高并发之从零到放弃

前言 这是一个长篇博客,希望大家关注我并且一起学习java高并发 废话不多说,直接开始 并行和并发 并行:多个线程同时处理多个任务 并发:多个线程处理同个任务,不一定要同时 下面用图来描述...

野梦M
2017/11/22
0
0
Java并发编程(1)-Java内存模型

本文主要是学习Java内存模型的笔记以及加上自己的一些案例分享,如有错误之处请指出。 一 Java内存模型的基础 1、并发编程模型的两个问题   在并发编程中,需要了解并会处理这两个关键问题...

玉树临枫
07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

网站优化技术包括哪些内容

网站优化Incapsula超越简单的内容缓存,可以优化网站性能或应用程序的用户体验,优化包括内容缩小、动态文件压缩、图像压缩、会话重用优化、TCP优化和连接预合并。 动态文件压缩,普通的web...

上树的熊
13分钟前
0
0
业界 | Teradata全球调研:四分之三企业分析项目数据科学家“缺货”

当地时间10月15日,2018 Teradata全球用户大会在美国拉斯维加斯举行。来自15个国家的3000多位数据人参与了本次峰会。 大会第一日,Teradata发布了针对“企业数据分析”的2018年调研结果。 调...

Mr_zebra
15分钟前
0
0
java 通过Unsafe不使用构造器直接创建对象

这里有一个User没有无参构造 public class User { public User(String username, String password) { this.username = username; this.password = password; } ......

ValSong
16分钟前
0
0
eureka 高可用配置 unavailable-replicas 问题.

在使用spring cloud 配置eureka 高可用配置时.发现配置的节点一直无法获取心跳. eureka控制台界面上一直显示的挂载节点 是 unavailable-replicas 查看日志.就是获取心跳的地址不对. 默认的健...

拖鞋莫止步
17分钟前
0
0
Vue2 模板template的四种写法

<div id="app">    <h1>我是直接写在构造器里的模板1</h1></div> <template id="demo3">    <h1 style="color:red">我是选项模板3</h1></template> <script type="x-t......

粒子数反转
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部