二拷沸、垃圾收集器與內(nèi)存分配策略

一色查、Java采用可達(dá)性算法

虛擬機(jī)采用可達(dá)性分析來判斷對象是否存活的。

它們已GC root對象為起點(diǎn)撞芍,向下搜索所有和GC root對象直接或間接關(guān)聯(lián)對象秧了。所走過的路徑為引用鏈。當(dāng)一個對象沒有到GC root的路徑時認(rèn)為該對象不可用序无。

在圖中obj4和obj5將被認(rèn)為是可回收對象验毡,因?yàn)闆]有關(guān)聯(lián)到GC ROOT的路徑


image.png

二、可以作為GC ROOT的對象

1.虛擬機(jī)棧中局部變量引用對象
2.類的靜態(tài)屬性引用對象
3.常亮引用對象
4.native方法引用對象

三帝嗡、強(qiáng)引用關(guān)系

1.強(qiáng)引用:只要有引用關(guān)系晶通,那么就不被回收
2.軟引用:當(dāng)系統(tǒng)內(nèi)存不足時被回收
3.弱引用:只要GC就回收
4.虛引用:能夠在垃圾回收時收到一個系統(tǒng)發(fā)出的通知,和弱引用強(qiáng)度一致

四哟玷、虛擬機(jī)垃圾回收的機(jī)制

1.首先會進(jìn)行一次篩選標(biāo)記狮辽,如果對象不可達(dá),將進(jìn)行篩選
2.篩選條件是有沒有必要調(diào)用finalize()方法碗降,當(dāng)對象沒有重寫該方法隘竭,或者finalize方法已經(jīng)被調(diào)用過,那么將不被執(zhí)行讼渊。如果認(rèn)為可以調(diào)用,那么將加入到F-QUEUE隊列中
3.所有在隊列中的對象都被執(zhí)行第二輪標(biāo)記尊剔,開啟一個線程調(diào)用隊列中的finalize方法爪幻,如果這時候有對象的finalize方法中讓該對象和任何對象關(guān)聯(lián),都將被移除隊列

finalize方法的優(yōu)先級很低

public static A a=null;
publc class A{
 protected void finalize() throws Throwable{
   a=this;
 }
}
main{
a=new A();
a=null;
// gc會調(diào)用finalize方法须误,讓對象自身進(jìn)行一次拯救挨稿。這里A的方法又重新關(guān)聯(lián)了一個引用。
System.gc();
Thread.sleep(500);
}

四京痢、類的回收

符合以下三點(diǎn)的類可以被回收:
1.當(dāng)堆中不存在任何該類的實(shí)例
2.加載該類的ClassLoader被回收
3.Class沒有被任何地方反射到

//控制類的回收
-Xnoclassage:

五奶甘、垃圾收回算法

1.標(biāo)記清楚法
標(biāo)記出要清理的,然后進(jìn)行清理祭椰。會產(chǎn)生大量的不連續(xù)的內(nèi)存

2.復(fù)制清除法

分配一個Edrn區(qū)和兩個大小相等的survivor空間臭家。每次清理Edrn和一塊survivor區(qū),把剩下的復(fù)制到另一塊方淤。Edrn和survivor區(qū)的空間是8:1:1的關(guān)系钉赁。

3.標(biāo)記整理法
同樣采用標(biāo)記清理,但是在標(biāo)記后將所有不清理的對象移動到內(nèi)存的一邊携茂,清理另一邊的內(nèi)存你踩。

OopMap協(xié)助GC

虛擬機(jī)中有一個OopMap的數(shù)據(jù)結(jié)構(gòu)來負(fù)責(zé),當(dāng)類加載的完成后,虛擬機(jī)就把對象內(nèi)的引用關(guān)系記錄下來

GC的時間點(diǎn)

虛擬機(jī)有safePoint機(jī)制带膜,當(dāng)程序執(zhí)行到“安全點(diǎn)時”(方法調(diào)用吩谦,異常跳轉(zhuǎn)等就會產(chǎn)生安全點(diǎn))。虛擬機(jī)采用主動中斷的機(jī)制膝藕。當(dāng)GC需要中斷線程時會設(shè)置一個標(biāo)志位式廷,每個線程都去讀哪個標(biāo)志位,當(dāng)為true時束莫,就主動中斷懒棉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市览绿,隨后出現(xiàn)的幾起案子策严,更是在濱河造成了極大的恐慌,老刑警劉巖饿敲,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妻导,死亡現(xiàn)場離奇詭異,居然都是意外死亡怀各,警方通過查閱死者的電腦和手機(jī)倔韭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓢对,“玉大人寿酌,你說我怎么就攤上這事∷队迹” “怎么了醇疼?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長法焰。 經(jīng)常有香客問我秧荆,道長,這世上最難降的妖魔是什么埃仪? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任乙濒,我火速辦了婚禮,結(jié)果婚禮上卵蛉,老公的妹妹穿的比我還像新娘颁股。我一直安慰自己,他們只是感情好毙玻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布豌蟋。 她就那樣靜靜地躺著,像睡著了一般桑滩。 火紅的嫁衣襯著肌膚如雪梧疲。 梳的紋絲不亂的頭發(fā)上允睹,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音幌氮,去河邊找鬼缭受。 笑死,一個胖子當(dāng)著我的面吹牛该互,可吹牛的內(nèi)容都是我干的米者。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宇智,長吁一口氣:“原來是場噩夢啊……” “哼蔓搞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起随橘,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤喂分,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后机蔗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒲祈,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年萝嘁,在試婚紗的時候發(fā)現(xiàn)自己被綠了梆掸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡牙言,死狀恐怖酸钦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咱枉,我是刑警寧澤钝鸽,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站庞钢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏因谎。R本人自食惡果不足惜基括,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望财岔。 院中可真熱鬧风皿,春花似錦、人聲如沸匠璧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夷恍。三九已至魔眨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遏暴。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工侄刽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朋凉。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓州丹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親杂彭。 傳聞我的和親對象是個殘疾皇子墓毒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

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