簡(jiǎn)單談?wù)凧VM中的GC(上)

上圖就是JVM的分代模型肛冶,JVM根據(jù)Object的生命周期長(zhǎng)短滤奈,將其分為上述的三個(gè)層次(也稱(chēng)代)哀蘑。不同的層次厘贼,其GC(收集回收)算法不一樣

Young Generation(年輕代界酒、young代)

對(duì)象的初次創(chuàng)建就會(huì)在young代,大部分對(duì)象在創(chuàng)建后不再被使用嘴秸,于是就會(huì)被年輕代的GC機(jī)制清理掉篡殷,這個(gè)GC叫做Minor GC或Young GC(注意:1前鹅、這是一個(gè)停頓動(dòng)作;2、這并不表示年輕代內(nèi)存不足次坡,僅表示Eden區(qū)滿(mǎn)了,發(fā)生GC)礼殊。

年輕代包括:Eden區(qū)+兩個(gè)存活區(qū)(S0和S1屏镊,即上圖中from和to)。young gc機(jī)制如下圖:

大部分對(duì)象在創(chuàng)建完后就會(huì)被分配在Eden區(qū)剖煌,使用完被銷(xiāo)毀

當(dāng)Eden區(qū)滿(mǎn)的時(shí)候材鹦,執(zhí)行Minor GC,將可銷(xiāo)毀的對(duì)象清除掉耕姊,將剩余不可銷(xiāo)毀的對(duì)象遷移到存活區(qū)S0

每次Eden發(fā)生Minor GC時(shí)桶唐,剩余存活對(duì)象都會(huì)到S0區(qū)(此時(shí)S1區(qū)空白)

當(dāng)S0區(qū)滿(mǎn)的時(shí)候,會(huì)將其中仍然存活的對(duì)象復(fù)制到S1茉兰,同時(shí)Eden發(fā)生Minor GC時(shí)尤泽,剩余對(duì)象都會(huì)到S1區(qū)(此時(shí)S0區(qū)空白)

S0和S1會(huì)來(lái)回復(fù)制存放(總有一個(gè)是空白),但某對(duì)象來(lái)回存放次數(shù)超過(guò)15次(-XX:MaxTenuringThreshold設(shè)置的值,默認(rèn)是15)坯约,則不再存在young代熊咽,將被存放到old代

當(dāng)Minor GC時(shí),存活的對(duì)象大過(guò)S0區(qū)的大小闹丐,則會(huì)直接進(jìn)入old代

總結(jié)下:

Eden區(qū)是一個(gè)連續(xù)的空間横殴,并且S區(qū)總有一個(gè)空白的。經(jīng)過(guò)一次GC和復(fù)制后卿拴,一個(gè)S區(qū)保留存活對(duì)象衫仑,而Eden區(qū)和另一個(gè)S區(qū)可直接清空,到下一次GC時(shí)堕花,兩個(gè)S區(qū)的角色互換文狱。這就是著名的“停止-復(fù)制(Stop-and-copy)”清理法。

Old Generation(年老代缘挽、old代)

對(duì)象如果在young存活了足夠長(zhǎng)的時(shí)間(多次Minor GC瞄崇,仍未能銷(xiāo)毀),則會(huì)被復(fù)制到old代到踏,old代的空間一般比young代大杠袱,能夠存放更多的對(duì)象,一般來(lái)說(shuō)old代上GC次數(shù)也比young代少窝稿。當(dāng)old年代空間不足時(shí)楣富,將執(zhí)行Major GC,也叫Full GC伴榔。

old代的對(duì)象銷(xiāo)毀并非跟young代一樣纹蝴,而是通過(guò)標(biāo)記-整理算法,即:標(biāo)記出仍然存活的對(duì)象(存在引用的)踪少,將所有存活的對(duì)象向一端移動(dòng)塘安,以保證內(nèi)存的連續(xù)。

但當(dāng)young代進(jìn)入old代時(shí)援奢,如果進(jìn)入old代的對(duì)象大小大于old代剩余空間大小兼犯,則會(huì)直接觸發(fā)一次Full GC(可通過(guò)-XX:+HandlePromotionFailure額外設(shè)置)

題外話(huà):可能存在old代的對(duì)象引用young代對(duì)象的情況,old代會(huì)維護(hù)一個(gè)512 byte的塊“card table”集漾,里面保存old代的對(duì)象引用young代對(duì)象的記錄,當(dāng)young gc時(shí),只需查這里诗芜,不用遍歷整個(gè)old代對(duì)象

Permanent Generation(持久代)

主要存放代碼(字節(jié)碼)孩哑,字符串常量池叙淌,靜態(tài)變量鹰霍,可持久化的數(shù)據(jù)等茂洒;

每次Full GC時(shí)督勺,同時(shí)也會(huì)銷(xiāo)毀掉持久代中可銷(xiāo)毀的對(duì)象

什么是可銷(xiāo)毀的對(duì)象次询?

所有的Java對(duì)象構(gòu)成一顆近似“搜索樹(shù)”的結(jié)構(gòu),有一個(gè)root根節(jié)點(diǎn)盒卸,每次從root出發(fā)向下搜索,當(dāng)整個(gè)樹(shù)遍歷完成后虹蓄,那些不在其中的變量則視為"垃圾"。

如上圖所示,紅色部分對(duì)象均屬于可刪除對(duì)象

什么是java的root節(jié)點(diǎn)跃须?

所有正在運(yùn)行的線(xiàn)程的棧上的引用變量。所有的全局變量第练。所有ClassLoader

知乎回答:?https://www.zhihu.com/question/50381439

接下來(lái)總結(jié)的是:GC算法和部分JVM參數(shù)講解

參考資料:

http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html

https://www.zhihu.com/question/50381439

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市婴梧,隨后出現(xiàn)的幾起案子塞蹭,更是在濱河造成了極大的恐慌番电,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隅很,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡畜挥,警方通過(guò)查閱死者的電腦和手機(jī)蟹但,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)躯泰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人华糖,你說(shuō)我怎么就攤上這事麦向。” “怎么了客叉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵诵竭,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我兼搏,道長(zhǎng)卵慰,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任向族,我火速辦了婚禮呵燕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘件相。我一直安慰自己,他們只是感情好氧苍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布夜矗。 她就那樣靜靜地躺著,像睡著了一般让虐。 火紅的嫁衣襯著肌膚如雪紊撕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天赡突,我揣著相機(jī)與錄音对扶,去河邊找鬼。 笑死惭缰,一個(gè)胖子當(dāng)著我的面吹牛浪南,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漱受,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼络凿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了昂羡?” 一聲冷哼從身側(cè)響起絮记,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虐先,沒(méi)想到半個(gè)月后怨愤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蛹批,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年撰洗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膀息。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡了赵,死狀恐怖潜支,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柿汛,我是刑警寧澤冗酿,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站络断,受9級(jí)特大地震影響裁替,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜貌笨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一弱判、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锥惋,春花似錦昌腰、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至捅伤,卻和暖如春劫流,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丛忆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工祠汇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熄诡。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓可很,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親粮彤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子根穷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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