第一章 java虛擬機內(nèi)存概要

###jvm運行時數(shù)據(jù)區(qū)域(NO.1)

>

>(img)

>(img)

##程序計數(shù)器

>程序計數(shù)器在jvm中是一個邏輯上的概念腊徙,在內(nèi)存中,每個線程都擁有一塊獨立的內(nèi)存空間來存儲執(zhí)行位置爽室,是線程私有的硫嘶。java多線程是通過線程輪流切換來分配處理器執(zhí)行時間的

>如果正在執(zhí)行的是java方法蠢琳,那么這個計數(shù)器記錄的就是正在執(zhí)行的虛擬機字節(jié)碼指令的地址;如果正在執(zhí)行的是Native方法辈灼,那么這個計數(shù)器值則為空(Undefined),該與其是唯一一個在Java虛擬機規(guī)范中沒有規(guī)定任何OutOfMemoryError情況的區(qū)域也榄。

> **Q:Java多線程執(zhí)行native方法時程序計數(shù)器為空巡莹,那么線程切換后如何找到之前執(zhí)行到哪里了? **

> A:這里的“pc寄存器”是在抽象的JVM層面上的概念——當(dāng)執(zhí)行Java方法時甜紫,這個抽象的“pc寄存器”存的是Java字節(jié)碼的地址降宅。實現(xiàn)上可能有兩種形式,一種是相對該方法字節(jié)碼開始處的偏移量囚霸,叫做bytecode index钉鸯,簡稱bci;另一種是該Java字節(jié)碼指令在內(nèi)存里的地址邮辽,叫做bytecode pointer唠雕,簡稱bcp。對native方法而言吨述,它的方法體并不是由Java字節(jié)碼構(gòu)成的岩睁,自然無法應(yīng)用上述的“Java字節(jié)碼地址”的概念。所以JVM規(guī)范規(guī)定揣云,如果當(dāng)前執(zhí)行的方法是native的捕儒,那么pc寄存器的值未定義——是什么值都可以。上面是JVM規(guī)范所定義的抽象概念,那么實際實現(xiàn)呢刘莹?Java線程總是需要以某種形式映射到OS線程上阎毅。映射模型可以是1:1(原生線程模型)、n:1(綠色線程 / 用戶態(tài)線程模型)点弯、m:n(混合模型)扇调。以HotSpot VM的實現(xiàn)為例,它目前在大多數(shù)平臺上都使用1:1模型抢肛,也就是每個Java線程都直接映射到一個OS線程上執(zhí)行狼钮。此時,native方法就由原生平臺直接執(zhí)行捡絮,并不需要理會抽象的JVM層面上的“pc寄存器”概念——原生的CPU上真正的PC寄存器是怎樣就是怎樣熬芜。就像一個用C或C\+\+寫的多線程程序,它在線程切換的時候是怎樣的福稳,Java的native方法也就是怎樣的涎拉。

##虛擬機棧

>每個線程在創(chuàng)建自己的時候都擁有一個私有的虛擬機棧,棧幀(Stack Frame)是虛擬機棧的棧元素的圆。_由于棧的數(shù)據(jù)結(jié)構(gòu)(先進后出)非常符合方法調(diào)用的邏輯曼库,所以使用了棧這種邏輯結(jié)構(gòu)。_

>java虛擬機棧的生命周期是與線程的生命周期相同的略板,每一個方法從調(diào)用到執(zhí)行完成的過程就是虛擬機棧從入棧到出棧的過程毁枯。虛擬機棧中的局部變量表部分所需的內(nèi)存空間在編譯器就完成分配了,在方法運行期間是不會改變局部變量表的大小叮称。

>兩種異常:如果線程請求的棧深度大于虛擬機所允許的深度种玛,將拋出StackOverflowError異常,如果虛擬機椚块埽可以動態(tài)擴展(大部分虛擬機都可以擴展赂韵,且是默認配置,也允許固定)挠蛉,如果擴展時申請不到足夠的內(nèi)存時則會拋出OutOfMemoryError異常祭示。

##本地方法棧

>本地方法棧和虛擬機棧相同,HotSpot虛擬機將兩者合二為一谴古,也會拋出StackOverflowError和OutOfMemoryError異常

##java堆

>java堆是線程共享的一塊區(qū)域质涛,所有的對象實例以及數(shù)組都要在堆上分配(現(xiàn)在的JVM不是絕對的)也是GC管理的主要區(qū)域,可以擴展通過-Xmx和-Xms控制掰担,當(dāng)堆中沒有內(nèi)存完成實例分配汇陆,并且堆也無法再擴展時,將會拋出OutOfMemoryError異常带饱。

##方法區(qū)

>與java堆一樣毡代,屬于線程共享的區(qū)域阅羹,用于存儲已被虛擬機加載的類的信息、常量教寂、靜態(tài)變量捏鱼、即時編譯器遍以后的代碼等數(shù)據(jù),Non-heap

##運行時常量區(qū) (Runtime Constant Pool)

>是方法區(qū)的一部分酪耕,用于存放編譯期生成的各種字面量和符號引用导梆,這部分內(nèi)容將在類加載后進入方法去的運行時常量池中存放。除了Class文件中的符號引用外因妇,還會把翻譯出來的直接引用也存儲在運行時常量池中问潭。

##直接內(nèi)存(Direct Memory)

>不是java虛擬機的內(nèi)存部分猿诸,但也可能導(dǎo)致OutOfMemoryError,例如NIO會直接分配堆外內(nèi)存,但是本機的直接內(nèi)存分配不會受到j(luò)ava堆大小的限制,需要注意的是設(shè)置參數(shù)的時候燎竖,不要使得總內(nèi)存大于物理內(nèi)存限制(硬件和操作系統(tǒng)的限制)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彰居,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子窜觉,更是在濱河造成了極大的恐慌谷炸,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件禀挫,死亡現(xiàn)場離奇詭異旬陡,居然都是意外死亡,警方通過查閱死者的電腦和手機语婴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門描孟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人砰左,你說我怎么就攤上這事匿醒。” “怎么了缠导?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵廉羔,是天一觀的道長。 經(jīng)常有香客問我僻造,道長憋他,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任髓削,我火速辦了婚禮举瑰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蔬螟。我一直安慰自己此迅,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耸序,像睡著了一般忍些。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坎怪,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天罢坝,我揣著相機與錄音,去河邊找鬼搅窿。 笑死嘁酿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的男应。 我是一名探鬼主播闹司,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沐飘!你這毒婦竟也來了游桩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耐朴,失蹤者是張志新(化名)和其女友劉穎借卧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筛峭,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡铐刘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了影晓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镰吵。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖俯艰,靈堂內(nèi)的尸體忽然破棺而出捡遍,到底是詐尸還是另有隱情,我是刑警寧澤竹握,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布画株,位于F島的核電站,受9級特大地震影響啦辐,放射性物質(zhì)發(fā)生泄漏谓传。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一芹关、第九天 我趴在偏房一處隱蔽的房頂上張望续挟。 院中可真熱鬧,春花似錦侥衬、人聲如沸诗祸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽直颅。三九已至博个,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間功偿,已是汗流浹背盆佣。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留械荷,地道東北人共耍。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像吨瞎,于是被迫代替她去往敵國和親痹兜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

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