电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java內存模型的歷史變遷

瀏覽:24日期:2022-09-06 08:42:57

本文通過介紹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(解鎖)操作:線程釋放指定對象的鎖。

Java內存模型的歷史變遷

圖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

Java內存模型的歷史變遷

圖2新內存模型的設計示意圖

向程序員保證a操作將對b操作可見)。在新內存模型向程序員提供happens-before規則,程序員只需要與happens-before打交道即可,因此Java程序員的學習負擔大大降低。同時,新內存模型允許不會改變程序結果的重排序,這可以最大限度地放松對編譯器和處理器的束縛,新內存模型的執行性能比舊內存模型要好。

作者簡介:程曉明Java軟件工程師,關注并發與NIO,《深入理解Java內存模型》的作者。現就職于南京富士通南大軟件技術有限公司,從事富士通Interstage應用服務器的開發。

標簽: Java
相關文章:
主站蜘蛛池模板: 精密五金冲压件_深圳五金冲压厂_钣金加工厂_五金模具加工-诚瑞丰科技股份有限公司 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 振动时效_振动时效仪_超声波冲击设备-济南驰奥机电设备有限公司 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | 包装盒厂家_纸盒印刷_礼品盒定制-济南恒印包装有限公司 | 模具ERP_模具管理系统_模具mes_模具进度管理_东莞市精纬软件有限公司 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 六维力传感器_三维力传感器_二维力传感器-南京神源生智能科技有限公司 | 洛阳防爆合格证办理-洛阳防爆认证机构-洛阳申请国家防爆合格证-洛阳本安防爆认证代办-洛阳沪南抚防爆电气技术服务有限公司 | 高考志愿规划师_高考规划师_高考培训师_高报师_升学规划师_高考志愿规划师培训认证机构「向阳生涯」 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | 电磁流量计_智能防腐防爆管道式计量表-金湖凯铭仪表有限公司 | 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 | 实验室pH计|电导率仪|溶解氧测定仪|离子浓度计|多参数水质分析仪|pH电极-上海般特仪器有限公司 | 熔体泵_熔体出料泵_高温熔体泵-郑州海科熔体泵有限公司 | 谈股票-今日股票行情走势分析-牛股推荐排行榜| 厦门网站建设_厦门网站设计_小程序开发_网站制作公司【麦格科技】 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | ?水马注水围挡_塑料注水围挡_防撞桶-常州瑞轩水马注水围挡有限公司 | PVC快速门-硬质快速门-洁净室快速门品牌厂家-苏州西朗门业 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 东莞注册公司-代办营业执照-东莞公司注册代理记账-极刻财税 | 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 气动机械手-搬运机械手-气动助力机械手-山东精瑞自动化设备有限公司 | 渣土车电机,太阳能跟踪器电机,蜗轮蜗杆减速电机厂家-淄博传强电机 | 北京自然绿环境科技发展有限公司专业生产【洗车机_加油站洗车机-全自动洗车机】 | 电子厂招聘_工厂招聘_普工招聘_小时工招聘信息平台-众立方招工网 | 农业仪器网 - 中国自动化农业仪器信息交流平台 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 水轮机密封网 | 水轮机密封产品研发生产厂家 | 匀胶机旋涂仪-声扫显微镜-工业水浸超声-安赛斯(北京)科技有限公司 | 热工多功能信号校验仪-热电阻热电偶校验仿真仪-金湖虹润仪表 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 泰州物流公司_泰州货运公司_泰州物流专线-东鑫物流公司 | 昆明挖掘机修理厂_挖掘机翻新再制造-昆明聚力工程机械维修有限公司 | 尊享蟹太太美味,大闸蟹礼卡|礼券|礼盒在线预订-蟹太太官网 | 胃口福饺子加盟官网_新鲜现包饺子云吞加盟 - 【胃口福唯一官网】 | 视频教程导航网_视频教程之家_视频教程大全_最新视频教程分享发布平台 | 农业仪器网 - 中国自动化农业仪器信息交流平台 | 免费分销系统 — 分销商城系统_分销小程序开发 -【微商来】 |