理解JVM(一):JVM內(nèi)存結(jié)構(gòu)

摘要: 原創(chuàng)出處 https://peijie-sh.github.io 歡迎轉(zhuǎn)載楣嘁,保留摘要,謝謝!

在JVM中顷啼,內(nèi)存主要被分為5類

JVM內(nèi)存結(jié)構(gòu).jpg

Heap

  • 虛擬機(jī)內(nèi)存管理中最大的一塊內(nèi)存空間。
  • 存放關(guān)鍵字new創(chuàng)建的對(duì)象實(shí)例和數(shù)組昌屉。
  • 堆內(nèi)存被所有線程共享钙蒙。
  • 這塊內(nèi)存區(qū)由JVM(Java虛擬機(jī))自己管理。當(dāng)使用new創(chuàng)建對(duì)象時(shí)间驮,不必指定分配空間的大小躬厌,JVM會(huì)動(dòng)態(tài)自動(dòng)分配一塊區(qū)域;在程序執(zhí)行過程中竞帽,沒有指向此對(duì)象的引用時(shí)扛施,此對(duì)象就被標(biāo)記為可被回收狀態(tài),將由GC(垃圾回收器)在一個(gè)不確定的時(shí)間自動(dòng)回收屹篓,釋放所占的內(nèi)存空間疙渣。
  • 從內(nèi)存回收的角度看,垃圾收集器大都基于分代收集算法堆巧,所以堆一般分為新生代老年代妄荔,更細(xì)致可劃分為:Eden空間泼菌,From Survivor空間To Survivor空間懦冰。

虛擬機(jī)棧VM Stack

  • 存放8種基本類型的數(shù)據(jù)和對(duì)象引用(不是對(duì)象)灶轰。
  • 每個(gè)線程有自己的單獨(dú)的棧。
  • 先進(jìn)后出刷钢,后進(jìn)先出笋颤。
  • 因?yàn)橹饕娣呕绢愋蛿?shù)據(jù)變量,所以分配空間比堆快内地。當(dāng)超出變量的作用域伴澄,將由編譯器立即釋放空間。

本地方法棧Native Method Stack

  • 虛擬機(jī)棧類似阱缓,虛擬機(jī)棧為虛擬機(jī)調(diào)用Java方法服務(wù)非凌,本地方法棧為虛擬機(jī)調(diào)用Native方法服務(wù)。
  • 在HotSpot虛擬機(jī)實(shí)現(xiàn)中荆针,虛擬機(jī)棧本地方法棧被合并為一個(gè)區(qū)域敞嗡。

程序計(jì)數(shù)器 Program Counter Register

一塊較小的內(nèi)存空間,可看作是當(dāng)前線程所執(zhí)行的字節(jié)碼的 行號(hào)指示器航背。

通過改變計(jì)數(shù)器的值來選取下一條需要執(zhí)行的字節(jié)碼指令喉悴。(分支、循環(huán)玖媚、跳轉(zhuǎn)箕肃、異常處理、線程恢復(fù)等)基礎(chǔ)功能都依賴與其完成今魔。

特點(diǎn):

  • 線程私有:因?yàn)?Java 虛擬機(jī)的多線程是通過 線程輪流切換 并 分配處理器執(zhí)行時(shí)間 來實(shí)現(xiàn)的勺像,在某一時(shí)刻,只會(huì)執(zhí)行一條線程错森。因此吟宦,為了線程切換后能恢復(fù)到正確的執(zhí)行位置,每條線程都需要有一個(gè)獨(dú)立的程序計(jì)數(shù)器涩维。
  • 無內(nèi)存溢出:如果線程正在執(zhí)行的是一個(gè) Java 方法殃姓,這個(gè)計(jì)數(shù)器記錄的是正在 執(zhí)行的虛擬機(jī)字節(jié)碼指令的地址;如果正在執(zhí)行的是 Native 方法激挪,這個(gè)計(jì)數(shù)器值則為空(Undefined)。此內(nèi)存區(qū)域是唯一一個(gè)在 Java 虛擬機(jī)程序規(guī)范中沒有規(guī)定任何 OutOfMemoryError 情況的區(qū)域锋叨。

方法區(qū)Method Area

  • 跟堆一樣垄分,被所有的線程共享。
  • 是一個(gè)內(nèi)存邏輯區(qū)域娃磺,用于存儲(chǔ)已被虛
    擬機(jī)加載的類信息薄湿、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)豺瘤。

運(yùn)行時(shí)常量池Runtime Constant Pool

  • 方法區(qū)的一部分吆倦。
  • Class文件中除了有類的版本、字段坐求、方法蚕泽、接口等描述信息外,還有一項(xiàng)信息是常量池桥嗤,用于存放編譯期生成的各種字面量和符號(hào)引用须妻,這部分內(nèi)容將在類加載后進(jìn)入方法區(qū)的運(yùn)行時(shí)常量池中存放。

直接內(nèi)存Direct Memory

直接內(nèi)存不是虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分泛领,也不是Java虛擬機(jī)規(guī)范中定義的內(nèi)存區(qū)域荒吏。
但是這部分內(nèi)存也被頻繁地使用渊鞋,而且也可能導(dǎo)致OutOfMemoryError異常出現(xiàn)绰更。

在JDK 1.4中新加入了NIO(New Input/Output)類,引入了一種基于通道(Channel)與緩
沖區(qū)(Buffer)的I/O方式锡宋,它可以使用Native函數(shù)庫(kù)直接分配堆外內(nèi)存儡湾,然后通過一個(gè)存儲(chǔ)
在Java堆中的DirectByteBuffer對(duì)象作為這塊內(nèi)存的引用進(jìn)行操作。這樣能在一些場(chǎng)景中顯著
提高性能员辩,因?yàn)楸苊饬嗽贘ava堆和Native堆中來回復(fù)制數(shù)據(jù)盒粮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市奠滑,隨后出現(xiàn)的幾起案子丹皱,更是在濱河造成了極大的恐慌,老刑警劉巖宋税,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摊崭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡杰赛,警方通過查閱死者的電腦和手機(jī)呢簸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乏屯,“玉大人根时,你說我怎么就攤上這事〕皆危” “怎么了蛤迎?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)含友。 經(jīng)常有香客問我替裆,道長(zhǎng)校辩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任辆童,我火速辦了婚禮宜咒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘把鉴。我一直安慰自己故黑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布纸镊。 她就那樣靜靜地躺著倍阐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逗威。 梳的紋絲不亂的頭發(fā)上峰搪,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音凯旭,去河邊找鬼概耻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛罐呼,可吹牛的內(nèi)容都是我干的鞠柄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嫉柴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼厌杜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起计螺,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤夯尽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后登馒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匙握,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年陈轿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了圈纺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡麦射,死狀恐怖蛾娶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情潜秋,我是刑警寧澤蛔琅,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站半等,受9級(jí)特大地震影響揍愁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杀饵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一莽囤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧切距,春花似錦朽缎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至葡幸,卻和暖如春最筒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蔚叨。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工床蜘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔑水。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓邢锯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親搀别。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丹擎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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