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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java內(nèi)存模型的歷史變遷

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

本文通過(guò)介紹Java的新/舊內(nèi)存模型,來(lái)展示Java技術(shù)的歷史變遷。

舊的Java內(nèi)存模型

Java使用的是共享內(nèi)存的并發(fā)模型,在線程之間共享變量。Java語(yǔ)言定義了線程模型規(guī)范,通過(guò)內(nèi)存模型控制線程與變量的交互,從而實(shí)現(xiàn)Java線程之間的通信。在JDK5之前,Java一直使用的是舊內(nèi)存模型。如圖1所示。變量保存在由所有線程共享的主內(nèi)存中,主內(nèi)存中的變量稱為mastingcopy。每個(gè)線程都有一個(gè)工作內(nèi)存,它保存變量的workingcopy。舊的內(nèi)存模型定義了若干規(guī)則,通過(guò)這些規(guī)則來(lái)保證線程何時(shí)將主內(nèi)存中的mastingcopy傳送到線程的工作內(nèi)存中;以及線程何時(shí)將工作內(nèi)存中的workingcopy傳送回主內(nèi)存。舊內(nèi)存模型使用8個(gè)操作來(lái)定義線程可以執(zhí)行的動(dòng)作。

read(讀)操作:主內(nèi)存把mastingcopy傳送到線程的工作內(nèi)存,以供后面的load操作使用。load(裝載)操作:線程將由read操作從主內(nèi)存?zhèn)魉瓦^(guò)來(lái)的值,放入工作內(nèi)存中。use(使用)操作:線程將變量的workingcopy傳送到線程執(zhí)行引擎。assign(賦值)操作:線程將變量值從線程執(zhí)行引擎?zhèn)魉偷骄€程的工作內(nèi)存中。store(存儲(chǔ))操作:線程將變量的workingcopy傳送到主內(nèi)存,供后面的write操作使用。write(寫(xiě))操作:主內(nèi)存將由store操作傳送過(guò)來(lái)的值,放入主內(nèi)存中。lock(鎖定)操作:線程獲得指定對(duì)象的鎖。unlock(解鎖)操作:線程釋放指定對(duì)象的鎖。

Java內(nèi)存模型的歷史變遷

圖1 Java舊內(nèi)存模型

這里的關(guān)鍵是,由于read操作是由主內(nèi)存執(zhí)行,而對(duì)應(yīng)的load是由線程執(zhí)行,read操作和load操作之間是松散耦合的。也就是說(shuō),主內(nèi)存和線程工作內(nèi)存之間的變量傳遞是松散耦合的。同樣,由于store操作是由線程執(zhí)行,而對(duì)應(yīng)的write是由主內(nèi)存執(zhí)行,store操作和write操作之間是松散耦合的。也就是說(shuō),線程工作內(nèi)存和主內(nèi)存之間的變量傳遞是松散耦合的。舊Java內(nèi)存模型對(duì)Java實(shí)現(xiàn)如何執(zhí)行變量的讀/寫(xiě),加鎖/解鎖,以及volatile變量的讀/寫(xiě),定義了非常嚴(yán)格的規(guī)則。這些規(guī)則非常復(fù)雜,具體詳情請(qǐng)參考《JVM規(guī)范》,這里就不贅述了。舊Java內(nèi)存模型通過(guò)這些復(fù)雜的規(guī)則,來(lái)保證多線程程序的線程之間,可以可靠地傳遞共享變量,從而保證多線程程序的正確性。

新的Java內(nèi)存模型

從JDK5開(kāi)始,Java使用新的內(nèi)存模型,新內(nèi)存模型完全拋棄了舊內(nèi)存模型的主內(nèi)存和工作內(nèi)存的概念,也拋棄了舊內(nèi)存模型的8個(gè)內(nèi)存操作。也就是說(shuō),新內(nèi)存模型完全是重新設(shè)計(jì)的。

新內(nèi)存模型引入了一個(gè)新的概念,叫happens-before。happens-before的概念最初由LeslieLamport在其一篇影響深遠(yuǎn)的論文(《Time,ClocksandtheOrderingofEventsinaDistributedSystem》)中提出。LeslieLamport使用happens-before來(lái)定義分布式系統(tǒng)中,事件之間的一個(gè)偏序關(guān)系(partialordering)。LeslieLamport在這篇論文中給出了一個(gè)分布式算法,該算法可以將該偏序關(guān)系擴(kuò)展為某種全序關(guān)系。

