`
364434006
  • 浏览: 591878 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JMM简介

    博客分类:
  • Java
 
阅读更多

JMM:Java Memory Model(Java内存模型),围绕着在并发过程中如何处理可见性、原子性、有序性这三个特性而建立的模型。

可见性:JMM提供了volatile变量定义、final、synchronized块来保证可见性。
例如:线程a在将共享变量x=1写入主内存的时候,如何保证线程b读取共享变量x的值为1,这就是JMM做的事情。JMM通过控制主内存与每个线程的本地内存之间的交互,来为java程序员提供内存可见性保证。

原子性:JMM提供保证了访问基本数据类型的原子性(其实在写一个工作内存变量到主内存是分主要两步:store、write),但是实际业务处理场景往往是需要更大的范围的原子性保证,所以模型也提供了synchronized块来保证

有序性:这个概念是相对而言的,如果在本线程内,所有的操作都是有序的,如果在一个线程观察另一个线程,所有的操作都是无序的,前句是“线程内表现为串行行为”,后句是“指令的重排序”和“工作内存和主内存同步延迟”现象,模型提供了volatile和synchronized来保证线程之间操作的有序性。

重排序:在执行程序时为了提高性能,编译器和处理器常常会对指令做重排序(编译器、处理器),就是因为这些重排序,所以可能会导致多线程程序出现内存可见性问题(数据安全问题)和有序性问题。
JMM是如何处理的呢?
对于编译器,JMM的编译器重排序规则会禁止特定类型的编译器重排序
对于处理器重排序,JMM的处理器重排序规则会要求java编译器在生成指令序列时,插入特定类型的内存屏障(memory barriers,intel称之为memory fence)指令,通过内存屏障指令来禁止特定类型的处理器重排序
总之一句话,JMM是通过禁止特定类型的编译器重排序和处理器重排序来为程序员提供一致的内存可见性保证。

A线程具体什么时候刷新共享数据到主内存是不确定的,假设我们使用了同步原语(synchronized,volatile和final),那么刷新的时间是确定的,例如:线程A释放锁后会同步到主内存,线程B获取锁后会同步主内存数据
即“A线程释放锁--B线程获取锁”可以实现A,B线程之间的通信

分享到:
评论

相关推荐

    Java内存模型详解JMM.docx

    JMM简介 JMM是Java语言规范中的一部分,它描述了程序中各个变量之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节。JMM允许编译器和缓存以数据在处理器特定的缓存(或寄存器)...

    13 问题的根源—Java内存模型简介.pdf

    2. **JMM简介**:JMM提供了一种规范,即Happens-Before规则,确保在多线程环境中,数据的可见性和有序性。如果没有使用`synchronized`或`volatile`等同步机制,JVM可以对操作进行重排序,这可能导致不同线程看到的...

    Java内存模型精辟总结

    1. **JMM简介** - 内存模型概述:JMM描述了程序中变量的存储、读取和同步机制。它规定了当多个线程访问同一变量时,如何保证数据的正确性。JMM允许编译器和硬件对数据进行优化,但同时也提供了如`synchronized`和`...

    java内存模型

    1. **JMM简介** - 内存模型概述:JMM规定了在多线程环境下,共享变量的读写行为,以及线程之间的通信规则。它考虑到了编译器优化、处理器缓存、多核处理器等因素对内存访问的影响,确保了并发程序的正确性。 - JSR...

    java内存模型.pdf

    1. **JMM简介** - 内存模型概述:JMM确保了多线程环境下的正确性,它规定了如何在共享内存系统中处理数据的读写。JMM允许编译器和硬件优化,但同时也引入了一些复杂性,例如数据可能在处理器缓存、寄存器或主内存...

    JAVA-内存模型.docx

    JMM简介** JSR133(Java Memory Model and Thread-safe Initialization)是对Java内存模型的一次重大改进,旨在修复早期JMM存在的问题,提高跨平台的兼容性和性能。JSR133的目标包括: - 保持现有的类型安全保证 - ...

    Java内存模型,全面了解Java内存模型,减少代码bug

    #### 一、JMM简介 ##### 1. 内存模型概述 Java内存模型(Java Memory Model, JMM)是Java虚拟机(JVM)的一部分,它规定了程序中各种变量(包括实例字段、静态字段和数组元素)的访问规则,以及在实际计算机系统中将...

    美国钻石JMM-512-V512技术手册(英文).rar

    "JMM512-V512技术手册.pdf"很可能是设备的主要技术文档,详细介绍了设备的所有功能和操作方法,而"JMM512-V512简介.pdf"则可能是对设备的简明概述,适合初次接触的用户快速了解设备的基本信息。 总之,《美国钻石...

    java内存模型(有助理解多线程)

    #### JMM简介 Java内存模型(JMM,Java Memory Model)是Java虚拟机规范中一个重要的概念,它规定了程序中各种变量(包括实例字段、静态字段和数组元素)的访问规则,以及在并发环境下如何保证内存的可见性和有序性...

    Java内存模型详解

    JMM简介 ##### i. 内存模型概述 Java内存模型(Java Memory Model, JMM)是Java虚拟机(JVM)的一部分,用于规定程序中的各种变量(包括实例字段、静态字段和数组元素等)在多个线程共享内存中的读写行为。JMM的...

    深入理解Java内存模型.程晓明(带书签文字版).pdf

    基础 4 并发编程模型的分类 4 Java 内存模型的抽象 4 重排序 6 处理器重排序与内存屏障指令 7 happens-before 10 重排序 13 数据依赖性 13 as-if-serial 语义 13 ...个人简介 74 参考文献 74

    使用Java的Memory Model实现一个简单的计数器.txt

    Java Memory Model (JMM) 是Java虚拟机(JVM)的一个核心概念,它定义了程序中的各种变量(线程共享变量)的访问规则以及这些变量在各个线程之间的可见性问题。JMM的核心目标是解决由线程交替执行和现代计算机内存系统...

Global site tag (gtag.js) - Google Analytics