说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Java内存模型的历史变迁

HTML文档下载 WORD文档下载 PDF文档下载
本文通过介绍Java的新/旧内存模型,来展示Java技术的历史变迁。

本文通过介绍Java的新/旧内存模型,来展示Java技术的历史变迁。

旧的Java内存模型

Java使用的是共享内存的并发模型,在线程之间共享变量。Java语言定义了线程模型规范,通过内存模型控制线程与变量的交互,从而实现Java线程之间的通信。在JDK5之前,Java一直使用的是旧内存模型。如图1所示。变量保存在由所有线程共享的主内存中,主内存中的变量称为mastingcopy。每个线程都有一个工作内存,它保存变量的workingcopy。旧的内存模型定义了若干规则,通过这些规则来保证线程何时将主内存中的mastingcopy传送到线程的工作内存中;以及线程何时将工作内存中的workingcopy传送回主内存。旧内存模型使用8个操作来定义线程可以执行的动作。

  • read(读)操作:主内存把mastingcopy传送到线程的工作内存,以供后面的load操作使用。
  • load(装载)操作:线程将由read操作从主内存传送过来的值,放入工作内存中。
  • use(使用)操作:线程将变量的workingcopy传送到线程执行引擎。
  • assign(赋值)操作:线程将变量值从线程执行引擎传送到线程的工作内存中。
  • store(存储)操作:线程将变量的workingcopy传送到主内存,供后面的write操作使用。
  • write(写)操作:主内存将由store操作传送过来的值,放入主内存中。
  • lock(锁定)操作:线程获得指定对象的锁。
  • unlock(解锁)操作:线程释放指定对象的锁。


图1 Java旧内存模型

这里的关键是,由于read操作是由主内存执行,而对应的load是由线程执行,read操作和load操作之间是松散耦合的。也就是说,主内存和线程工作内存之间的变量传递是松散耦合的。同样,由于store操作是由线程执行,而对应的write是由主内存执行,store操作和write操作之间是松散耦合的。也就是说,线程工作内存和主内存之间的变量传递是松散耦合的。旧Java内存模型对Java实现如何执行变量的读/写,加锁/解锁,以及volatile变量的读/写,定义了非常严格的规则。这些规则非常复杂,具体详情请参考《JVM规范》,这里就不赘述了。旧Java内存模型通过这些复杂的规则,来保证多线程程序的线程之间,可以可靠地传递共享变量,从而保证多线程程序的正确性。

新的Java内存模型

从JDK5开始,Java使用新的内存模型,新内存模型完全抛弃了旧内存模型的主内存和工作内存的概念,也抛弃了旧内存模型的8个内存操作。也就是说,新内存模型完全是重新设计的。

新内存模型引入了一个新的概念,叫happens-before。happens-before的概念最初由LeslieLamport在其一篇影响深远的论文(《Time,ClocksandtheOrderingofEventsinaDistributedSystem》)中提出。LeslieLamport使用happens-before来定义分布式系统中,事件之间的一个偏序关系(partialordering)。LeslieLamport在这篇论文中给出了一个分布式算法,该算法可以将该偏序关系扩展为某种全序关系。

JSR-133使用happens-before的概念来指定两个操作(这里的操作是指程序中对变量的读/写,对锁的加锁和解锁)之间的执行顺序。新内存模型定义了如下的happens-before规则。

  • 程序顺序规则:一个线程中的每个操作,happensbefore于该线程中的任意后续操作。
  • 监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁。
  • volatile变量规则:对一个volatile域的写,happensbefore于任意后续对这个volatile域的读。
  • 传递性:如果Ahappens-beforeB,且BhappensbeforeC,那么Ahappens-beforeC。
  • start()规则:如果线程A执行操作ThreadB.start()(启动线程B),那么A线程的ThreadB.start()操作happensbefore于线程B中的任意操作。
  • join()规则:如果线程A执行操作ThreadB.join()并成功返回,那么线程B中的任意操作happens-before于线程A从ThreadB.join()操作成功返回。

