🌈hello,你好鸭,我是Ethan,西安电子科技大学大三在读,很高兴你能来阅读。
✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!
🔥个人主页:Ethan Yankang
🔥推荐:史上最强八股文||一分钟看完我的几百篇博客
🔥温馨提示:划到文末发现专栏彩蛋 点击这里直接传送
🔥本篇概览:详细讲解了《Java并发编程的艺术》第三章节Java内存模型3——三大模型之间的关系——顺序一致性模型、处理器模型、JMM(按照对内存排序的严格程度递减)。🌈⭕🔥
【计算机领域一切迷惑的源头都是基本概念的模糊,算法除外】
👉Java并发编程专栏
🌈章节速览:
前面对Java内存模型的基础知识和内存模型的具体实现进行了说明。下面对Java内存模 型的相关知识做一个总结。
1.处理器的内存模型
顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会以顺 序一致性内存模型为参照。在设计时,JMM和处理器内存模型会对顺序一致性模型做一些放 松,因为如果完全按照顺序一致性模型来实现处理器和JMM,那么很多的处理器和编译器优 化都要被禁止,这对执行性能将会有很大的影响。
由于常见的处理器内存模型比JMM要弱,Java编译器在生成字节码时,会在执行指令序 列的适当位置插入内存屏障来限制处理器的重排序。同时,由于各种处理器内存模型的强弱 不同,为了在不同的处理器平台向程序员展示一个一致的内存模型,JMM在不同的处理器中 需要插入的内存屏障的数量和种类也不相同。图3-48展示了JMM在不同处理器内存模型中需 要插入的内存屏障的示意图。 JMM屏蔽了不同处理器内存模型的差异,它在不同的处理器平台之上为Java程序员呈现 了一个一致的内存模型。
2.各种内存模型之间的关系
JMM是一个语言级的内存模型,处理器内存模型是硬件级的内存模型,顺序一致性内存 模型是一个理论参考模型。
同处理器内存模型一样,越是追求执行性能的语言,内存模型设计得会越弱。只要多线程程序是正确同步的,JMM保证该程序在任意的处理器平台上的执行结果,与 该程序在顺序一致性内存模型中的执行结果一致。
3.JMM的内存可见性保证
3.1程序类型
按程序类型,Java程序的内存可见性保证可以分为下列3类。
·单线程程序。
单线程程序不会出现内存可见性问题。编译器、runtime和处理器会共同确 保单线程程序的执行结果与该程序在顺序一致性模型中的执行结果相同。
·正确同步的多线程程序。
正确同步的多线程程序的执行将具有顺序一致性(程序的执行 结果与该程序在顺序一致性内存模型中的执行结果相同)。这是JMM关注的重点,JMM通过限 制编译器和处理器的重排序来为程序员提供内存可见性保证。
·未同步/未正确同步的多线程程序。
JMM为它们提供了最小安全性保障:线程执行时读取到的值,要么是之前某个线程写入的值,要么是默认值(0、null、false)。
4.JSR-133对旧内存模型的修补
JSR-133对JDK 5之前的旧内存模型的修补主要有两个。 ·增强volatile的内存语义。旧内存模型允许volatile变量与普通变量重排序。JSR-133严格 限制volatile变量与普通变量的重排序,使volatile的写-读和锁的释放-获取具有相同的内存语 义。 ·增强final的内存语义。在旧内存模型中,多次读取同一个final变量的值可能会不相同。为 此,JSR-133为final增加了两个重排序规则。在保证final引用不会从构造函数内逸出的情况下, final具有了初始化安全性。
💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖
热门专栏推荐
🌈🌈计算机科学入门系列 关注走一波💕💕
🌈🌈CSAPP深入理解计算机原理 关注走一波💕💕
🌈🌈微服务项目之黑马头条 关注走一波💕💕
🌈🌈redis深度项目之黑马点评 关注走一波💕💕
🌈🌈JAVA面试八股文系列专栏 关注走一波💕💕
🌈🌈JAVA基础试题集精讲 关注走一波💕💕
🌈🌈代码随想录精讲200题 关注走一波💕💕
总栏
🌈🌈JAVA基础要夯牢 关注走一波💕💕
🌈🌈JAVA后端技术栈 关注走一波💕💕
🌈🌈JAVA面试八股文 关注走一波💕💕
🌈🌈JAVA项目(含源码深度剖析) 关注走一波💕💕
🌈🌈计算机四件套 关注走一波💕💕
🌈🌈数据结构与算法 关注走一波💕💕
🌈🌈必知必会工具集 关注走一波💕💕
🌈🌈书籍网课笔记汇总 关注走一波💕💕
📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!