Java并发机制的底层实现原理--volatile
Java并发机制的底层实现原理
注:1.java代码 ----(编译)—>2.字节码----(JVM)—>3.汇编
1.volatile的应用
关键词:轻量级synchronized,共享变量,可见性,上下文切换
问题:volatile作用?1.确保共享变量能被准确和一致的更新问题:volatile如何保证可见性的?1.Lock前缀指令1.1 lock前缀指令会引发两件事情。1)将当前处理器缓存行数据写回系统内存2)使其他CPU内缓存了该地址的数据无效(处理器嗅探总线数据)问题:volatile两条实现原则?1.lock前缀指令会引起处理器缓存回写到内存。在声言处理器的LOCK#信号期间,处理器通过锁住总线,独占共享内存。当然LOCK#信号也不一定会产生,当访问的内存区域已经缓存在处理器的内部的时候,就不会产生LOCK#信号。此时通过锁定该内存区域并回写到内存,借助缓存一致性机制确保修改的原子性。2.处理器的缓存回写到内存导致其他处理器的缓存无效。IA-32和Inter64处理器都是使用MESI(modify(修改),engross(独占),shared(共享),invalid(无效))控制协议维护缓存的一致性。IA-32和Inter64处理器能嗅探其他处理器访问系统内存和他们的内部缓存,当一个处理器打算写内存地址,而这个内存地址处于共享状态,当这个讯息被正在嗅探的A处理器检测到时,A会使他自己的缓存行无效,再 下次访问到该无效的缓存行地址时,强制执行缓存行填充。问题:volatile的使用优化?1.追加字节。通过将对象字节数追加到能填充一个缓存行,从而提高并发编程的效率。原理:对于英特尔酷睿i7、酷睿、Atom、NetBurst、Core Solo、Pentium M处理器的L1、L2、L3的高速缓存行是64个字节宽,不支持部分填充缓存行。当队列的头结点和尾节点之间不足64个字节宽时,处理器会将头结点和尾节点读取在同一个缓存行,由于多处理器操作,当其中一个处理器试图修改头结点/尾节点时会导致该缓存行被锁定,在缓存一致性协议下,导致其他处理器不能访问自己的高速缓存行中的尾节点/头结点。但若是高速缓存行能被填满,头结点与尾节点分布在不同缓存行时就不会出现头节点与尾节点相互锁定的情况。试用范围:1.缓存行非64位的处理器(可适当调整填充缓存行的字节,达到同样的效果)2.共享变量不会被频繁的写。3.搞版本java不适用(考虑其他填充缓存行思路)
Java并发机制的底层实现原理--volatile相关推荐
- Java并发机制的底层实现原理
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令.本章我们将 ...
- 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理
第2章Java并发机制的底层实现原理 2.1 volatile的应用 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行, ...
- 《Java并发编程的艺术》:第2章 Java并发机制的底层实现原理
前言 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节 码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和 CPU的指令. ...
- java并发机制的底层实现原理(volatile,synchronized,原子操作)
目录 volatile的应用 volatile的定义与实现原理 volatile的使用优化 synchronized的实现原理与应用 Java对象头 锁的升级与对比 偏向锁 轻量级锁 锁的优缺点对比 ...
- 【java并发编程艺术学习】(四)第二章 java并发机制的底层实现原理 学习记录(二) synchronized...
章节介绍 本章节主要学习 Java SE 1.6 中为了减少获得锁 和 释放锁 时带来的性能消耗 而引入的偏向锁 和 轻量级锁,以及锁的存储结构 和 升级过程. synchronized实现同步的基础 ...
- Java高并发编程(二):Java并发机制的底层实现机制
Java代码在编译后会变成Java字节码,字节码在之后被类加载机制加载到JVM中,JVM执行字节码,最终需要转换为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令. ...
- 并发编程五:java并发线程池底层原理详解和源码分析
文章目录 java并发线程池底层原理详解和源码分析 线程和线程池性能对比 Executors创建的三种线程池分析 自定义线程池分析 线程池源码分析 继承关系 ThreadPoolExecutor源码分 ...
- RocketMQ(九):rocketMQ设计的全链路消息零丢失方案?+rocketmq消息中间件事务消息机制的底层实现原理?+half是什么?+half消息是如何对消费者不可见的?
前言: 目前rocketmq更新已经更新了11篇博客了,预计接下来的2-3篇是暂时的更新进度了,准备更新一下springboot或者是jvm,mysql相关的专题出来,后续更新完事后,再分享一些实战性 ...
- Java并发机制底层实现原理-volatile
章节目录 volatile的实现原理与应用 1.volatile的实现原理与应用 Java source code->Java class->JVM->汇编指令->cpu执行 ...
- Java并发编程,3分分钟深入分析volatile的实现原理
volatile原理 volatile简介 Java内存模型告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理. 线程在工作内存进行操作后何时会写到 ...
最新文章
- dell服务器630虚拟盘初始化,DELL服务器配置Raid的步骤
- IPSEC造成网络Destination host unreachable
- Bourbon: 让你的sass更简洁
- mysql navicat安装_MySQL与Navicat的安装及使用教程
- 使用VS2015的Visual Studio Installer打包
- click Utilities
- HTML基础:用表单写一个简易登录页面
- python面试题No2
- 今日讨论:时间紧,工作量太大,作为测试该怎么办?
- SQLite剖析之事务处理技术
- linux (centos 8.1)生产环境基于9台物理机 安装 opentstack ussuri集群以及集成ceph (已转gitee)
- cesium-事件监听(获取点击位置的经纬度和高度)
- DPDK Rx flexible descriptor在Intel E810网卡中的使用
- 神鬼世界更新完了为什么显示与服务器断开连接,全新服务器构架 神鬼世界6月23日数据互通公告...
- Pycharm2018.2破解版本闪退问题解决办法
- winrar去掉烦人的广告 亲测有效
- 服务器开启防火墙后无法登录系统,客户端连不上,服务器防火墙服务启动不了...
- python关键字参数必须位于位置参数之前_python关键字参数和位置参数
- echarts数据可视化系列:仪表盘
- Microsoft Graph for Office 365 - 认证和授权场景
热门文章
- 生命在于学习——业务逻辑漏洞
- Java opencv tld_TLD-(windows) tld c++版可运行版本,亲测. tld OpenCV 252万源代码下载- www.pudn.com...
- 微信如何屏蔽别人发来的消息,如何屏蔽微信消息
- 北京与洛杉矶时差16小时,飞机飞行时间是12小时40分钟。请输入从洛杉矶起飞的日期与时间,计算出到达北京的日期与时间。
- MatlabR2012a 显示使用过期的注册文件破解(.lic)
- 春运在即 360又抢了12306的风头
- 基于lio-sam框架,教你如何进行回环检测及位姿计算
- NavigationBar 隐藏底部边线,阴影
- JS数组常用的方法shift,unshift,splice,split,slice
- 引用提高 提高 啦啦啦啦啦啦啦啦啦啦了