JMM(java Memory Model)到底是什么?
经历过很多面试大部分都会问一句: 你知道Java内存模型么? 然后我就pulapula的说一大堆什么堆呀,栈呀,GC呀什么的,这段时间把JVM虚拟机和多线程编程完整的学习了一遍,发现JMM和堆/栈这些完全不是一个概念,不知道是不是就是因为这才被拒了十来次的 /尴尬。
JVM是Java实现的虚拟计算机(Java Virtual Machine),对于熟悉计算机结构的同学,我感觉把这些概念和物理机对应起来更好理解。
JVM对应的就是物理机,它有存放数据的存储区:堆、栈等由JVM管理的内存(对应于物理机的内存)、执行数据计算的执行单元:线程(对应于物理机的CPU)、加速线程执行的本次存储区:可能会从存储区里分配一块空间来存储线程本地数据,比如栈(对应于物理机的cache)。
众所周知,现代计算机一般都会包含多个处理器,多个处理器共享主内存。为了提升性能,会在每个处理器上增加一个小容量的cache加速数据读写。cache会导致了缓存一致性问题,为了解决缓存一致性问题又引入了一系列Cache一致性协议(比如MSI、MESI、MOSI、Synapse、Firefly及Dragon Protocol)来解决CPU本地缓存和主内存数据不一致问题。
而JVM中管理下的存储空间(包括堆、栈等)就对应与物理机的内存;
线程本次存储区(例如栈)就对应于物理机的cache;
而JMM就对应于类似于MSI、MESI、MOSI、Synapse、Firefly及Dragon Protocol这样的缓存一致性协议,用于定义数据读写的规则。
JMM相对于物理机的缓存一致性协议来说它还要处理JVM自身特有的问题:重排序问题,参见: http://cmsblogs.com/?p=2116。
那么JMM都有哪些内容呢?
官方文档: http://101.96.10.64/www.cs.umd.edu/~pugh/java/memoryModel/CommunityReview.pdf
通俗理解就是happens-before原则 https://www.cnblogs.com/chenssy/p/6393321.html
JMM(java Memory Model)到底是什么?的更多相关文章
- java学习:JMM(java memory model)、volatile、synchronized、AtomicXXX理解
一.JMM(java memory model)内存模型 从网上淘来二张图: 上面这张图说的是,在多核CPU的系统中,每个核CPU自带高速缓存,然后计算机主板上也有一块内存-称为主内(即:内存条).工 ...
- 浅析java内存模型--JMM(Java Memory Model)
在并发编程中,多个线程之间采取什么机制进行通信(信息交换),什么机制进行数据的同步? 在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的. 线程之间通过共享程序公共的状态,通 ...
- 死磕 java同步系列之JMM(Java Memory Model)
简介 Java内存模型是在硬件内存模型上的更高层的抽象,它屏蔽了各种硬件和操作系统访问的差异性,保证了Java程序在各种平台下对内存的访问都能达到一致的效果. 硬件内存模型 在正式讲解Java的内存模 ...
- 当我们在谈论JMM(Java memory model)的时候,我们在谈论些什么
前面几篇中,我们谈论了synchronized.final以及voilate的用法和底层实现,都绕不开一个话题-Java内存模型(java memory model,简称JMM).Java内存模型是保 ...
- JAVA内存模型(Java Memory Model ,JMM)
http://blog.csdn.net/hxpjava1/article/details/55189077 JVM有主内存(Main Memory)和工作内存(Working Memory),主内存 ...
- 并发研究之Java内存模型(Java Memory Model)
Java内存模型JMM java内存模型定义 上一遍文章我们讲到了CPU缓存一致性以及内存屏障问题.那么Java作为一个跨平台的语言,它的实现要面对不同的底层硬件系统,设计一个中间层模型来屏蔽底层的硬 ...
- Java内存模型(Java Memory Model,JMM)
今天简单聊聊什么叫做 Java 内存模型,不是 JVM 内存结构哦. JMM 是一个语言级别的内存模型,处理器的硬件模型是硬件级别,Java中的内存模型是内存可见性的基本保证.从而为我们 volati ...
- Java 内存模型(Java Memory Model,JMM)
基本概念 JMM 本身是一种抽象的概念并不是真实存在,它描述的是一组规范,通过这组规范定义了程序的访问方式 JMM 同步规定 线程解锁前,必须把共享变量的值刷新回主内存 线程加锁前,必须读取主内存的最 ...
- 并发编程之java内存模型(Java Memory Model ,JMM)
一.图例 0.两个概念 Heap(堆):运行时的数据区,由垃圾回收负责,运行时分配内存(所以慢),对象存放在堆上 如果两个线程,同时调用同一个变量,怎两个线程都拥有,该对象的私有拷贝 (可以看一下,T ...
随机推荐
- SpringBoot系列: Pebble模板引擎
===============================Java 模板引擎选择===============================SpringBoot Starter项目向导中可选的J ...
- [物理学与PDEs]第1章习题7 载流线圈的磁场
设一半径为 $R$ 的圆周电路上的电流强度为 $I$. 试计算在通过圆心垂直于圆周所在平面的直线上, 由该圆周电路产生的磁场的磁感强度. 解答: 由对称性知在该直线 $l$ 上, ${\bf B}$ ...
- 不定参数对arguments对象的影响
如果声明函数时定义了不定参数,则在函数被调用时,arguments对象包含了所有传入的参数: function checkArgs(...args){ console.log(args.length, ...
- 【转】史上最详细的Composer安装tp5教程
http://www.thinkphp.cn/topic/52362.html Composer安装tp5教程1.下载composer先介绍几个网站Composer官网https://getcompo ...
- spring整合junit
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test& ...
- html 超链接标签 锚点 a标签伪类
一个简易的连接 <a href="01.html">01</a> <body> <a href="01.html" t ...
- XML,json,ajax
一.XML 1.概述:XML全称为Extensible Markup Language, 意思是可扩展的标记语言 2.版本:W3C在1998年2月发布1.0版本:W3C在2004年2月发布1.1版本, ...
- android Button上面的英文字符串自动大写的问题解决
xml文件中加入: android:textAllCaps="false"
- Linux内存管理 (22)内存检测技术(slub_debug/kmemleak/kasan)【转】
转自:https://www.cnblogs.com/arnoldlu/p/8568090.html 专题:Linux内存管理专题 关键词:slub_debug.kmemleak.kasan.oob. ...
- zabbix使用自动发现监控esxi的磁盘存储storage
zabbix使用自动发现监控esxi的磁盘存储storage 在任意一台可以访问vcenter的zabbix-agent服务器上添加exsi的磁盘监控模板即可 创建模板过程: custom.esxi. ...