共享内存的变量与线程栈中的变量副本有可能在主存中,也有可能在cpu缓存中或者cpu寄存器中!!!。
cpu结构 运算器、控制器、寄存器
三级缓存 加快cpu的执行效率 LO寄存器->L1C>L2C>L3C(多核共享)->L4主存->L5磁盘 有两个L1,为了不冲突CPU都可调用 (指令缓存和数据缓存) L1L2是核单独的
主存又分为随机存储器(random access memory)和只读存储器(read only memory)

保证了变量的可见性 共享变量不可见性:两个线程都有主存变量的自己的缓存,但是都不知道对方的缓存中的数据!!
使用synchronized和volatile关键字后,写入一个线程执行完后立刻把缓存的值写会主内存!!!,读的话则是不读缓存的值,直接读主内存的值!!!!!!
volatie为什么线程不安全 虽然volatie让所有缓存失效了,但是寄存器还可能是之前的值,修改了在写回主内存,就会有问题 两个线程同时更新缓存
volatile的读写具有原子性,但是自增操作属于复合操作,不连续性 因此不具有原子性,所以线程也不安全。 i++ 读
共享内存的变量与线程栈中的变量副本有可能在主存中,也有可能在cpu缓存中或者cpu寄存器中。

Java内存模型JMM:主内存,缓存 JVM内存结构:堆 栈 本地方法栈 程序计数器 方法区(运行时常量池)
jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代) jdk1.9 默认垃圾收集器G1
想要最大化应用程序的吞吐量,选Parallel GC 想要最小化GC的中断或停顿时间,选CMS GC 用的标记-清除算法适合老年代,但是会有很多碎片化

Jvm为了优化性能会采用指令重排序 缓存一致协议(MESI协议)
Int a=1; Int b=2; Jvm的执行顺序可能是先b=2;然后再a=1,因为当代码执行到a=1时a对象可能被加锁了

为了禁止编译器和CPU对代码进行重排序,在编译器和CPU层面上都有对应的指令,这个就是内存屏障。 就是中间加个栏杆,前面执行了后面才执行
LoadStore:禁止读和写的重排序 一共四种 读读 写写 读写 写读 volatile关键字通过“内存屏障”来防止指令被重排序。!!
Synchronized StoreStore volatile StoreLoad UNSAFE实现了

cpu的多级缓存 为了解决CPU的频率太快,以至于主存!!(一个)跟不上 多个cpu多个缓存,提前把要的数据加入到缓存中
多线程 缓存一致性问题,用到同一个主存地址,但是缓存值不一样 (共享变量存放在主内存中) 指令重排序问题
Java内存模型(JMM) JMM通过控制主内存必须与每个线程的本地内存之间的交互!!!!!!保证了可见性

voliate深度解析原子性 可见性相关推荐

  1. 微服务架构深度解析与最佳实践

    微服务架构深度解析与最佳实践 微服务架构的概念,现在对于大家应该都不陌生,无论使用 Apache Dubbo.还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒 ...

  2. java内存模型 原子性_Java内存模型JMM 高并发原子性可见性有序性简介 多线程中篇(十)...

    JVM运行时内存结构回顾 在JVM相关的介绍中,有说到JAVA运行时的内存结构,简单回顾下 整体结构如下图所示,大致分为五大块 而对于方法区中的数据,是属于所有线程共享的数据结构 而对于虚拟机栈中数据 ...

  3. 深度解析ConcurrentHashMap

    深度解析ConcurrentHashMap   前言   HashMap是平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,执行get方法有可能会引起循环遍历(前提是其它线 ...

  4. 原子性 可见性 有序性_极简主义的内容可见性

    原子性 可见性 有序性 A couple of years ago, Minimalism as a concept took over the design world. 几年前, 极简主义作为一种 ...

  5. Java LockSupport以及park、unpark方法源码深度解析

    介绍了JUC中的LockSupport阻塞工具以及park.unpark方法的底层原理,从Java层面深入至JVM层面. 文章目录 1 LockSupport的概述 2 LockSupport的特征和 ...

  6. ConcurrentHashMap1.7深度解析

    ConcurrentHashMap1.7深度解析 1.ConcurrentHashMap原型图 1.1 总结 1.1.1 分段锁定 从原型图我们可以看出concurrentHashMap1.7是采用的 ...

  7. 单文件浏览器_图文并茂深度解析浏览器渲染原理,包看懂超值得收藏

    在我们面试过程中,面试官经常会问到这么一个问题,那就是从在浏览器地址栏中输入URL到页面显示,浏览器到底发生了什么?这个问题看起来是老生常谈,但是这个问题回答的好坏,确实可以很好的反映出面试者知识的广 ...

  8. 舒工深度解析不规则场地座位二维码生成规则

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  9. 今晚8点开播 | 深度解析知识图谱发展关键阶段技术脉络

    作为知识图谱领域形成过程的亲历者之一,AI科技大本营此次邀请到文因互联 CEO 鲍捷,他将对知识图谱的历史渊源进行梳理,对该领域几次发展的主要技术突破做深度解析,并分析其工业落地的几个关键点.欢迎大家 ...

最新文章

  1. nginx负载均衡和lvs负载均衡的比较分析
  2. 下面中???该如何填写,才可以正确执行强制类型转换? int (*monthp)[31]; monthp = (???)malloc(31);
  3. boost::geometry::strategy::vincenty用法的测试程序
  4. BASIC-4 数列特征
  5. Mysql ibd文件恢复指南
  6. 车载安卓中控改鸿蒙,教你改装车子中控安卓大屏,看一遍你就会了,改完后低配秒变高配...
  7. 从关系型数据库到非关系型数据库
  8. 多臂老虎机导论(一)引言
  9. sql删除表中某个字段的重复数据,取较大者
  10. 《CCNA学习指南:数据中心(640-911)》——2.5 考试要点
  11. 【Unity3D插件】AnyPortrait插件分享《(一)制作史莱姆动画》
  12. 雪花算法生成主键id
  13. 2021年育婴员(五级)考试试卷及育婴员(五级)考试技巧
  14. 一个程序员的十年程序人生感悟
  15. 数控计算机实习小结,数控机床实习心得体会
  16. MongoDB 学习笔记
  17. iphone阅读html,iphone下Safari查看网页源代码
  18. 【C语言入门】SDUT《程序设计基础I 》实验2-选择结构程序设计题解 c语言语法讲解
  19. user account control用户帐户控制
  20. 手把手教你搭建网盘系统,给小姐姐换个新家可好​?

热门文章

  1. RE 逆向工程初学者指南:方法和工具
  2. Ubuntu 18.04 开启隐藏录音降噪功能
  3. python turtle写英文_python turtle 书写新年快乐
  4. Android 仿instagram登陆页面动画
  5. 用数据证明价值,“区块链价值榜”即将在世界区块链大会·乌镇发布
  6. 给 Word 文档中的公式自动编号
  7. win7计算机摄像头不显示器,摄像头怎么打开 笔者教你win7电脑如何打开摄像头
  8. android更换app图标
  9. 关于Inno_Setup无法创建桌面图标的问题
  10. 计算机组成原理——浮点运算