Java內(nèi)存模型

出處:http://www.cnblogs.com/dolphin0520/

Java內(nèi)存模型(Java Memory Model耻蛇,JMM)

內(nèi)存模型規(guī)定:

  1. 所有的變量都是存在主存當(dāng)中(類(lèi)似于物理內(nèi)存)
  2. 每個(gè)線程都有自己的工作內(nèi)存(類(lèi)似于高速緩存)
  3. 線程對(duì)變量的所有操作都必須在工作內(nèi)存中進(jìn)行笛钝,而不能直接對(duì)主存進(jìn)行操作月劈。
  4. 每個(gè)線程不能訪問(wèn)其他線程的工作內(nèi)存。

緩存一致性(Cache coherence)問(wèn)題

當(dāng)程序在運(yùn)行過(guò)程中阅畴,會(huì)將運(yùn)算需要的數(shù)據(jù)從主存復(fù)制一份到CPU的高速緩存當(dāng)中领斥,那么CPU進(jìn)行計(jì)算時(shí)就可以直接從它的高速緩存讀取數(shù)據(jù)和向其中寫(xiě)入數(shù)據(jù),當(dāng)運(yùn)算結(jié)束之后哩都,再將高速緩存中的數(shù)據(jù)刷新到主存當(dāng)中

在一個(gè)系統(tǒng)中,當(dāng)許多不同的設(shè)備共享一個(gè)共同存儲(chǔ)器資源婉徘,在高速緩存中的數(shù)據(jù)不一致漠嵌,就會(huì)產(chǎn)生問(wèn)題。也就是說(shuō)如果一個(gè)變量在多個(gè)CPU中都存在緩存(一般在多線程編程時(shí)才會(huì)出現(xiàn))盖呼,那么就可能存在緩存不一致的問(wèn)題儒鹿。

緩存一致性可以分為三個(gè)層級(jí):

  • 在進(jìn)行每個(gè)寫(xiě)入運(yùn)算時(shí)都立刻采取措施保證數(shù)據(jù)一致性
  • 每個(gè)獨(dú)立的運(yùn)算,假如它造成數(shù)據(jù)值的改變几晤,所有進(jìn)程都可以看到一致的改變結(jié)果
  • 在每次運(yùn)算之后约炎,不同的進(jìn)程可能會(huì)看到不同的值(這也就是沒(méi)有一致性的行為)

為了解決緩存不一致性問(wèn)題,通常來(lái)說(shuō)有以下2種解決方法:

1.通過(guò)在總線加LOCK鎖的方式
2.通過(guò)緩存一致性協(xié)議蟹瘾。

最出名的就是Intel 的MESI協(xié)議圾浅,MESI協(xié)議保證了每個(gè)緩存中使用的共享變量的副本是一致的。

它核心的思想是:當(dāng)CPU寫(xiě)數(shù)據(jù)時(shí)憾朴,如果發(fā)現(xiàn)操作的變量是共享變量狸捕,即在其他CPU中也存在該變量的副本,會(huì)發(fā)出信號(hào)通知其他CPU將該變量的緩存行置為無(wú)效狀態(tài)众雷,因此當(dāng)其他CPU需要讀取這個(gè)變量時(shí)灸拍,發(fā)現(xiàn)自己緩存中緩存該變量的緩存行是無(wú)效的做祝,那么它就會(huì)從內(nèi)存重新讀取。


參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸡岗,一起剝皮案震驚了整個(gè)濱河市混槐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌轩性,老刑警劉巖声登,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異炮姨,居然都是意外死亡捌刮,警方通過(guò)查閱死者的電腦和手機(jī)碰煌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)舒岸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人芦圾,你說(shuō)我怎么就攤上這事蛾派。” “怎么了个少?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵洪乍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我夜焦,道長(zhǎng)壳澳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任茫经,我火速辦了婚禮巷波,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卸伞。我一直安慰自己抹镊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布荤傲。 她就那樣靜靜地躺著垮耳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪遂黍。 梳的紋絲不亂的頭發(fā)上终佛,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音雾家,去河邊找鬼查蓉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛榜贴,可吹牛的內(nèi)容都是我干的豌研。 我是一名探鬼主播妹田,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鹃共!你這毒婦竟也來(lái)了鬼佣?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤霜浴,失蹤者是張志新(化名)和其女友劉穎晶衷,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體阴孟,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晌纫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了永丝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锹漱。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖慕嚷,靈堂內(nèi)的尸體忽然破棺而出哥牍,到底是詐尸還是另有隱情,我是刑警寧澤喝检,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布嗅辣,位于F島的核電站,受9級(jí)特大地震影響挠说,放射性物質(zhì)發(fā)生泄漏澡谭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一损俭、第九天 我趴在偏房一處隱蔽的房頂上張望蛙奖。 院中可真熱鬧,春花似錦撩炊、人聲如沸外永。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伯顶。三九已至,卻和暖如春骆膝,著一層夾襖步出監(jiān)牢的瞬間祭衩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工阅签, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掐暮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓政钟,卻偏偏與公主長(zhǎng)得像路克,于是被迫代替她去往敵國(guó)和親樟结。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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