1.判斷對(duì)象是否已死:
? 1.引用技術(shù)法:給對(duì)象添加引用計(jì)數(shù)器紀(jì)錄被引用次數(shù)
? ? 實(shí)現(xiàn)簡(jiǎn)單判定高效表蝙、但是無法解決對(duì)象循環(huán)引用的問題赖歌,實(shí)際上較少使用
? 2.可達(dá)性分析算法:從gc root對(duì)象作為起點(diǎn)向下搜索引用鏈警医,與引用鏈不能相連的對(duì)象即被判定為可回收對(duì)象内地。gcroot:本地變量表中引用對(duì)象粤蝎、類靜態(tài)屬性引用對(duì)象窟扑、方法常量引用對(duì)象喇颁、native方法引用對(duì)象
? ? ? 主流商用語(yǔ)言使用
2.引用
? ? 1.強(qiáng)引用:賦值引用,只要存在就不會(huì)被回收
? ? ? 2.軟引用:有用但非必需嚎货,在內(nèi)存溢出前才被第二次回收橘霎,若回收后內(nèi)存仍不夠才會(huì)拋出內(nèi)存溢出異常
? ? ? 3.弱引用:被引用對(duì)象只能存活到下次垃圾回收之前,垃圾收集器工作時(shí)無論內(nèi)存是否足夠都會(huì)回收
? ? ? 4.虛引用:對(duì)對(duì)象生存時(shí)間不會(huì)構(gòu)成影響殖属,僅起到被回收前進(jìn)行系統(tǒng)通知的作用
3.對(duì)象被回收過程:
? ? 1.第一次標(biāo)記:可達(dá)性分析認(rèn)為可回收
? ? ? 2.第二次標(biāo)記:對(duì)象的finalize()方法被調(diào)用期間仍未與引用隊(duì)列上對(duì)象建立引用關(guān)系
? ? 3.被真正回收
4.垃圾回收算法
? ? 1.標(biāo)記清除算法:標(biāo)記出需要回收對(duì)象姐叁,然后統(tǒng)一進(jìn)行回收
? ? ? ? 標(biāo)記、清除效率都不高洗显;清除完成后產(chǎn)生大量?jī)?nèi)存碎片外潜,不好對(duì)較大對(duì)象進(jìn)行內(nèi)存分配
? ? ? 2.復(fù)制算法:將內(nèi)存一分為二,一塊用于存儲(chǔ)挠唆,空間用完后將還存活的對(duì)象一次性復(fù)雜到另一半处窥,并清除掉前一半所有數(shù)據(jù)
? ? ? ? 運(yùn)行效率高,不用考慮碎片問題⌒椋現(xiàn)多用于新生代(回收率高)滔驾,分為一塊大內(nèi)存與兩塊小內(nèi)存,在大的和其中一塊小的上面進(jìn)行存儲(chǔ)俄讹,回收時(shí)將存活對(duì)象復(fù)制到另一塊小內(nèi)存上哆致。
? ? ? 3.標(biāo)記整理算法:標(biāo)記后將所有存活對(duì)象移動(dòng)到一起,然后清除存活對(duì)象范圍外內(nèi)存
? ? ? ? 針對(duì)對(duì)象存活率較高的老年代患膛,避免了較多的復(fù)制次數(shù)及額外空間分配