JVM體系結(jié)構(gòu)

1杆查、JVM一共分為五個(gè)區(qū)扮惦,分別為方法區(qū)、堆亲桦、Java棧崖蜜、本地方法棧浊仆、程序計(jì)數(shù)器;

? 2豫领、方法區(qū)抡柿、堆為線程共享區(qū)域,GC會(huì)對(duì)二個(gè)區(qū)進(jìn)行垃圾回收等恐;

? 3洲劣、Java棧、本地方法棧课蔬、程序計(jì)數(shù)器為線程私有區(qū)域囱稽;

? 4、程序計(jì)數(shù)器:程序計(jì)數(shù)器是一塊較小的內(nèi)存空間二跋,是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器?程序計(jì)算器處于線程獨(dú)占區(qū)?如果線程執(zhí)行的是java方法战惊,記錄的是正在執(zhí)行的虛擬機(jī)字節(jié) 碼指令的地址,如果是native方法扎即,這個(gè)計(jì)數(shù)器值為undefined样傍;

? 5、Java棧:棧也叫棧內(nèi)存铺遂,主管Java程序的運(yùn)行衫哥,是在線程創(chuàng)建時(shí) 創(chuàng)建,它的生命期是跟隨線程的生命期襟锐,線程結(jié)束棧內(nèi)存也就釋放撤逢,對(duì)于棧來說不存在垃圾回收問題,只要線程一結(jié)束該棧就Over粮坞,生命周期和線程一致蚊荣,是線程私有的。8種基本類型的變量+對(duì)象的引用變量+實(shí)例方法都是在函數(shù)的棧內(nèi)存中分配莫杈,棧里有棧幀互例,有返回對(duì)象、本地變量表筝闹、操作數(shù)棧媳叨、動(dòng)態(tài)連接。

? 6关顷、本地方法棧:它的具體做法是NativeMethod Stack中登記native方法,在ExecutionEngine執(zhí)行時(shí)加載本地方法庫(kù)议双;

? 7痘番、方法區(qū):方法區(qū)是被所有線程共享,所有字段和方法字節(jié)碼汞舱,以及一些特殊方法如構(gòu)造函數(shù)伍纫,接口代碼也在此定義。簡(jiǎn)單說昂芜,所有定 義的方法的信息都保存在該區(qū)域翻斟,此區(qū)屬于共享區(qū)間。

? ? ? ? 類信息:類的版本 字段 方法 接口

? ? ? ? 靜態(tài)變量

? ? ? ? 常量

? ? ? ? 類信息(構(gòu)造方法/接口定義)

? ? ? ? 運(yùn)行時(shí)常量池

? 8说铃、堆:一個(gè)JVM實(shí)例只存在一個(gè)堆內(nèi)存访惜,堆內(nèi)存的大小是可以調(diào)節(jié)的。類加載器讀取了類文件后腻扇,需要把類债热、方法、常變量放到堆內(nèi)存中幼苛,保存所有引用類型的真實(shí)信息窒篱,以方便執(zhí)行器執(zhí)行。堆內(nèi)存邏輯上分為三部分:新生代+老年代+方法區(qū)


新生代分別分為:伊甸園舶沿、S0墙杯,S1


JVM自帶類裝載器

????? Bootstrap Class Loader:加載jre/lib/rt.jar?? 啟動(dòng)類加載器(Bootstrap)C++;

