JVM學(xué)習(xí)(一)內(nèi)存結(jié)構(gòu)

你還記得嗎雪情?你還記得嗎?你還記得嗎你辣?從來沒有記住過巡通,又何來忘記呢!

內(nèi)存結(jié)構(gòu)可以說是面試100%會(huì)出現(xiàn)的舍哄!為了應(yīng)付面試宴凉,趕緊百度、看書表悬,結(jié)果面試官問的深一點(diǎn)就嗝屁了弥锄!還不如說不會(huì)呢,可是這么基礎(chǔ)的知識(shí)點(diǎn)都不會(huì)蟆沫,所謂的會(huì)也可能是理論層面的籽暇,我在網(wǎng)上看多了很多相關(guān)的文章,互相印證饭庞,大部分的文章都是理論戒悠,理論還是理論。沒錯(cuò)理論是實(shí)踐的基礎(chǔ)舟山,可是知行合一才是完整的绸狐。廢話不多說了,下面進(jìn)入正題累盗。

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

共享區(qū)域:堆六孵、方法區(qū)

私有區(qū)域:程序計(jì)數(shù)器、棧幅骄、本地方法棧

注:1.8開始沒有單獨(dú)的方法區(qū)劫窒,而是在堆中分配一塊區(qū)域作為方法區(qū),通過命令查看內(nèi)存情況可知拆座,真的沒有單獨(dú)方法區(qū)

1:程序計(jì)數(shù)器

? ? ? 計(jì)數(shù)器到底記得是什么數(shù)呢主巍?當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器冠息。解釋器就是通過計(jì)數(shù)器來控制分支、循環(huán)孕索、跳轉(zhuǎn)逛艰、異常處理、線程恢復(fù)等搞旭,為了保證每個(gè)線程正確執(zhí)行散怖,計(jì)數(shù)器是每個(gè)線程私有的。在形象一點(diǎn)就是查看class文件肄渗,code對(duì)應(yīng)的每一行都是指令镇眷,計(jì)數(shù)器就是要記錄當(dāng)前棧正在執(zhí)行的指令行,當(dāng)線程切換后繼續(xù)執(zhí)行時(shí)翎嫡,從上一次的指令行繼續(xù)執(zhí)行欠动,

如果執(zhí)行native方法,則計(jì)數(shù)器的值為空(undefined)

程序計(jì)數(shù)器特點(diǎn):

? ? 線程私有惑申、生命周期和線程相同具伍、無OutOfMemoryError異常

2:虛擬機(jī)棧

? ? 線程私有的,和程序計(jì)數(shù)器的生命周期相同圈驼,虛擬機(jī)棧描述的是java方法執(zhí)行的內(nèi)存模型人芽,每個(gè)方法執(zhí)行時(shí)會(huì)創(chuàng)建一個(gè)棧幀。棧幀主要保存局部變量表绩脆、操作數(shù)棧萤厅、動(dòng)態(tài)鏈接、方法出口,局部變量表存放了編譯期可知的各種基本類型衙伶、對(duì)象引用(指針、句柄害碾、對(duì)象的位置)矢劲、returnAddress類型(指向一條字節(jié)碼指令)。線程請求的棧深度大于虛擬機(jī)允許的深度拋出StackOverFlowError(遞歸調(diào)用很容易拋出)慌随,如果虛擬機(jī)支持?jǐn)U展空間芬沉,當(dāng)無法申請到足夠空間時(shí)拋出OutOfMemoryError(如果堆內(nèi)存快用盡的時(shí)候,申請棧內(nèi)存就會(huì)拋出)

虛擬機(jī)棧的特點(diǎn):

? 線程私有阁猜、生命周期和線程相同丸逸、拋出StackOverFlowError和OutOfMemoryError、存放內(nèi)容(局部變量表剃袍、操作數(shù)黄刚、動(dòng)態(tài)鏈接、方法出口)

3:本地方法棧

? 和虛擬機(jī)棧的作用相同民效,只不過執(zhí)行的是本地方法憔维,而非java方法

4:堆

? 所有對(duì)象的實(shí)例和數(shù)據(jù)都要在堆上分配,堆還可以細(xì)分為新生代涛救、老年代、Eden空間业扒、From Survivor空間检吆、To Survivor空間,從內(nèi)存分配角度可以劃出多個(gè)線程私有的分配緩沖區(qū)TLAB程储,無論怎么劃分和存在內(nèi)容無關(guān)蹭沛,仍然是實(shí)例,劃分的目的就是為了更好的回收內(nèi)存章鲤,或者更快的分配內(nèi)存摊灭。物理空間可以不連續(xù),但是邏輯空間要連續(xù)咏窿,如果無法擴(kuò)展拋出OutOfMemoryError斟或,可通過-Xmx -Xms 控制,無法擴(kuò)展拋出OutOfMemoryError

源碼:

? ? ? ? byte[] allocation1, allocation2, allocation3,allocation4;

? ? ? ? allocation1 = new byte[1 * _1MB];

? ? ? ? allocation2 = new byte[2 * _1MB];

? ? ? ? allocation3 = new byte[3 * _1MB];

? ? ? ? allocation4 = new byte[4 * _1MB];

打印內(nèi)存情況

Heap Parameters:

