内存模型描述的是程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节。
在C或C++中, 可以利用不同操作平台下的内存模型来编写并发程序. 但是, 这带给开发人员的是, 更高的学习成本.相比之下, Java利用了自身虚拟机的优势, 使内存模型不束缚于具体的处理器架构, 通过Java内存模型真正实现了跨平台.(针对hotspot jvm, jrockit等不同的jvm, 内存模型也会不相同)
线程操作某个对象时,执行顺序如下:
1) 从主内存复制变量到当前的工作内存 read load
2) 执行代码,改变共享变量值 use assign
3) 用工作内存数据刷新主存内容 store write
java内存模型是围绕着在并发过程中如何处理原子性、可见性和有序性这三个特性来建立的。
原子性:通过read load use assign store write这六个原子性操作来保证原子性(除了long和double的基本类型都是原子性操作)
其实还有lock和unlock,它的范围更大,但虚拟机未把这两个直接开放给用户使用,而是提供了更高层次的字节码指令monitorenter和monitorexit来隐式地使用这两个操作,反映到代码中的就是synchronized代码块
可见性:可见性指当一个线程修改了共享变量的值,其他线程能够立即得知这个修改。
除了volatile,java还有两个关键字能实现可见性,synchronized和final
synchronized里面对一个变量执行unlock操作之前,会把此变量同步回主内存中(store write)。
final因为不可变,所以可见,呵呵~~,但是要注意this引用的逃逸,这样会使其他的线程通过该引用访问到"初始化了一半的对象"
有序性:java程序的有序性总结为一句话,如果在本地线程观察,所有的操作都是有序的,如果在另外一个线程观察该线程,发现所有的操作都是无序的,前半句是指(线程内表现为串行的语义 Within-Thread As-If-Serial Semantics),后半句是指"指令重排序现象和工作内存和主内存同步延迟的现象。volatile从语义上就禁止了重排序,而synchronized规定了持有同一个锁的多个同步块只能串行的进入,也能保证操作的有序性
分享到:
相关推荐
在深入理解Java内存模型(JMM)及并发三大特性方面,我们需要先建立对多线程、共享内存模型、可见性、有序性和原子性的基础概念。Java内存模型是Java并发编程的核心,它定义了共享变量在多线程环境中的行为规则和...
Java模拟器JMM3.0是一款专为智能手机设计的软件,旨在为用户提供Java应用程序和游戏的支持。在智能手机领域,Java由于其跨平台性和强大的功能,曾经是开发移动应用的主流选择,尤其是对于早期的非智能手机。JMM3.0...
Java内存模型详解JMM Java内存模型(Java Memory Model,JMM)是Java虚拟机(JVM)中的一种内存模型,它描述了程序中各个变量之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节...
Java内存模型,简称JMM(Java Memory Model),是Java虚拟机规范中定义的一个抽象概念,它描述了在多线程环境下,如何保证各个线程对共享数据的一致性视图。JMM的主要目标是定义程序中各个变量的访问规则,以及在...
### 三问JMM——有关JVM内存模型的深度解析 #### 前言 近期,在诚信通开源研究小组的专题学习分享会上,我们针对Java内存模型(JMM)进行了深入探讨,现将JMM相关的一些核心概念进行梳理,以便更好地理解和把握JMM的...
《美国钻石JMM-512-V512技术手册》是针对一款专业级音频处理设备的详尽指南,主要面向工程师、技术人员以及对音频系统有深入兴趣的用户。这份手册详细介绍了JMM-512-V512的功能、操作方法以及其在音频制作中的应用。...
Java内存模型(JMM,Java Memory Model)是Java平台中用于定义线程间如何共享变量以及如何同步操作的重要概念。最新版的JMM模拟器提供了一种可视化的方式,帮助开发者理解并模拟Java内存模型的工作机制,这对于理解...
Java内存模型(JMM, Java Memory Model)是Java平台中用于定义如何在多线程环境下共享数据的一种规范。它规定了线程之间的交互、数据的可见性以及如何避免数据的不一致性等问题。JMM的存在主要是为了解决处理器缓存...
Java程序是需要运行在Java虚拟机上面的,Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的...
【JMM(Java Memory Model,Java 内存模型)】是Java平台中用于规范线程间通信和数据同步的一种模型。它定义了线程如何共享和访问内存,以及在并发环境下如何保证数据一致性。JMM规定了 volatile 变量、synchronized...
sgys108jmm1.apk
深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发...
jmm模型ppt基本概念介绍 Java内存模型(Java Memory Model,JMM)是Java虚拟机(JVM)中的一种抽象概念,描述了一组规则或规范,定义了程序中各个变量的访问方式。JMM围绕原子性、有序性、可见性展开,确保了Java...
Java内存模型(Java Memory Model,简称JMM)是Java并发编程中的核心概念,它定义了Java程序中多线程间共享变量的访问规则。理解JMM对于编写正确、高效的并发程序至关重要。本文将深入探讨JMM的原理、特性以及如何在...
5-3JMM-CPU缓存一致性协议MESI.mp4
JVM的基础和调优【JMM 内存结构 GC OOM 性能调优 ThreadLocal】 内存泄露:是指程序在申请内存后,无法释放已申请的内存空间就造成了内存泄露, 一次的内存泄露似乎不会有大的影响,但是内存泄露堆积的后果就是内存...
14、深入理解井发可见性、有序性、原子性与JMM内存模型 (1).pdf 15、CPU缓存架构详解&高性能内存队列Disruptor 实战 (1).pdf 16、常用并发设计模式精讲 (1).pdf designpattern.zip disruptor.zip forkjoin.zip jmm(1...
Java内存模型(JMM,Java Memory Model)是Java平台中用于描述如何在多线程环境中管理内存的一套规范。它确保了并发编程时不同线程之间的数据一致性、可见性和原子性,以避免出现数据竞争和其他并发问题。以下是JMM...
Java运行时内存模型图
然而,多线程环境下常常需要处理线程间的同步问题,这就涉及到了等待唤醒机制、Java内存模型(JMM)以及volatile关键字。本篇文章将深入探讨这些概念,并通过一个生产者与消费者的案例来具体阐述它们的应用。 **一...