????? Extension Class Loader:加載jre/lib/ext/*.jar擴(kuò)展類加載器(Extension)Java括荡;

????? System Class Loader:加載classPath下面的類 系統(tǒng)類加載器高镐,加載當(dāng)前應(yīng)用的classpath的所有類;

對(duì)象的訪問定位

? ??建立對(duì)象是為了使用對(duì)象畸冲, java程序需要通過棧上的reference數(shù)據(jù)來操作堆上的具體對(duì)象嫉髓。由于reference類型在java虛擬機(jī)規(guī)范中之規(guī)定了一個(gè)指向?qū)ο蟮囊茫]有定義這個(gè)引用應(yīng)該通過何種方式定位邑闲、訪問堆中的對(duì)象的具體位置算行,所以對(duì)象訪問方式也取決于虛擬機(jī)的實(shí)現(xiàn)。目前主流的訪問方式有使用句柄和直接指針兩種苫耸。

句柄訪問

堆中將會(huì)劃分出一塊內(nèi)存來作為句柄池州邢,reference中存儲(chǔ)的就是對(duì)象的句柄地址,而句柄中包含了對(duì)象實(shí)例數(shù)據(jù)與類型數(shù)據(jù)格子的具體地址信息褪子。

指針訪問

使用直接指針訪問量淌,java堆中對(duì)象的布局就必須考慮如何放置訪問數(shù)據(jù)的相關(guān)信息,而reference中存儲(chǔ)的直接就是對(duì)象地址褐筛。

兩種對(duì)象訪問方式各有優(yōu)勢(shì)类少,使用句柄來訪問的最大好處就是reference中存儲(chǔ)的是穩(wěn)定的句柄地址,在對(duì)象被移動(dòng)(垃圾收集時(shí)移動(dòng)對(duì)象是非常普遍的)時(shí)只會(huì)改變句柄中的實(shí)例數(shù)據(jù)指針渔扎,而reference本身不需要修改。使用直接指針訪問方式的最大好處就是速度更快信轿,它節(jié)省了一次指針定位的時(shí)間開銷晃痴,由于對(duì)象的訪問在java中非常頻繁残吩,因此這類開銷積少成多之后也是一項(xiàng)非常可觀的執(zhí)行成本倘核。

垃圾回收

? 如何判斷對(duì)象為垃圾對(duì)象:引用計(jì)數(shù)法 可達(dá)性分析

? 回收算法:標(biāo)記清除泣侮、復(fù)制、標(biāo)記整理紧唱、分代算法

? 標(biāo)記清除:算法分為“標(biāo)記”和“清除”兩個(gè)階段:首先標(biāo)記出所有需要回收的對(duì)象活尊,在標(biāo)記完成后統(tǒng)一回收所有被標(biāo)記的對(duì)象。

主要不足有兩個(gè):

一個(gè)是效率問題漏益,標(biāo)記和清除兩個(gè)過程的效率都不高蛹锰;

一個(gè)是空間問題,標(biāo)記清除之后會(huì)產(chǎn)生大量不連續(xù)的內(nèi)存碎片绰疤,空間碎片太多可能會(huì)導(dǎo)致以后在程序運(yùn)行過程中需要分配較大對(duì)象時(shí)铜犬,無法找到足夠的連續(xù)內(nèi)存而不得不提前觸發(fā)另一次垃圾收集動(dòng)作。

? 復(fù)制:它將可用內(nèi)存按容量劃分為大小相等的兩塊轻庆,每次只使用其中的一塊癣猾。當(dāng)這一塊的內(nèi)存用完了,就將還存活著的對(duì)象復(fù)制到另外一塊上面余爆,然后再把已使用過的內(nèi)存空間一次清理掉纷宇。這樣使得每次都是對(duì)整個(gè)半?yún)^(qū)進(jìn)行內(nèi)存回收,內(nèi)存分配時(shí)也就不用考慮內(nèi)存碎片等復(fù)雜情況蛾方,只要移動(dòng)堆頂指針呐粘,按順序分配內(nèi)存即可,實(shí)現(xiàn)簡(jiǎn)單转捕,運(yùn)行高效作岖。只是這種算法的代價(jià)是將內(nèi)存縮小為了原來的一半,未免太高了一點(diǎn)五芝。

??標(biāo)記整理:標(biāo)記過程仍然與“標(biāo)記-清除”算法一樣痘儡,但后續(xù)步驟不是直接對(duì)可回收對(duì)象進(jìn)行清理,而是讓所有存活的對(duì)象都向一端移動(dòng)枢步,然后直接清理掉端邊界以外的內(nèi)存沉删。

? 分代算法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市醉途,隨后出現(xiàn)的幾起案子矾瑰,更是在濱河造成了極大的恐慌,老刑警劉巖隘擎,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殴穴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)采幌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門劲够,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人休傍,你說我怎么就攤上這事征绎。” “怎么了磨取?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵人柿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我忙厌,道長(zhǎng)凫岖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任慰毅,我火速辦了婚禮隘截,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘汹胃。我一直安慰自己婶芭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布着饥。 她就那樣靜靜地躺著犀农,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宰掉。 梳的紋絲不亂的頭發(fā)上呵哨,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音轨奄,去河邊找鬼孟害。 笑死,一個(gè)胖子當(dāng)著我的面吹牛挪拟,可吹牛的內(nèi)容都是我干的挨务。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼玉组,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼谎柄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惯雳,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤朝巫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后石景,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劈猿,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拙吉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糙臼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庐镐。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恩商,死狀恐怖变逃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怠堪,我是刑警寧澤揽乱,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站粟矿,受9級(jí)特大地震影響凰棉,放射性物質(zhì)發(fā)生泄漏街立。R本人自食惡果不足惜切黔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一坛掠、第九天 我趴在偏房一處隱蔽的房頂上張望骗奖。 院中可真熱鬧码撰,春花似錦拒担、人聲如沸哗魂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)映凳。三九已至,卻和暖如春邮破,著一層夾襖步出監(jiān)牢的瞬間诈豌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工抒和, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矫渔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓摧莽,卻偏偏與公主長(zhǎng)得像庙洼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子范嘱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • 內(nèi)存溢出和內(nèi)存泄漏的區(qū)別 內(nèi)存溢出:out of memory送膳,是指程序在申請(qǐng)內(nèi)存時(shí),沒有足夠的內(nèi)存空間供其使用丑蛤,...
    Aimerwhy閱讀 744評(píng)論 0 1
  • 第二部分 自動(dòng)內(nèi)存管理機(jī)制 第二章 java內(nèi)存異常與內(nèi)存溢出異常 運(yùn)行數(shù)據(jù)區(qū)域 程序計(jì)數(shù)器:當(dāng)前線程所執(zhí)行的字節(jié)...
    小明oh閱讀 1,174評(píng)論 0 2
  • 一叠聋、基礎(chǔ)知識(shí) 1. JVM實(shí)例:JVM實(shí)例對(duì)應(yīng)了一個(gè)獨(dú)立運(yùn)行的java程序,它是進(jìn)程級(jí)別受裹。 2. JVM執(zhí)行引擎實(shí)...
    java架構(gòu)源閱讀 243評(píng)論 0 1
  • 一碌补、基礎(chǔ)知識(shí) 1. JVM實(shí)例:JVM實(shí)例對(duì)應(yīng)了一個(gè)獨(dú)立運(yùn)行的java程序虏束,它是進(jìn)程級(jí)別。2. JVM執(zhí)行引擎實(shí)例...
    向前向后遇見改變閱讀 290評(píng)論 0 1
  • 一厦章、運(yùn)行時(shí)數(shù)據(jù)區(qū)域 Java虛擬機(jī)管理的內(nèi)存包括幾個(gè)運(yùn)行時(shí)數(shù)據(jù)內(nèi)存:方法區(qū)镇匀、虛擬機(jī)棧、本地方法棧袜啃、堆汗侵、程序計(jì)數(shù)器,...
    加油小杜閱讀 1,522評(píng)論 1 15