java內(nèi)存模型

深入理解java虛擬機--第12章:

1.JMM主要用來屏蔽掉各種硬件與操作系統(tǒng)的內(nèi)存訪問差異尤筐,以實現(xiàn)讓Java程序在各種平臺下都能達到一致的內(nèi)存訪問效果恰矩。(平臺無關性)

2.其主要目標定義程序中各個變量的訪問規(guī)則熟尉,即在虛擬機中將變量存儲到內(nèi)存和從內(nèi)存中去除變量的底層細節(jié)鸽凶。此處變量和java編程時的變量有所區(qū)別(主要指那些可以共享的變量但绕,在堆、方法區(qū)之類的锭部;像那些存儲在棧里的就不在考慮之內(nèi)):其包括 -> 實例字段、靜態(tài)字段和構成數(shù)組對象的元素耻台,但不包括局部變量與方法參數(shù)空免。

3.JMM分住內(nèi)存與工作內(nèi)存,前者被規(guī)定存儲所有變量盆耽;而后者負責對變量的所有操作(讀取蹋砚、賦值等),由于其不能直接讀取住內(nèi)存中的變量摄杂,因此會只是保存用到變量的主內(nèi)存副本拷貝用于變量操作坝咐。

4.那么住內(nèi)存與工作內(nèi)存如何交互呢?JMM定義了8種原子的析恢、不可再分的操作來保證:lock,unlock,read,load,use,assign,store,write(其中l(wèi)ock,unlock,read,write作用于主內(nèi)存墨坚;load,use,assign,store作用于工作內(nèi)存),其中read與load映挂、store與write必須順序但不一定連續(xù)執(zhí)行泽篮;(這也是保證內(nèi)存一致性吧?)并且為了保證并發(fā)的安全性柑船,這8種操作還必須遵循一些規(guī)則:1).不允許read與load帽撑、store與write操作之一單獨出現(xiàn);2).assign操作若被執(zhí)行就不能丟棄鞍时,若沒被執(zhí)行就不能同步到主內(nèi)存【這點我理解與后一點呼應了】亏拉;3).新變量只能在主內(nèi)存誕生,就是實施use逆巍、store之前及塘,必須執(zhí)行過assign、load锐极。4).lock只發(fā)生在一個變量笙僚、一個時刻、一條線程溪烤,并且lock與unlock數(shù)量一致味咳,unlock之前得有l(wèi)ock,不允許unlock其他線程變量檬嘀。5).lock一個變量會清空工作內(nèi)存中此變量的值槽驶,因此回去執(zhí)行l(wèi)oad或assign操作初始化變量值;unlock一個變量之前鸳兽,會同步此變量到主內(nèi)存中掂铐,即執(zhí)行store、write操作。還有對volatile的一些特殊規(guī)定全陨。

5.volatile具有兩種特性:1).保證此變量對所有線程可見(在各個線程的工作內(nèi)存中爆班,volatile變量也可以存在不一致的情況,但由于每次使用之前都要先刷新辱姨,執(zhí)行引擎看不到不一致的情況柿菩,因此認為不存在一致性的問題);2).禁止指令重排序優(yōu)化(機器級的雨涛,對應的匯編代碼)枢舶。如何禁止?修改某個變量后替久,多執(zhí)行了一行l(wèi)ock前綴的操作(它把修改同步到內(nèi)存凉泄,意味著所有之前的操作都已經(jīng)執(zhí)行完成,起到了“指令重排序無法越過內(nèi)存屏障”的效果)后众,相當于一個內(nèi)存屏障,其作用使得本CPU的cache寫入內(nèi)存颅拦,從而引起別的CPU或內(nèi)核無效化其cache蒂誉,類似JVM中的“store和write”操作。這時再看JVM對volatile變量的特殊規(guī)則--load距帅、read拗盒、use必須連續(xù)一起出現(xiàn)(保證自己看到最新值);assign锥债、store、write必須連續(xù)一起出現(xiàn)(保證其它線程看到最新值)痊臭;還有一條(P372)是不同變量的use或者assign操作決定load或store哮肚、read或write的順序(保證代碼的執(zhí)行順序與程序的順序相同)。

6.先行發(fā)生原則广匙,是JVM定義的兩項操作之間的偏序關系允趟。程序次序規(guī)則;管程鎖定原則鸦致;volatile變量原則潮剪;線程啟動原則;線程終止原則分唾;線程中斷原則抗碰;對象終結原則;傳遞性绽乔。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弧蝇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌看疗,老刑警劉巖沙峻,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異两芳,居然都是意外死亡摔寨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門怖辆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來是复,“玉大人,你說我怎么就攤上這事疗隶∮铀瘢” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵斑鼻,是天一觀的道長蒋纬。 經(jīng)常有香客問我,道長坚弱,這世上最難降的妖魔是什么蜀备? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮荒叶,結果婚禮上碾阁,老公的妹妹穿的比我還像新娘。我一直安慰自己些楣,他們只是感情好脂凶,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愁茁,像睡著了一般蚕钦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鹅很,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天嘶居,我揣著相機與錄音,去河邊找鬼促煮。 笑死邮屁,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的菠齿。 我是一名探鬼主播佑吝,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泞当!你這毒婦竟也來了迹蛤?” 一聲冷哼從身側響起民珍,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盗飒,沒想到半個月后嚷量,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡逆趣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年蝶溶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宣渗。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡抖所,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痕囱,到底是詐尸還是另有隱情田轧,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布鞍恢,位于F島的核電站傻粘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏帮掉。R本人自食惡果不足惜弦悉,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蟆炊。 院中可真熱鬧稽莉,春花似錦、人聲如沸涩搓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昧甘。三九已至混狠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疾层,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工贡避, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留痛黎,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓刮吧,卻偏偏與公主長得像湖饱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子杀捻,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容