java內(nèi)存模型

Java虛擬機(jī)在執(zhí)行Java程序的過程中猫十,會(huì)把它所管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)然爆。這些區(qū)域有各自的用途,以及創(chuàng)建和銷毀的時(shí)間浦妄,有的區(qū)域隨著虛擬機(jī)進(jìn)程的啟動(dòng)而存在,有的區(qū)域則依賴用戶線程的啟動(dòng)和結(jié)束而建立和銷毀见芹,我們可以將這些區(qū)域統(tǒng)稱為Java運(yùn)行時(shí)數(shù)據(jù)區(qū)域剂娄。
如下圖是一個(gè)內(nèi)存模型的關(guān)系圖(詳情見圖:內(nèi)存劃分.png):

內(nèi)存劃分.png

如上圖所示,Java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)域被分為五個(gè)區(qū)域:堆(Heap)玄呛、棧(Stack)阅懦、本地方法棧(Native Stack)、方法區(qū)(Method Area)徘铝、程序計(jì)數(shù)器(Program Count Register)耳胎。

1. 堆(Heap)

對(duì)于大多數(shù)應(yīng)用來說,Java Heap是Java虛擬機(jī)管理的內(nèi)存的最大一塊惕它,這塊區(qū)域隨著虛擬機(jī)的啟動(dòng)而創(chuàng)建怕午。在實(shí)際的運(yùn)用中,我們創(chuàng)建的對(duì)象和數(shù)組就是存放在堆里面淹魄。如果你聽說線程安全的問題郁惜,就會(huì)很明確的知道Java Heap是一塊共享的區(qū)域,操作共享區(qū)域的成員就有了鎖和同步甲锡。
與Java Heap相關(guān)的還有Java的垃圾回收機(jī)制(GC),Java Heap是垃圾回收器管理的主要區(qū)域兆蕉。程序猿所熟悉的新生代、老生代缤沦、永久代的概念就是在堆里面虎韵,現(xiàn)在大多數(shù)的GC基本都采用了分代收集算法。如果再細(xì)致一點(diǎn)缸废,Java Heap還有Eden空間包蓝,F(xiàn)rom Survivor空間,To Survivor空間等。
Java Heap可以處于物理上不連續(xù)的內(nèi)存空間中,只要邏輯上是連續(xù)的即可养晋。

2. 棧(Stack)

相對(duì)于Java Heap來講,Java Stack是線程私有的梁钾,她的生命周期與線程相同绳泉。Java Stack描述的是Java方法執(zhí)行時(shí)的內(nèi)存模型,每個(gè)方法執(zhí)行時(shí)都會(huì)創(chuàng)建一個(gè)棧幀(Stack Frame)用語存儲(chǔ)局部變量表姆泻、操作數(shù)棧零酪、動(dòng)態(tài)鏈接、方法出口等信息拇勃。從下圖從可以看到四苇,每個(gè)線程在執(zhí)行一個(gè)方法時(shí),都意味著有一個(gè)棧幀在當(dāng)前線程對(duì)應(yīng)的棧幀中入棧和出棧方咆。

棧.png

圖中可以看到每一個(gè)棧幀中都有局部變量表月腋。局部變量表存放了編譯期間的各種基本數(shù)據(jù)類型,對(duì)象引用等信息瓣赂。

3. 本地方法棧(Native Stack)

本地方法棧(Native Stack)與Java虛擬機(jī)站(Java Stack)所發(fā)揮的作用非常相似榆骚,他們之間的區(qū)別在于虛擬機(jī)棧為虛擬機(jī)棧執(zhí)行java方法(也就是字節(jié)碼)服務(wù),而本地方法棧則為使用到Native方法服務(wù)煌集。

4. 方法區(qū)(Method Area)

方法區(qū)(Method Area)與堆(Java Heap)一樣妓肢,是各個(gè)線程共享的內(nèi)存區(qū)域,它用于存儲(chǔ)虛擬機(jī)加載的類信息苫纤,常量碉钠,靜態(tài)變量,即時(shí)編譯器編譯后的代碼等數(shù)據(jù)卷拘。雖然Java虛擬機(jī)規(guī)范把方法區(qū)描述為堆的一個(gè)邏輯部分喊废,但是她卻有一個(gè)別名叫做非堆(Non-Heap)。分析下Java虛擬機(jī)規(guī)范恭金,之所以把方法區(qū)描述為堆的一個(gè)邏輯部分操禀,應(yīng)該覺得她們都是存儲(chǔ)數(shù)據(jù)的角度出發(fā)的。一個(gè)存儲(chǔ)對(duì)象數(shù)據(jù)(堆)横腿,一個(gè)存儲(chǔ)靜態(tài)信息(方法區(qū))颓屑。
在上文中,我們看到堆中有新生代耿焊、老生代揪惦、永久代的描述。為什么我們將新生代罗侯、老生代器腋、永久代三個(gè)概念一起說,那是因?yàn)镠otSpot虛擬機(jī)的設(shè)計(jì)團(tuán)隊(duì)選擇把GC分代收集擴(kuò)展至方法區(qū),或者說使用永久代來實(shí)現(xiàn)方法區(qū)而已纫塌。這樣HotSpot的垃圾收集器就能想管理Java堆一樣管理這部分內(nèi)存诊县。簡(jiǎn)單點(diǎn)說就是HotSpot虛擬機(jī)中內(nèi)存模型的分代,其中新生代和老生代在堆中措左,永久代使用方法區(qū)實(shí)現(xiàn)依痊。根據(jù)官方發(fā)布的路線圖信息,現(xiàn)在也有放棄永久代并逐步采用Native Memory來實(shí)現(xiàn)方法區(qū)的規(guī)劃怎披,在JDK1.7的HotSpot中胸嘁,已經(jīng)把原本放在永久代的字符串常量池移出。

5. 總結(jié)

1 凉逛、線程私有的數(shù)據(jù)區(qū)域有:
Java虛擬機(jī)棧(Java Stack)
本地方法棧(Native Stack)
2性宏、 線程共有的數(shù)據(jù)區(qū)域有:
堆(Java Heap)
方法區(qū)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市状飞,隨后出現(xiàn)的幾起案子毫胜,更是在濱河造成了極大的恐慌,老刑警劉巖昔瞧,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件指蚁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡自晰,警方通過查閱死者的電腦和手機(jī)凝化,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酬荞,“玉大人搓劫,你說我怎么就攤上這事』烨桑” “怎么了枪向?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)咧党。 經(jīng)常有香客問我秘蛔,道長(zhǎng),這世上最難降的妖魔是什么傍衡? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任深员,我火速辦了婚禮,結(jié)果婚禮上蛙埂,老公的妹妹穿的比我還像新娘倦畅。我一直安慰自己,他們只是感情好绣的,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布叠赐。 她就那樣靜靜地躺著欲账,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芭概。 梳的紋絲不亂的頭發(fā)上赛不,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音罢洲,去河邊找鬼俄删。 笑死,一個(gè)胖子當(dāng)著我的面吹牛奏路,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播臊诊,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼鸽粉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了抓艳?” 一聲冷哼從身側(cè)響起触机,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎玷或,沒想到半個(gè)月后儡首,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偏友,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了位他。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹅髓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窿冯,到底是詐尸還是另有隱情骗奖,我是刑警寧澤醒串,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站厦凤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏较鼓。R本人自食惡果不足惜椎木,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望香椎。 院中可真熱鬧,春花似錦畜伐、人聲如沸馍惹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慎框。三九已至良狈,卻和暖如春笨枯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馅精。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工严嗜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洲敢。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓漫玄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親压彭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子称近,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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