由于两个操作可以在一个线程之内,也可以是在不同线程之间。因此JMM可以通过happens-before关系向程序员提供跨线程的内存可见性保证(如果A线程的写操作a与B线程的读操作b之间存在happens-before关系,尽管a操作和b操作在不同的线程中执行,但JMM


图2新内存模型的设计示意图

向程序员保证a操作将对b操作可见)。在新内存模型向程序员提供happens-before规则,程序员只需要与happens-before打交道即可,因此Java程序员的学习负担大大降低。同时,新内存模型允许不会改变程序结果的重排序,这可以最大限度地放松对编译器和处理器的束缚,新内存模型的执行性能比旧内存模型要好。

作者简介:程晓明Java软件工程师,关注并发与NIO,《深入理解Java内存模型》的作者。现就职于南京富士通南大软件技术有限公司,从事富士通Interstage应用服务器的开发。


本文选自程序员电子版2015年5月B刊,该期更多文章请查看这里。2000年创刊至今所有文章目录请查看程序员封面秀。欢迎订阅程序员电子版(含iPad版、Android版、PDF版)。

使用Javassist库为Bytecode Instrumentation开发JVM Agent 内容解析创业公司Stremor推出4款API 2013中国云计算榜单之三:174家云应用服务商,繁花似锦! 盘点各大云服务提供商:麦当劳=AWS,汉堡王=? BlackBerry Jam亚洲开发者大会9月将在香港开幕 把服务器搬进来:Splashtop在中国搭建Bridging Cloud Web框架全对比第五期 新增Windows环境 前Tumblr首席开发者回忆录:一个人也能开发出好产品 测试者和开发者,为何我们不能友好地相处? 讲师秀之11:何刚谈京东的云机遇 讲师秀之10:武汉大学张焕国教授,可信计算是云计算之成败关键 【上海直播】Windows Azure+世纪互联:中国云计算“烈火烹油” 最新版Chrome浏览器推出全新语音搜索功能 惠普第二财季净利润同比下滑32% PC和服务器销售不佳 讲师秀之11:网易汪源的成长故事 PPT集萃(三):六位国内技术大牛分享巨型平台的打造与应用 聚焦全球移动市场:创新以色列 科技巨头的倾慕之地 Android版Chrome 27浏览器正式上架 机器人——数据中心的新“网管” George Chu:在雅虎打造真正的工程师文化 2013,303+家中国云计算企业的“生态系统”之梦! 高访问量Web应用跨云端迁移的原因:权限和易用性 Web应用开发者福音 Chrome 28新增丰富通知中心功能 帷千兰旭:推广渠道鱼龙混杂,开发者请小心 关于IE 10 你应该知道的6件事 Spring Framework 4.0M1发布,支持JDK 8、Java EE 7 “渣打科营编程马拉松赛”正式启动 官网同时上线 Android应该支持OpenCL的十大理由 传谷歌考虑和Facebook竞购众包地图Waze 谷歌工程师再次公布Windows漏洞 并称微软很难合作 Glassdoor评前景最令员工乐观的十大科技公司 华为上榜 怎样用C或C++实现一个sql语言简单编译器 求一个特效:当鼠标停留在任务栏图标上,显示当前程序状态 在线等待,关于帮助文件的问题,急! 男人一定要看--打消那些有想娶美女的念头的男人 如何用C#在没有安装过office的机器上使用word功能 如何选择开发平台? 大家知道哪有买类似于阿里巴巴那种商城程序啊? 关于c/s的问题 如何用evb显示tip呢? 数据环境设计器怎么样去用? 文档保存时隐藏某一域的ls如何写? 视频点播怎么做啊?用什么服务器好?自己做收看WEB页怎么办啊? 怎样才能输出正确的书名号 ADO调用数据源,如何实现相对路径? 请问怎么让一个MDI子窗体永远保持非最大化并且在所有子窗体最后 一个简单的问题,看哪位兄弟可以解决 EDIT MASK的问题,在线等待。。。 关于winamp skins的问题 atmel的c51单片机是多少钱啊 怎样在程序启动时判断已经有一个程序副本正在执行? 求教:关于VC书籍 想从98升级到2K,如何实现? 高分寻找sqlserver2000的ppt文档!!!(不够再加) 调用MoveMemory,提示内存只读!急,在线等待! 高手请进,我自会给高分!!! 请教高手,谁会用BCB中的implib和tlib工具? 高分寻找sqlserver2000的ppt文档!!!(不够再加) 初学BC,提两个简单的问题 linux下无法播放mp3 sco opensever5是什么东东?有人在用吗? 以下代码有问题?请指教 MySql数据库的稳定性值得怀疑! 请问哪里有ADO2.6下载??? 在做报表时,由于太多的内容,导致不能完全打印,请问怎么解决??(急急!!) 在WINDOWS98平台上使用PB能不能联到SQL SERVER数据库服务器上?如能如何联接? 如何实现新建文件(菜鸟)(在线等待) 获取DATAGRID中的更新列的数据发现只能得到更新前的数据 求一SQL 语句 急求VSFlexGrid8.0或者VSFlexGrid For .NET的下载地址! 对于动态创建窗口(而不是控件),有没有类似 WithEvents 的东西 如何把Excel公式表达式转化为ptg标记? applet的打印问题 現在有asp源代碼﹐怎麼得到session? 求助!!我想学一门语言 好像vc中的工具栏只能是16像素高吗?如何使得工具栏的高度可以超过16像素,在那里设置呀? 菜鸟问一个操作数据库经验方面的问题,希望大家能提提你们的经验,谢谢~~~``` bcb的精华区为何访问不了?? 如何判断字段是否为字符型? 为什么Boolean.getBoolean("true")的结果是false????? 一个简单的触发器问题,请大家帮忙。 图片保存和打印问题 He is tired.Let me go instead of him.为什么用him而不用he go? 既然压力等于压强乘以受力面积,那么大气压力对一只蚂蚁的力的大小与对一片大海相比不同? 为什么大气里会有那么多云雾 关于EEA(化工)请问EEA溶解于何种溶剂?EEA的粘合能力如何?与聚酯物质能否粘合?粘合效果如何? 发动机功率等于压强乘以排量请问标题是否正确?我是这样推断:以单缸汽油机为例.功率W=力F乘以距离S乘以角θ的余弦,也就是W=F×S×cosθ.其中F=压强P乘以面积A.也就是F=P×A,换算进去就是W=P 已知直线l经过点P(2.3),倾斜角a= 30 度,求直线l的参数方程. 印象九中 作文 怎么写 如图: 所谓光速不随参照系的变化而发生改变是指所有达到光速的物体(假设这是可能的)还是仅仅包括光? 如图,△ABC中,AB=AC,BD,CE分别为∠ABC,∠ACB的角平分线且相交于点F,则△BCF是等腰三角形吗?请说明理由 粽子飘香话端午开头一段在语言上有什么特点我问的是特点,特点,特点你懂不懂? 单元门可以做门禁吗? 普通生物学中EEA 高一地理,1,2求检查 抛物线y=2x^2上的一点M到焦点的距离为1,则点M的纵坐标是A.1/4 B.1/8 C.7/8 D.3/4 翻译“人能遗其喜惧,去其万金,则天下人皆不愧于羿矣”是文言文的 关于《风起苍穹》的结局.看了后稍稍有些迷糊,能帮我大体概括一下《风起苍穹》的结局?稍稍作下评论也好哦!Thanks! 下列溶液中CL物质的量浓度最大的是A.100ml0.5mol/L MgCl2溶液 B.50ml0.5mol/L AlCl3溶液C.100ml1mol/L NaCl溶液 C.50ml0.5mol/L HCl溶液最好有算的过程 EEA family Permit 留英签证材料中 visitor 项中的 EEA family Permit 祖国啊,我属于你 你在我的心中 我在你的怀里 你是温和的风儿 我是风中的氧气 你是广阔无边的天空 .接:我是飞翔在天空上的小鸟 你是我和蔼可亲的妈妈 我是你的儿女 享受着你的温暖.我 11.下列溶液中,Cl-的物质的量浓度最大的是 ()11.下列溶液中,Cl - 的物质的量浓度最大的是 ( ) A.15 mL 1 mol/L 的FeCl 3 溶液 B.9.5 g MgCl 2 溶于水配成100 mL 溶液 C.108 g AgCl加入到100 mL 水中 某滑动变阻器上标有“100欧 0.5A”字样,表示? 谁能告诉我六年级的生活是怎样的? 问大家一下中国最长的古诗有点急,本人先在此谢谢大伙5q 请问0.15Mpa等于多少吨 0.15Mpa说的是单位面积上的压强还是一定范围的压强电梯安装方案上说地面的承载力需大于0.15Mpa 请问等于多少吨 请问这是指一平米面积上受的力 还是 整个电梯 所有的,特别是后面没有的答案,1喝”和“渴”,“晴”“清”和“睛”编个顺口溜。2创作一幅自己脑海中的《星夜》3举出几个人类扩展自身能力的发明创造 请问大家一下关于梦想的诗歌有点急,谢谢大伙5Q m24狙击步枪比如;外形,性能,使用范围,配发军种. 哪位仁兄能告诉我六年级全部要记住的英语单词,哪怕是一点也好啊!告诉我的单词要是英语阅读题里用的着的 0.5L1mol/LFeCl3溶液与0.2L1mol/LKCl溶液中的Cl离子的数目之比是? 某车间有28名工人,生产一种螺栓和螺帽,一个螺帽的两头各套上一个螺帽配成一套,每人每天平均生产螺栓12个或螺帽18个两个螺栓配3个螺帽怎样安排才能使螺栓和螺帽才能试生产的正好配套 请问:“特殊的长方体是正方体”这样的说法是否正确?若不正确,为什么?正方体是特殊的长方体,这种说法是正确的,反之,成不成立? 下列说法是否正确.如不正确,请你说出原因.(1)22.4LO2中一定含有6.02×10^23个水分子.(2)将80g NaOH 溶于1L水中,所得溶液中NaOH的物质的量浓度为2mol/L.(3)18g H2O在标准状况下的体积是22.4L.(4)在标准状况 对于常开开关问题我买了一个常开开关40℃的上面写着250V5A,现在我想问一下假如这个常开开关在250V最大电流5A,如果在12V5A电流上使用,那么250V5A与12V5A有无区别? don't be a dick 今天在inst上看到的 下列关于化学说法不正确的是(原因)A.化学的特征是研究物质和创造物质B.化学是一门以实验为基础的自然科学C.化学是研究物质相互作用和运动规律的自然科学D.化学是在原子、分子水平 开关为什么有常开和常闭,什么原理? 威尔迪指纹门禁机能做联动门门禁吗?也就是俗称AB门门禁? 多羟基物质的判定具体怎么个比例算多羟基物质怎么判定呢? 这个开关是否可以理解为常闭常开? 指纹门禁好用吗?老板说要安装指纹门禁,大家有什么好的推荐吗? 一个环烷烃连一个羟基是什么物质一个脂环连一个羟基是什么物质? 比较反应热加正负号么?发现比较△H时要写正负号的,可是有道题目比较反应热时是只比较绝对值大小.还有填中和热和燃烧热时好像不用加“+”“-”,但他们也是反应热呀!感觉很乱,我不是这 Don't touch_____.______not a cat,_____a tiger! 数据结构,求三角矩阵的存储位置假设一个10阶的上三角矩阵A按行优先顺序压缩存储在一维数组B中,若矩阵中的第一个元素a11在B中的存储位置k=0,则元素a55在B中的存储位置k=_____ 反应热有正负吗 地球上什么生物的性欲最强? 不怕~也不怕造句 反应热的正负问题反应热△H为正时是吸热反应还是放热反应?书上见到公式:C+CO2==2CO,△H=-173.3kJ/mol.感觉很奇怪,明明记得C+CO2的反应是吸热反应哇~ 遗传是什么?.变异分为哪几种?. 求延拓定理内容 反应热有无正负 这图讲的什么意思? 下图所示装置中,甲、乙、丙三个烧杯依次分别盛放100g5.00%的NaOH溶液、足量的CuSO4溶液和100g10.00%的K2SO4溶液,电极均为石墨电极接通电源,测得丙中K2SO4浓度为10.47%,乙中c电极质量增加.据此回答 高一地理问题,这三道我全错了,求解释 在大气的云雾里,水的状态是 为什么多羟基物质能溶解氢氧化铜? 单项选择1、属于太阳系成员的是A.流星、彗星、卫星、狮子座B.星云、地球、卫星、彗星C.流星、彗星、行星、卫星D.小行星、地球、北斗星、星云2、下列有关太阳的叙述,正确的是A、太阳是 影响大气中的水热状况```多少的因素` 甲、乙、丙三个烧杯依次分别盛放100g5.00%的NaOH溶液、足量的CuSO4溶液和100g10.00%的K2SO4溶液电极均为石墨电极接通电源,测得丙中K2SO4浓度为10.47%,乙中c电极质量增加.据此回答问题:列式计算电 思鑫坊曾是杭城近代建筑代表 如今成无新消法引入\"举证倒置\" 经营者需前3季度国内渔业产值达5362亿元 上海自贸试验区营造“宽进严管”的营商谷歌雅虎数据遭美国国安局窃取 美媒称菲律宾议员“港人生命值钱说”激起香港俄罗斯核武部队大规模战略演习 抗衡北台湾花莲发生6.7级地震 杭州等多地医生举报官员公款出游 出门戴钢盔执擀美国务卿将访欧洲中东八国 重申与沙特俄律师称斯诺登在俄找到工作 新工作与\"免费\"医疗让俄罗斯进退两难 仅多航班遭炸弹威胁嫌疑人落网 因向父亲万圣节网友微博晒疯狂造型 惊现金正恩巴基斯坦警方在卡拉奇逮捕97名犯罪嫌北京数十村民阻拦农田被承包种树时遭打绍兴印染温州电镀两个“污染大户”转型斯诺登最新照:在莫斯科乘游览船 未戴调查指斯诺登最可能在俄最流行社交网站长沙飞杭州航班受炸弹威胁备降南昌医生举报副县长公款旅游 开发商10万佳兆业害惨同行 内资房企海外发债”被下周大盘将考验前期低点!高规格!新三板转板进入两会提案!谢明锦整形追梦「伊林未来性广」2015年中国爆发金融危机的几率有多收评:周末若无利好 周一还有暴跌!中国各省份GDP含金量排名美国M22“蝉”式空降坦克小史投资大佬邱国鹭的22年股市投研秘籍2015款DS 5LS在手,长安PS互联网保险,下一个风口还是美丽的陷阱他们告诉世界,选中国不会错!降息48小时:净息差压力山大,银行存你是福相还是薄命之相羊羊得意开年红利,首单送1000现金7月收官战沪指缩量收跌说iPhone6成本1200的人,你绝世美男杀阡陌灵宠攻略 花千骨手游玩下一任中国央行行长是……梦幻西游手游高级藏宝图都会挖出什么收微信红包也可能犯法? | 爱范早读
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