Gen 0:? eden [0x04800000,0x04c28068,0x05000000) space capacity = 8388608, 51.95436477661133 used

? from [0x05100000,0x0517b108,0x05200000) space capacity = 1048576, 48.072052001953125 used

? to? [0x05000000,0x05000000,0x05100000) space capacity = 1048576, 0.0 usedInvocations: 1

Gen 1:? old? [0x05200000,0x05800030,0x05c00000) space capacity = 10485760, 60.000457763671875

可知內(nèi)存的地址范圍是0x04800000-0x05c00000

上圖中的4個(gè)byte數(shù)組對(duì)應(yīng)的內(nèi)存地址為0x04800000集嵌、0x05500050萝挤、0x05300010、0x05200000根欧,那么就足以說明這四個(gè)對(duì)象存儲(chǔ)在堆里

堆的特點(diǎn):共享內(nèi)存怜珍、生命周期和虛擬機(jī)相同、拋出OutOfMemoryError凤粗,保存所有的new的實(shí)例

5:方法區(qū)

? ? 線程共享的內(nèi)存區(qū)域酥泛,用于存儲(chǔ)已被虛擬機(jī)加載的類信息、常量嫌拣、靜態(tài)變量柔袁、即時(shí)編譯器編譯后的代碼數(shù)據(jù),虛擬機(jī)規(guī)范描述方法區(qū)為的一個(gè)邏輯部分异逐,別名非堆捶索,主要是和堆區(qū)分開。無法擴(kuò)展拋OutOfMemoryError,關(guān)于類的具體細(xì)節(jié)會(huì)有專門章節(jié)

方法區(qū)特點(diǎn):

共享內(nèi)存灰瞻、生命周期和虛擬機(jī)相同腥例、拋出OutOfMemoryError,保存類信息酝润、常量燎竖、靜態(tài)變量、即時(shí)編譯器編譯后的代碼數(shù)據(jù)

6:常量池

運(yùn)行時(shí)常量池是方法區(qū)的一部分要销,class文件中除了有版本构回、字段、方法、接口信息外還有一項(xiàng)信息是常量池捐凭,用于存放編譯后生成的字面量和引用拨扶,這部分內(nèi)容將在類加載后進(jìn)入方法區(qū)的運(yùn)行時(shí)常量池中存放。運(yùn)行過程中新的常量也可以放入常量池茁肠,允許擴(kuò)展,無法擴(kuò)展拋OutOfMemoryError

常量池特點(diǎn):

共享內(nèi)存患民、生命周期和虛擬機(jī)相同、拋出OutOfMemoryError垦梆,保存常量

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匹颤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子托猩,更是在濱河造成了極大的恐慌印蓖,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件京腥,死亡現(xiàn)場離奇詭異赦肃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)公浪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門他宛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人欠气,你說我怎么就攤上這事厅各。” “怎么了预柒?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵队塘,是天一觀的道長。 經(jīng)常有香客問我宜鸯,道長憔古,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任淋袖,我火速辦了婚禮鸿市,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘适贸。我一直安慰自己灸芳,他們只是感情好涝桅,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布拜姿。 她就那樣靜靜地躺著,像睡著了一般冯遂。 火紅的嫁衣襯著肌膚如雪蕊肥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音壁却,去河邊找鬼批狱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛展东,可吹牛的內(nèi)容都是我干的赔硫。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼盐肃,長吁一口氣:“原來是場噩夢啊……” “哼爪膊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起砸王,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤推盛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后谦铃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耘成,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年驹闰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瘪菌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疮方,死狀恐怖控嗜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骡显,我是刑警寧澤疆栏,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站惫谤,受9級(jí)特大地震影響壁顶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溜歪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一若专、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝴猪,春花似錦调衰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沛豌,卻和暖如春趋箩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工叫确, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跳芳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓竹勉,卻偏偏與公主長得像飞盆,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子次乓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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

  • JVM內(nèi)存模型Java虛擬機(jī)(Java Virtual Machine=JVM)的內(nèi)存空間分為五個(gè)部分桨啃,分別是: ...
    光劍書架上的書閱讀 2,493評(píng)論 2 26
  • 一、內(nèi)存模型 Java內(nèi)存模型檬输,往往是指Java程序在運(yùn)行時(shí)內(nèi)存的模型照瘾,而Java代碼是運(yùn)行在Java虛擬機(jī)之上的...
    keep_trying2017閱讀 565評(píng)論 0 0
  • 文章轉(zhuǎn)自 http://blog.csdn.net/u012152619/article/details/4696...
    云狗狗狗狗狗閱讀 603評(píng)論 1 4
  • 我最親愛的自己,每當(dāng)困難丧慈,坎坷來臨時(shí)析命,我不會(huì)像之前一樣的憤怒你,嘲笑你逃默,苛責(zé)你鹃愤,因?yàn)槟憔褪俏倚r(shí)候的樣子,我要愛你...
    薛功燦閱讀 177評(píng)論 0 0
  • 2018年的最后一天完域,我是在值班中度過的软吐,早餐八點(diǎn)半來到這里,再也沒出去過吟税,說實(shí)話我不討厭值班凹耙,但是很討厭這個(gè)辦公...
    sxwwxl閱讀 154評(píng)論 0 0