每天一個(gè)知識點(diǎn)(6)--JVM-垃圾回收算法

JVM進(jìn)行垃圾回收需要確定哪些是垃圾對象,有兩種確認(rèn)方法:

  • 引用計(jì)數(shù)法:如果一個(gè)對象被引用,則引用計(jì)數(shù)+1,反之-1,那么引用計(jì)數(shù)為0的則為垃圾對象,但是這種方式無法解決循環(huán)引用問題。
  • 根可達(dá)算法:通過一系列成為GC Roots的對象作為起點(diǎn),向下搜索。當(dāng)一個(gè)對象到任何GC Roots都沒有引用鏈相連,說明其已經(jīng)死亡。

JVM的垃圾回收算法包含以下幾種:

  • 復(fù)制算法:該算法主要作用在堆中的年輕代,具體過程為將不是垃圾對象從eden區(qū)+survior from區(qū)復(fù)制到survior to區(qū),所有存活對象年齡+1,然后再循環(huán)下一次復(fù)制。該算法的特點(diǎn)是效率高,適合處理大量對象成為垃圾的場景,因?yàn)槟贻p代的對象都是朝生夕死,但是缺點(diǎn)就是有內(nèi)存的浪費(fèi)。
  • 標(biāo)記清除算法:最基礎(chǔ)的垃圾回收算法,分為兩個(gè)階段,標(biāo)注和清除。標(biāo)記階段標(biāo)記出所有需要回收的對象,清除階段回收被標(biāo)記的對象所占用的空間。該算法的缺點(diǎn)是產(chǎn)生內(nèi)存碎片。
  • 標(biāo)記整理算法:前一個(gè)階段和標(biāo)記清除很相似,都是標(biāo)記需要回收的對象,標(biāo)記后不是清理對象,而是將存活對象移向內(nèi)存的一端。然后清除端邊界外的對象。該方法相對標(biāo)記清除不會產(chǎn)生內(nèi)存碎片,但是相對來說效率會低一些。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容