Java內(nèi)存模型

Java內(nèi)存模型即Java Memory Model票摇,簡稱JMM。JMM定義了Java 虛擬機(JVM)在計算機內(nèi)存(RAM)中的工作方式女气。

Java的內(nèi)存模型,采用的是共享內(nèi)存模型掉缺,線程之間的共享變量存儲在主內(nèi)存(main memory)中,每個線程都有一個私有的本地內(nèi)存(local memory)戈擒,本地內(nèi)存中存儲了該線程以讀/寫共享變量的副本攀圈。

Java內(nèi)存區(qū)域的劃分

Java內(nèi)存區(qū)域主要是指運行時數(shù)據(jù)區(qū),包括程序計數(shù)器峦甩、虛擬機棧、堆现喳、方法區(qū)凯傲、運行時常量池和本地方法棧

[圖片上傳失敗...(image-c1e913-1530195539373)]

程序計數(shù)器

程序計數(shù)器又被稱之為PC寄存器。
每個虛擬機線程都有自己的程序計數(shù)器嗦篱,用于保存虛擬機正在執(zhí)行字節(jié)碼指令的地址冰单。

虛擬機棧

每個Java虛擬機線程都有自己的私有的Java虛擬機棧,和線程同時創(chuàng)建灸促,用于存儲棧幀诫欠。

堆是可供各個線程共享的運行時的內(nèi)存區(qū)域,也是供所有類實例和數(shù)組對象分配內(nèi)存的區(qū)域浴栽。
Java堆是在虛擬機啟動的時候就被創(chuàng)建荒叼,它存儲了被垃圾收集器所管理的各種對象。

方法區(qū)

方法區(qū)是可供各個線程共享的運行時的內(nèi)存區(qū)域典鸡。是用于存儲每一個類的結(jié)構(gòu)信息被廓。

運行時常量池

運行時常量池是每一個類或接口的常量池的運行時表現(xiàn)形式,包含了若干種不同的常量:從編譯器可知的數(shù)值字面量到必須運行期解析后才能獲得的方法或字段引用萝玷。

每一個運行時常量池都分配在Java虛擬機的方法之中嫁乘,在類和接口被加載到虛擬機之后,對應的常量池就被創(chuàng)建出來了球碉。

本地方法棧

本地方法棧是用于Java虛擬機存儲native方法蜓斧。如果Java虛擬機不支持native方法,可以是沒有這個本地方法棧的睁冬,如果支持本地方法棧挎春,那么這個棧一般會在線程創(chuàng)建的時候按照線程分配。

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

Java虛擬機規(guī)范中定義了Java內(nèi)存模型的規(guī)范豆拨,原始的Java內(nèi)存模型存在一些不足搂蜓,因此Java內(nèi)存模型在Java1.5時被重新修訂。這個版本的Java內(nèi)存模型在到現(xiàn)在仍然在使用辽装。
JMM規(guī)定了一個線程如何和何時可以看到由其他線程修改過后的共享變量的值帮碰,以及在必須時如何同步的訪問共享變量。

[圖片上傳失敗...(image-4234bd-1530195517645)]

可以在線程之間共享的內(nèi)存被稱之為堆內(nèi)存或共享內(nèi)存拾积。所有實例字段殉挽,static字段和數(shù)組元素都存儲在堆內(nèi)存中丰涉,局部變量,形式方法參數(shù)和異常處理參數(shù)絕不會再線程間共享斯碌,并且不受內(nèi)存模型的影響一死。

如果線程A與線程B之間要通信的話,必須要經(jīng)歷下面2個步驟:

1)線程A把本地內(nèi)存A中更新過的共享變量刷新到主內(nèi)存中去傻唾。

2)線程B到主內(nèi)存中去讀取線程A之前已更新過的共享變量投慈。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市冠骄,隨后出現(xiàn)的幾起案子伪煤,更是在濱河造成了極大的恐慌,老刑警劉巖凛辣,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抱既,死亡現(xiàn)場離奇詭異,居然都是意外死亡扁誓,警方通過查閱死者的電腦和手機防泵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝗敢,“玉大人捷泞,你說我怎么就攤上這事∈偾矗” “怎么了肚邢?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拭卿。 經(jīng)常有香客問我骡湖,道長,這世上最難降的妖魔是什么峻厚? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任响蕴,我火速辦了婚禮,結(jié)果婚禮上惠桃,老公的妹妹穿的比我還像新娘浦夷。我一直安慰自己,他們只是感情好辜王,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布劈狐。 她就那樣靜靜地躺著,像睡著了一般呐馆。 火紅的嫁衣襯著肌膚如雪肥缔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天汹来,我揣著相機與錄音续膳,去河邊找鬼改艇。 笑死,一個胖子當著我的面吹牛坟岔,可吹牛的內(nèi)容都是我干的谒兄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼社付,長吁一口氣:“原來是場噩夢啊……” “哼承疲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鸥咖,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤燕鸽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扛或,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡碘饼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年熙兔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艾恼。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡住涉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钠绍,到底是詐尸還是另有隱情舆声,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布柳爽,位于F島的核電站媳握,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏磷脯。R本人自食惡果不足惜蛾找,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赵誓。 院中可真熱鬧打毛,春花似錦、人聲如沸俩功。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诡蜓。三九已至熬甫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蔓罚,已是汗流浹背罗珍。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工洽腺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人覆旱。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓蘸朋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扣唱。 傳聞我的和親對象是個殘疾皇子藕坯,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

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