分析&回答


JMM概念

Java 内存模式是 Java 语言规范的一部分。为了保证共享内存的正确性(可见性、有序性、原子性),内存模型定义了共享内存系统中多线程程序读写操作的行为规范。通过这些规则来规范对内存的读写操作,从而保证指令执行的正确性。

JMM工作场地

JMM 规定了多个线程如何访问并发 Java 应用程序中的公共内存,以及一个线程的数据更改如何对其他线程可见。

可见性 (缓存一致性问题?)

Java内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值的这种依赖主内存作为传递媒介的方式来实现的。

Java中的volatile关键字提供了一个功能,那就是被其修饰的变量在被修改后可以立即同步到主内存,被其修饰的变量在每次是用之前都从主内存刷新。因此,可以使用volatile来保证多线程操作时变量的可见性。

有序性 (重排序问题?)

在Java中,可以使用synchronizedvolatile来保证多线程之间操作的有序性。实现方式有所区别:volatile关键字会禁止指令重排。synchronized关键字保证同一时刻只允许一条线程操作。

原子性

在Java中,为了保证原子性,提供了两个高级的字节码指令monitorentermonitorexit。在说说你对Synchronized的了解我们介绍过。Java中可以使用synchronized来保证方法和代码块内的操作是原子性的。

反思&扩展


JMM 对添加了 final 修饰符的类的字段有什么特殊保证 ?

JVM 基本上会保证在任何线程获取对象之前初始化类的 final 字段。

如果没有这种保证,由于重新排序或其他优化,在初始化该对象的所有字段之前,可以向另一个线程发布对象的引用,即变得可见。这可能会导致对这些字段的访问。

这就是为什么在创建不可变对象时,应始终将其所有字段设为 final,即使它们不能通过 getter 方法访问。


为了大家更加方便的刷题,我们对文章进行了分类和整理,免费为大家提供刷题服务。程序员不欺骗程序员,赶紧扫码小程序刷起来!

为了一站式解决面者刷题问题,部分内容可能存在摘录情况,如有侵权辛苦您留言联系我们,我们会删除文章或添加引用文案,Thanks!

什么是 Java 内存模型( JMM )相关推荐

  1. Java并发编程:Java内存模型JMM

    简介 Java内存模型英文叫做(Java Memory Model),简称为JMM.Java虚拟机规范试图定义一种Java内存模型来屏蔽掉各种硬件和系统的内存访问差异,实现平台无关性. CPU和缓存一 ...

  2. java内存模型(JMM)和happens-before

    文章目录 重排序 Happens-Before 安全发布 初始化安全性 java内存模型(JMM)和happens-before 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟 ...

  3. Java 内存模型 JMM 详解

    转载自 Java 内存模型 JMM 详解 JMM简介 Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性.是否可以重排序等问题的无关具体 ...

  4. JVM——Java内存模型(JMM)

    关注微信公众号:CodingTechWork,一起学习进步. 软硬件发展概述 Amdahl定律和摩尔定律 1)Amdahl定律:通过系统中并行化和串行化的比重来描述多处理器系统能获得的运算加速能力. ...

  5. Java内存模型(JMM)详解

    在Java JVM系列文章中有朋友问为什么要JVM,Java虚拟机不是已经帮我们处理好了么?同样,学习Java内存模型也有同样的问题,为什么要学习Java内存模型.它们的答案是一致的:能够让我们更好的 ...

  6. java 内存模型JMM解析

    java 内存模型JMM解析 一.CPU多核并发缓存架构解析    1.以往的内存读取    2.后来的内存读取 二.java内存模型实现原理    1.验证上图模型      1)案列代码      ...

  7. java虚拟机jvm与Java内存模型(JMM)

    Java内存模型(JMM) Java 内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存.Java 内存模型(JMM) 抽象了线程和主内存之间的关系,就比如说线程之间的共享变量必须存 ...

  8. java基础—java内存模型(JMM)CPU架构、缓存一致性、重排序、JMM的实现、JMM保证可见性、有序性问题的详解

    java基础-JMM(CPU架构.JMM保证可见性.有序性) 文章目录 java基础-JMM(CPU架构.JMM保证可见性.有序性) CPU架构 说一说现在计算机存储器的结构层次 使用CPU缓存,会导 ...

  9. Java并发编程-Java内存模型(JMM)

    前言 在上一章 Java并发编程-Android的UI框架为什么是单线程的? 中笔者介绍了并发编程线程安全「三大恶」:「可见性」.「原子性」以及「有序性」 广义上来说,并发编程问题笔者归纳为:是由于后 ...

  10. 全面理解Java内存模型(JMM)及volatile关键字

    [版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/72772461 出自[zejian ...

最新文章

  1. 三校生计算机模拟试题1,甘肃省2015年“三校生”考试摸拟试题1
  2. 单元测试unittest(基于数据驱动的框架:unittest+HTMLTestRunner/BeautifulReport+yaml+ddt)...
  3. 高级PHP工程师所应该具备的专业素养
  4. android gps时间格式,android – GPS:NTP时间注入的工作原理
  5. [CF1095F]Make It Connected
  6. 【论文】Awesome Relation Extraction Paper(关系抽取)(PART IV)
  7. 全栈性能测试修炼宝典jmeter实战电子版_JMeter实战(一) 体系结构
  8. linux检查python安装情况,使用Python检测Linux服务器连接状态
  9. WPF之HierarchicalDataTemplate
  10. 主流操作系统及其特点
  11. 用Qt自己开发的 数学坐标绘图软件 可用于 论文,报告插图
  12. 深入了解浏览器的垃圾回收
  13. 2012年“Openstack中国行”活动总结与回顾
  14. 联想windows无法自动修复此计算机,联想win10自动修复无法开机-联想win10自动修复无法开机方法 - 系统家园...
  15. php中car是什么意思,car是什么意思_car在线翻译_英语_读音_用法_例句_海词词典
  16. 全新IT资源内控安全解决方案
  17. 华为副总裁鸿蒙,华为副总裁霸气官宣!鸿蒙系统更新机型再次更新:3月31日全新推送升级...
  18. FITC Phalloidin|FITC标记鬼笔环肽,915026-99-2
  19. 怎样从盘面看主力动向
  20. Spring Boot集成海康威视NVR

热门文章

  1. 五款机房教学管理系统,你的教室安装了吗
  2. Multi-Scale Boosted Dehazing Network with Dense Feature Fusion笔记和代码
  3. [转载]PLSQL安装破解
  4. awg线径与电流_AWG线规—导线外径(MM)与电流(A)对照
  5. 邮箱服务申请数字证书
  6. 邮局用计算机对信件进行自动分拣,计算机组成结构习题集
  7. Android签名文件转化为pk8和pem
  8. 泛微oa安装mysql,泛微OA系统安装升级重装手册(参考).doc
  9. foobar2000 常用插件搜集
  10. NUC980开源项目9-官方Kernel编译