GC基礎(chǔ)概念

轉(zhuǎn)載
https://www.zhihu.com/question/53613423/answer/135743258

記錄R大的幾個觀點:

1. GC Roots
2. Tracing GC的思想
3. 分代的好處
4. Major GC和Full GC的區(qū)別
2. Tracing GC的思想

Tracing GC的根本思路就是: 給定一個集合的引用作為根出發(fā), 通過引用關(guān)系遍歷對象圖, 能被遍歷到的(可到達的)對象就被判定為存活, 其余對象(也就是沒有被遍歷到的)就自然被判定為死亡, 注意再注意: tracing GC的本質(zhì)是通過找出所有活對象來把其余空間認定為"無用", 而不是找出所有死掉的對象并回收它們占用的空間.

從root set出發(fā)遍歷看能順著引用遍歷到哪些young gen里的對象, 這些對象就被認定為是活的, 而young gen里剩余的空間, 無論是沒有對象還是有死對象, gc都不關(guān)系, 總之一股腦可以回收來用.

分代式GC對GC roots的定義的影響:
??分代式GC是一種部分收集(partial collection)的做法. 在執(zhí)行部分收集時, 從GC堆得非收集部分指向收集部分的引用, 也必須作為GC roots的一部分.
??具體到分兩代的分代式GC來說, 如果第0代叫做young gen,第1代叫做old gen, 那么如果有minor GC/young GC只收集young gen里的垃圾, 則young gen屬于"收集部分", 而old gen屬于"非收集部分", 那么從old gen指向young gen的引用就必須作為minor GC/young GC的GC roots的一部分.
??繼續(xù)具體到HotSpot VM里的分兩代GC來說, 除了old gen到y(tǒng)oung gen的引用之外, 有些帶有弱引用語義的結(jié)構(gòu), 例如說記錄所有當前被加載的類的SystemDictionary谬擦、記錄字符串常量引用的String Table等, 在young GC時必須要作為strong GC Roots, 而在收集整堆得full GC時則不會被看作strong GC roots.
劃重點:結(jié)合上面的概念, 可以理解為young GC比full GC的GC Roots要更大一些.

3. 分代的好處

??對傳統(tǒng)的、基本的GC實現(xiàn)來說, 由于它們在GC的整個工作過程中都要"stop-the-world", 如果能想辦法縮短GC一次工作時間長度就是件重要的事情, 如果說收集整個GC堆耗時太長, 那不如只收集其中的一部分.
??這個思路所基于的基本假設(shè): weak generational hypothesis---大部分對象的生命期很短(die young), 而沒有die young的對象則很可能會存活很長時間(live long)
??這是對過往的很多應(yīng)用行為分析之后得出的一個假設(shè). 基于這個假設(shè), 如果讓新創(chuàng)建的對象都在young gen里創(chuàng)建, 然后頻繁收集young gen, 則大部分垃圾都能在young gc中被收集掉. 由于young gen的大小配置通常只占整個GC堆得較小部分, 而且較高的對象死亡率(或者說較低的對象存活率)讓它非常適合copying算法來收集, 這樣就不但能降低單詞GC的時間長度, 還可以提高GC的工作效率.

4. Major GC和Full GC的區(qū)別
4.1 針對HotSpot VM的實現(xiàn), 它里面的GC其實準備分類只有兩大種:
  • Partial GC: 并不收集整個GC堆的模式
    Young GC: 只收集young gen的GC
    Old GC: 只收集old gen的GC, 只有CMS的concurrent collection是這個模式
    Mixed GC: 收集整個young gen以及部分old gen的GC, 只有G1有這個模式
  • Full GC: 收集整個堆, 包括young gen、old gen付魔、perm gen(如果存在的話)等所有部分的模式

Major GC通常是跟full GC是等價的, 收集整個GC堆. 當有人說"major GC"的時候一定要問清楚他想要指的是上面的Full GC還是old GC.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喉磁,一起剝皮案震驚了整個濱河市费就,隨后出現(xiàn)的幾起案子咖城,更是在濱河造成了極大的恐慌十绑,老刑警劉巖硬鞍,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慧瘤,死亡現(xiàn)場離奇詭異,居然都是意外死亡固该,警方通過查閱死者的電腦和手機锅减,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伐坏,“玉大人怔匣,你說我怎么就攤上這事¤氤粒” “怎么了每瞒?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長永部。 經(jīng)常有香客問我独泞,道長,這世上最難降的妖魔是什么苔埋? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任懦砂,我火速辦了婚禮,結(jié)果婚禮上组橄,老公的妹妹穿的比我還像新娘荞膘。我一直安慰自己,他們只是感情好玉工,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布羽资。 她就那樣靜靜地躺著,像睡著了一般遵班。 火紅的嫁衣襯著肌膚如雪屠升。 梳的紋絲不亂的頭發(fā)上潮改,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音腹暖,去河邊找鬼汇在。 笑死,一個胖子當著我的面吹牛脏答,可吹牛的內(nèi)容都是我干的糕殉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼殖告,長吁一口氣:“原來是場噩夢啊……” “哼阿蝶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起黄绩,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤羡洁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宝与,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焚廊,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年习劫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚼隘。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡诽里,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出飞蛹,到底是詐尸還是另有隱情谤狡,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布卧檐,位于F島的核電站墓懂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏霉囚。R本人自食惡果不足惜捕仔,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盈罐。 院中可真熱鬧榜跌,春花似錦、人聲如沸盅粪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽票顾。三九已至础浮,卻和暖如春帆调,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豆同。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工番刊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诱告。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓撵枢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親精居。 傳聞我的和親對象是個殘疾皇子锄禽,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355