JVM內(nèi)存模型——運(yùn)行時(shí)數(shù)據(jù)區(qū)(Runtime Data Areas)

一鳍徽、模型圖

JVM內(nèi)存模型.png

二、JVM內(nèi)存分區(qū)

JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的內(nèi)存有:方法區(qū)舆驶、Java堆橱健、Java棧、本地方法棧沙廉、程序計(jì)數(shù)器

  • 方法區(qū):方法區(qū)是被所有線程共享的內(nèi)存區(qū)域拘荡,用來(lái)存儲(chǔ)已被虛擬機(jī)加載的類信息、常量撬陵、靜態(tài)變量珊皿、JTI(just in time,即時(shí)編譯技術(shù))編譯后的代碼等數(shù)據(jù)。運(yùn)行時(shí)常量池是方法區(qū)的一部分巨税,用于存放編譯期間生成的各種字面常量和符號(hào)引用蟋定。平時(shí)通過(guò)反射獲取到的類型、方法名草添、字段名稱驶兜、訪問(wèn)修飾符等信息就是從方法區(qū)獲取到的。在使用到CGLib對(duì)類進(jìn)行增強(qiáng)時(shí)远寸,增強(qiáng)的類越多抄淑,就需要越大的方法區(qū)類存儲(chǔ)動(dòng)態(tài)生成的Class信息,當(dāng)存放方法區(qū)數(shù)據(jù)的內(nèi)存溢出時(shí)驰后,會(huì)報(bào)OutOfMemoryError異常肆资,在jdk1.8中也就是Metaspace內(nèi)存溢出,可以通過(guò)參數(shù)JVM參數(shù)-XX:MetaspaceSize和-XX:MaxMetaspaceSize設(shè)置Metaspace的空間大小灶芝。

  • Java堆(Heap):和方法區(qū)一樣是被所有線程共享的內(nèi)存區(qū)域郑原,是JVM中最大的一塊內(nèi)存區(qū)域,幾乎所有的對(duì)象實(shí)例都是在這個(gè)區(qū)域進(jìn)行內(nèi)存的分配的夜涕,為對(duì)象分配內(nèi)存主要有兩種方式:

    1. 指針碰撞法:把堆中的內(nèi)存進(jìn)行劃分(已分配的內(nèi)存+空閑的內(nèi)存)犯犁,通過(guò)指針作為分界點(diǎn),當(dāng)需要分內(nèi)存時(shí)女器,把指向空閑內(nèi)存移動(dòng)與對(duì)象大小相等的距離栖秕。
    2. 空閑列表法:JVM通過(guò)維護(hù)一個(gè)列表,記錄可用的內(nèi)存塊信息晓避,當(dāng)分配操作發(fā)生時(shí)簇捍,從列表中找到一個(gè)足夠大的內(nèi)存分配給對(duì)象實(shí)例,并更新列表上的記錄俏拱。
  • Java棧(Java Stack):又稱之為虛擬機(jī)棧暑塑,存放的是棧幀(棧的基礎(chǔ)單位), 是用來(lái)存儲(chǔ)數(shù)據(jù)和部分過(guò)程結(jié)果的數(shù)據(jù)結(jié)構(gòu)。

    Java棧.png

    其中:
    1.局部變量表:用于存儲(chǔ)方法參數(shù)和方法內(nèi)部定義的局部變量锅必,對(duì)于非static方法事格,局部變量表存儲(chǔ)的第0個(gè)位置存儲(chǔ)的為當(dāng)前對(duì)象的引用惕艳,可以通過(guò)關(guān)鍵字this進(jìn)行訪問(wèn),方法參數(shù)按照參數(shù)列表順序驹愚,從第1個(gè)位置分配下去远搪;
    2.操作數(shù)棧:用于操作運(yùn)行過(guò)程中的各種中間結(jié)果與字節(jié)碼指令;
    3.動(dòng)態(tài)鏈接:程序運(yùn)行過(guò)程中逢捺,將符號(hào)引用解析為直接引用谁鳍,例如多態(tài),對(duì)象的引用在程序運(yùn)行時(shí)鏈接到具體的實(shí)現(xiàn)類;
    4.出口記錄:程序的出口

  • 本地方法棧(Native Method Stack)
    本地方法棧是與Java棧發(fā)揮的作用十分相似,區(qū)別是Java棧執(zhí)行的是Java方法(也就是字節(jié)碼)服務(wù)劫瞳,而本地方法棧則為虛擬機(jī)使用到的本地方法服務(wù)倘潜,可能底層調(diào)用的c或者c++,我們打開(kāi)jdk安裝目錄可以看到也有很多用c編寫的文件,可能就是本地方法所調(diào)用的c代碼志于。

  • 程序計(jì)數(shù)器(Program Counter Register):用來(lái)記錄當(dāng)前方法執(zhí)行的情況涮因,為了在線程切換可以恢復(fù)到正確執(zhí)行位置,每個(gè)線程都需有獨(dú)立的一個(gè)程序計(jì)數(shù)器伺绽,不同線程之間的程序計(jì)數(shù)器互不影響养泡,獨(dú)立存儲(chǔ)。
    注意:如果線程執(zhí)行的是個(gè)java方法奈应,那么計(jì)數(shù)器記錄虛擬機(jī)字節(jié)碼指令的地址澜掩。如果為native【底層方法】,那么計(jì)數(shù)器為空钥组。這塊內(nèi)存區(qū)域是虛擬機(jī)規(guī)范中唯一沒(méi)有OutOfMemoryError的區(qū)域输硝。

注:Java棧今瀑、本地方法棧程梦、程序計(jì)數(shù)器生命周期一樣,都是線程私有橘荠,隨線程的創(chuàng)建而創(chuàng)建

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屿附,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哥童,更是在濱河造成了極大的恐慌挺份,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贮懈,死亡現(xiàn)場(chǎng)離奇詭異匀泊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)朵你,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門各聘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人抡医,你說(shuō)我怎么就攤上這事躲因。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵大脉,是天一觀的道長(zhǎng)搞监。 經(jīng)常有香客問(wèn)我,道長(zhǎng)镰矿,這世上最難降的妖魔是什么琐驴? 我笑而不...
    開(kāi)封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮衡怀,結(jié)果婚禮上棍矛,老公的妹妹穿的比我還像新娘。我一直安慰自己抛杨,他們只是感情好够委,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著怖现,像睡著了一般茁帽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屈嗤,一...
    開(kāi)封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天潘拨,我揣著相機(jī)與錄音,去河邊找鬼饶号。 笑死铁追,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的茫船。 我是一名探鬼主播琅束,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼算谈!你這毒婦竟也來(lái)了涩禀?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤然眼,失蹤者是張志新(化名)和其女友劉穎艾船,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體高每,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屿岂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鲸匿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爷怀。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晒骇,靈堂內(nèi)的尸體忽然破棺而出霉撵,到底是詐尸還是另有隱情磺浙,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布徒坡,位于F島的核電站撕氧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喇完。R本人自食惡果不足惜伦泥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锦溪。 院中可真熱鬧不脯,春花似錦、人聲如沸刻诊。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)则涯。三九已至复局,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粟判,已是汗流浹背亿昏。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留档礁,地道東北人角钩。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像呻澜,于是被迫代替她去往敵國(guó)和親递礼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355