文档章节

并发编程之JMM

s
 still5656
发布于 09/20 11:22
字数 646
阅读 8
收藏 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

© 著作权归作者所有

共有 人打赏支持
下一篇: ZGC回收器
s
粉丝 2
博文 24
码字总数 26368
作品 0
崇明
私信 提问
基于JVM原理、JMM模型和CPU缓存模型深入理解Java并发编程

许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存、CPU、缓存等予以说明。实际上,在实...

leoliu168
11/08
0
0
学习笔记二:Java内存模型以及happens-before规则

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

刘祖鹏
07/12
0
0
java并发编程系列-内存模型基础

java线程之间的通信对程序开发人员是完全透明的,内存的可见性问题很容易困扰很多开发人员。本篇博文将揭开java内存模型的神秘面纱,来看看内存模型到底是怎样的。 并发编程模型的分类 并发编...

起个名忒难
2017/11/18
0
0
java 内存模型

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

___k先生
2017/11/09
0
0
Java并发编程(1)-Java内存模型

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

玉树临枫
07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
12
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
18
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
23
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
昨天
12
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
昨天
33
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部