垃圾回收總結(jié)

內(nèi)存垃圾回收主要是解決3個(gè)問(wèn)題

  1. 哪些內(nèi)存需要回收 what
  2. 何時(shí)回收 when
  3. 怎么回收 how

哪些需要回收

程序計(jì)數(shù)器、方法棧、本地方法棧,這三個(gè)區(qū)域隨著線程而生,隨線程而滅

  1. 引用計(jì)數(shù)法 :
    優(yōu)點(diǎn); 實(shí)現(xiàn)簡(jiǎn)單,效率高
    缺點(diǎn):無(wú)法判斷環(huán)式引用
  2. 可達(dá)性分析:通過(guò)一系列稱之為GC Roots的對(duì)象作為起始點(diǎn),從這些節(jié)點(diǎn)開始向下搜索,所走過(guò)的路徑稱之為引用鏈。當(dāng)一個(gè)對(duì)象到任何一個(gè)GC roots 不存在引用鏈相連的時(shí)候,則證明此對(duì)象是不可達(dá)的。java中GC Roots包含以下幾種:
  • 虛擬機(jī)棧中引用的對(duì)象
  • 方法區(qū)中類靜態(tài)屬性引用的對(duì)象
  • 方法區(qū)中常量引用的對(duì)象
  • 本地方法棧中引用的對(duì)象

何時(shí)回收

java中引用有如下幾種

  1. 強(qiáng)引用
    最普遍的存在 a=new A
  2. 軟引用
    用來(lái)保存有用但非必須(例如cache)系統(tǒng)將要在發(fā)生內(nèi)存溢出之前,將會(huì)把這些對(duì)象列進(jìn)回收范圍之內(nèi)進(jìn)行第二次回收
  3. 弱引用
    也是用來(lái)描述非必須對(duì)象的,但是它的強(qiáng)度比軟引用更弱一些,被弱引用關(guān)聯(lián)的對(duì)象只能生存到下一次垃圾回收之前,當(dāng)垃圾回收的時(shí)候,無(wú)論內(nèi)存是否足夠,都會(huì)回收掉只被弱引用關(guān)聯(lián)的對(duì)象(使用場(chǎng)合?)
  4. 虛引用
    虛引用的存在不會(huì)對(duì)生存周期產(chǎn)生任何影響,也無(wú)法通過(guò)弱引用取得一個(gè)對(duì)象的實(shí)例,為一個(gè)對(duì)象設(shè)置虛引用的唯一目的就是能在這個(gè)對(duì)象被回收之前收到一個(gè)系統(tǒng)通知
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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