Java内存模型总结-基本概念
2018-02-08 10:32
134 查看
JMM控制主内存与每个线程的本地内存的交互,保证java程序的内存可见性
1、重排序(只针对单处理器和单线程)
编译器优化重排序
处理器重排序:要求Java编译器生成指令序列时,插入特定类型的内存屏障指令,禁止特性类型的处理器重排序。
2、happens-before
happens-before并不意味着前一个的操作必须在后一个操作之前完成,仅仅要求前一个操作的操作结果对后一个操作可见,且前一个操作按顺序排在后一个操作之前。
程序顺序规则
监视器锁规则
volatile变量规则
4)传递性
3、重排序
重排序指编译器和处理器为了优化程序性能而对指令序列重新进行排序。
4、as-if-serial
无论怎样重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能改变。
在多线程中,对存在控制依赖的操作重排序,可能会导致执行结果发生变化。
5、顺序一致性模型
顺序一致性模型保证单线程操作按照程序顺序执行(JMM不能保证单线程操作按照顺序执行,在临界区内可能会发生指令重排序)
保证所有线程只能看到一致的操作执行顺序(JMM中会先保存到本地内存中,最后再写到主内存)
6、总线工作机制
数据通过总线在内存与处理器之间传递。内存和处理器之间的数据传递需要一系列的操作,这些操作称为总线事务。总线事务分为读/写事务。读事务是从内存读取事务到处理器,写事务是通过总线将处理器中的数据写到内存。一个线程在执行总线事务期间,总线会禁止其他线程访问内存。保证多线程时总线的串行访问,单个总线事务之中的内存读写具有原子性。
7、JMM不保证long和double型变量写操作的原子性
JVM在32位上的处理器上运行时,64位的long和double的写操作可能会分为两个32位的写操作来执行。而且这两个32位的写操作可能会被分配到不同的事务总线上去执行,此时对64位变量的写操作不具有原子性。
从JSR-133内存模型开始(JDK5),仅仅只允许把一个64位的long/double型变量的写操作分为32位写操作来执行,读操作必须保证其原子性。
【参考资料】《JAVA并发编程的艺术》
1、重排序(只针对单处理器和单线程)
编译器优化重排序
处理器重排序:要求Java编译器生成指令序列时,插入特定类型的内存屏障指令,禁止特性类型的处理器重排序。
2、happens-before
happens-before并不意味着前一个的操作必须在后一个操作之前完成,仅仅要求前一个操作的操作结果对后一个操作可见,且前一个操作按顺序排在后一个操作之前。
程序顺序规则
监视器锁规则
volatile变量规则
4)传递性
3、重排序
重排序指编译器和处理器为了优化程序性能而对指令序列重新进行排序。
4、as-if-serial
无论怎样重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能改变。
在多线程中,对存在控制依赖的操作重排序,可能会导致执行结果发生变化。
5、顺序一致性模型
顺序一致性模型保证单线程操作按照程序顺序执行(JMM不能保证单线程操作按照顺序执行,在临界区内可能会发生指令重排序)
保证所有线程只能看到一致的操作执行顺序(JMM中会先保存到本地内存中,最后再写到主内存)
6、总线工作机制
数据通过总线在内存与处理器之间传递。内存和处理器之间的数据传递需要一系列的操作,这些操作称为总线事务。总线事务分为读/写事务。读事务是从内存读取事务到处理器,写事务是通过总线将处理器中的数据写到内存。一个线程在执行总线事务期间,总线会禁止其他线程访问内存。保证多线程时总线的串行访问,单个总线事务之中的内存读写具有原子性。
7、JMM不保证long和double型变量写操作的原子性
JVM在32位上的处理器上运行时,64位的long和double的写操作可能会分为两个32位的写操作来执行。而且这两个32位的写操作可能会被分配到不同的事务总线上去执行,此时对64位变量的写操作不具有原子性。
从JSR-133内存模型开始(JDK5),仅仅只允许把一个64位的long/double型变量的写操作分为32位写操作来执行,读操作必须保证其原子性。
【参考资料】《JAVA并发编程的艺术》
相关文章推荐
- 【转】JVM基础概念总结:数据类型、堆与栈、基本类型与引用类型
- GIT基本概念和用法总结
- 【iOS7的一些总结】13、UIScrollView的概念和基本使用方法
- C++基本概念总结——构造函数的public/protected/private语义
- JAVA基本概念及语法总结
- xpath基本概念总结
- JVM调优总结(一)--基本概念
- 学习数据库总结的一些基本概念
- C语言基本概念总结
- 基本概念总结
- Weblogic学习(三) Weblogic的一些基本概念总结
- 网站基本概念总结
- 超神~java内存模型~基本概念
- 信息安全学习总结(1):基本概念
- Java基础总结-基本语法概念-3
- 关于多线程学习总结(一) 基本概念了解
- GIT基本概念和用法总结
- mysql 复制 总结(一) 基本概念以及环境搭建
- 木马百科知识总结[概念,种类,基本防范]
- 设计模式基本概念总结(一)