JSR-133使用happens-before的概念來(lái)指定兩個(gè)操作(這里的操作是指程序中對(duì)變量的讀/寫(xiě),對(duì)鎖的加鎖和解鎖)之間的執(zhí)行順序。新內(nèi)存模型定義了如下的happens-before規(guī)則。

程序順序規(guī)則:一個(gè)線程中的每個(gè)操作,happensbefore于該線程中的任意后續(xù)操作。監(jiān)視器鎖規(guī)則:對(duì)一個(gè)鎖的解鎖,happens-before于隨后對(duì)這個(gè)鎖的加鎖。volatile變量規(guī)則:對(duì)一個(gè)volatile域的寫(xiě),happensbefore于任意后續(xù)對(duì)這個(gè)volatile域的讀。傳遞性:如果Ahappens-beforeB,且BhappensbeforeC,那么Ahappens-beforeC。start()規(guī)則:如果線程A執(zhí)行操作ThreadB.start()(啟動(dòng)線程B),那么A線程的ThreadB.start()操作happensbefore于線程B中的任意操作。join()規(guī)則:如果線程A執(zhí)行操作ThreadB.join()并成功返回,那么線程B中的任意操作happens-before于線程A從ThreadB.join()操作成功返回。

由于兩個(gè)操作可以在一個(gè)線程之內(nèi),也可以是在不同線程之間。因此JMM可以通過(guò)happens-before關(guān)系向程序員提供跨線程的內(nèi)存可見(jiàn)性保證(如果A線程的寫(xiě)操作a與B線程的讀操作b之間存在happens-before關(guān)系,盡管a操作和b操作在不同的線程中執(zhí)行,但JMM

Java內(nèi)存模型的歷史變遷

圖2新內(nèi)存模型的設(shè)計(jì)示意圖

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

作者簡(jiǎn)介:程曉明Java軟件工程師,關(guān)注并發(fā)與NIO,《深入理解Java內(nèi)存模型》的作者。現(xiàn)就職于南京富士通南大軟件技術(shù)有限公司,從事富士通Interstage應(yīng)用服務(wù)器的開(kāi)發(fā)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | 板框压滤机-隔膜压滤机-厢式压滤机生产厂家-禹州市君工机械设备有限公司 | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 安徽泰科检测科技有限公司【官方网站】 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 高通量组织研磨仪-多样品组织研磨仪-全自动组织研磨仪-研磨者科技(广州)有限公司 | 杭州代理记账多少钱-注册公司代办-公司注销流程及费用-杭州福道财务管理咨询有限公司 | 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 电抗器-能曼电气-电抗器专业制造商 | 合肥废气治理设备_安徽除尘设备_工业废气处理设备厂家-盈凯环保 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 云南成人高考_云南成考网| 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 | 硬度计,金相磨抛机_厂家-莱州华煜众信试验仪器有限公司 | 山东彩钢板房,山东彩钢活动房,临沂彩钢房-临沂市贵通钢结构工程有限公司 | 土壤养分检测仪_肥料养分检测仪_土壤水分检测仪-山东莱恩德仪器 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 首页 - 军军小站|张军博客| 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | 压砖机_电动螺旋压力机_粉末成型压力机_郑州华隆机械tel_0371-60121717 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 交联度测试仪-湿漏电流测试仪-双85恒温恒湿试验箱-常州市科迈实验仪器有限公司 | 大米加工设备|大米加工机械|碾米成套设备|大米加工成套设备-河南成立粮油机械有限公司 | 恒温恒湿试验箱厂家-高低温试验箱维修价格_东莞环仪仪器_东莞环仪仪器 | 游泳池设计|设备|配件|药品|吸污机-东莞市太平洋康体设施有限公司 | 江西自考网| Maneurop/美优乐压缩机,活塞压缩机,型号规格,技术参数,尺寸图片,价格经销商 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 锥形螺带干燥机(新型耙式干燥机)百科-常州丰能干燥工程 |