voliate深度解析原子性 可见性
共享内存的变量与线程栈中的变量副本有可能在主存中,也有可能在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深度解析原子性 可见性相关推荐
- 微服务架构深度解析与最佳实践
微服务架构深度解析与最佳实践 微服务架构的概念,现在对于大家应该都不陌生,无论使用 Apache Dubbo.还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒 ...
- java内存模型 原子性_Java内存模型JMM 高并发原子性可见性有序性简介 多线程中篇(十)...
JVM运行时内存结构回顾 在JVM相关的介绍中,有说到JAVA运行时的内存结构,简单回顾下 整体结构如下图所示,大致分为五大块 而对于方法区中的数据,是属于所有线程共享的数据结构 而对于虚拟机栈中数据 ...
- 深度解析ConcurrentHashMap
深度解析ConcurrentHashMap 前言 HashMap是平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,执行get方法有可能会引起循环遍历(前提是其它线 ...
- 原子性 可见性 有序性_极简主义的内容可见性
原子性 可见性 有序性 A couple of years ago, Minimalism as a concept took over the design world. 几年前, 极简主义作为一种 ...
- Java LockSupport以及park、unpark方法源码深度解析
介绍了JUC中的LockSupport阻塞工具以及park.unpark方法的底层原理,从Java层面深入至JVM层面. 文章目录 1 LockSupport的概述 2 LockSupport的特征和 ...
- ConcurrentHashMap1.7深度解析
ConcurrentHashMap1.7深度解析 1.ConcurrentHashMap原型图 1.1 总结 1.1.1 分段锁定 从原型图我们可以看出concurrentHashMap1.7是采用的 ...
- 单文件浏览器_图文并茂深度解析浏览器渲染原理,包看懂超值得收藏
在我们面试过程中,面试官经常会问到这么一个问题,那就是从在浏览器地址栏中输入URL到页面显示,浏览器到底发生了什么?这个问题看起来是老生常谈,但是这个问题回答的好坏,确实可以很好的反映出面试者知识的广 ...
- 舒工深度解析不规则场地座位二维码生成规则
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- 今晚8点开播 | 深度解析知识图谱发展关键阶段技术脉络
作为知识图谱领域形成过程的亲历者之一,AI科技大本营此次邀请到文因互联 CEO 鲍捷,他将对知识图谱的历史渊源进行梳理,对该领域几次发展的主要技术突破做深度解析,并分析其工业落地的几个关键点.欢迎大家 ...
最新文章
- nginx负载均衡和lvs负载均衡的比较分析
- 下面中???该如何填写,才可以正确执行强制类型转换? int (*monthp)[31]; monthp = (???)malloc(31);
- boost::geometry::strategy::vincenty用法的测试程序
- BASIC-4 数列特征
- Mysql ibd文件恢复指南
- 车载安卓中控改鸿蒙,教你改装车子中控安卓大屏,看一遍你就会了,改完后低配秒变高配...
- 从关系型数据库到非关系型数据库
- 多臂老虎机导论(一)引言
- sql删除表中某个字段的重复数据,取较大者
- 《CCNA学习指南:数据中心(640-911)》——2.5 考试要点
- 【Unity3D插件】AnyPortrait插件分享《(一)制作史莱姆动画》
- 雪花算法生成主键id
- 2021年育婴员(五级)考试试卷及育婴员(五级)考试技巧
- 一个程序员的十年程序人生感悟
- 数控计算机实习小结,数控机床实习心得体会
- MongoDB 学习笔记
- iphone阅读html,iphone下Safari查看网页源代码
- 【C语言入门】SDUT《程序设计基础I 》实验2-选择结构程序设计题解 c语言语法讲解
- user account control用户帐户控制
- 手把手教你搭建网盘系统,给小姐姐换个新家可好​?
热门文章
- RE 逆向工程初学者指南:方法和工具
- Ubuntu 18.04 开启隐藏录音降噪功能
- python turtle写英文_python turtle 书写新年快乐
- Android 仿instagram登陆页面动画
- 用数据证明价值,“区块链价值榜”即将在世界区块链大会·乌镇发布
- 给 Word 文档中的公式自动编号
- win7计算机摄像头不显示器,摄像头怎么打开 笔者教你win7电脑如何打开摄像头
- android更换app图标
- 关于Inno_Setup无法创建桌面图标的问题
- 计算机组成原理——浮点运算