日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

垃圾回收与垃圾收集算法

發(fā)布時(shí)間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 垃圾回收与垃圾收集算法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

概述

可回收的條件

堆區(qū)可回收的條件

方法區(qū)可回收的條件

垃圾收集算法

理論支持

追蹤式垃圾收集常見(jiàn)算法

標(biāo)記-清除算法

標(biāo)記-復(fù)制算法

標(biāo)記-整理算法


概述

線程共享的內(nèi)存區(qū)需要內(nèi)存的分配和回收:Java堆和方法區(qū)

可回收的條件

堆區(qū)可回收的條件

堆中的回收對(duì)象是不再存活的實(shí)例,Java中判斷對(duì)象是否存活,同時(shí)滿足以下條件

  • 對(duì)象不再存活
  • 使用可達(dá)性分析算法判定對(duì)象是否存活
  • 從GC Roots到被判斷的對(duì)象不可達(dá)時(shí),證明對(duì)象是不再被引用的
  • 可以固定作為GC Roots的對(duì)象包括以下幾種(可不看)
  • 在虛擬機(jī)棧(棧幀中的本地變量表)中引用的對(duì)象,如當(dāng)前正在運(yùn)行的方法所使用到的參數(shù)、局部變量、臨時(shí)變量等
  • 在方法區(qū)中常量引用的對(duì)象,如字符串常量池里的引用
  • 在方法區(qū)中類靜態(tài)屬性引用的對(duì)象,如Java類的引用類型靜態(tài)變量
  • 想起來(lái)再補(bǔ)充吧
  • finalize方法沒(méi)有被重寫(xiě)或者已經(jīng)被調(diào)用過(guò)一次
  • finalize已經(jīng)被官方明確為不推薦使用的方法
  • 方法區(qū)可回收的條件

    方法區(qū)中主要回收的內(nèi)容

  • 廢棄常量
  • 無(wú)引用,即是否廢棄
  • 垃圾收集器判斷有必要
  • 判斷標(biāo)準(zhǔn)p74
  • 不再使用的類型(滿足后被允許回收,不一定回收)
  • 所有的實(shí)例都已回收
  • 該類的類加載器已回收
  • java.lang.Class對(duì)象沒(méi)有在任何地方被引用,無(wú)法在任何地方通過(guò)反射訪問(wèn)該類的方法
  • ? ? ? ? 總結(jié):性價(jià)比低,條件苛刻

    垃圾收集算法

    理論支持

    當(dāng)前商業(yè)虛擬機(jī)的垃圾收集器大多遵循分代收集理論進(jìn)行設(shè)計(jì),理論建立在以下假說(shuō)上

  • 弱分代假說(shuō):絕大多數(shù)對(duì)象都是朝生夕滅
  • 強(qiáng)分代假說(shuō):熬過(guò)越多次垃圾收集過(guò)程的對(duì)象就越難消亡
  • 跨代引用假說(shuō):跨代引用相對(duì)于同代引用來(lái)說(shuō)占極少數(shù),跨著跨著一起老不死了
  • 追蹤式垃圾收集常見(jiàn)算法

    標(biāo)記-清除算法

    最基礎(chǔ)的垃圾收集算法,標(biāo)記過(guò)程即對(duì)象是否始于垃圾的判定過(guò)程

    回收過(guò)程

  • 統(tǒng)一標(biāo)記需要回收的對(duì)象
  • 統(tǒng)一回收
  • 缺點(diǎn)

  • 執(zhí)行效率不穩(wěn)定
  • 堆中有大量對(duì)象,大部分需要被回收,必須進(jìn)行大量的標(biāo)記和清除動(dòng)作,導(dǎo)致清除和標(biāo)記兩個(gè)過(guò)程的執(zhí)行效率都隨著對(duì)象數(shù)量增長(zhǎng)而降低
  • 導(dǎo)致內(nèi)存空間碎片化
  • 標(biāo)記清除后會(huì)有大量不連續(xù)的內(nèi)存碎片
  • 標(biāo)記-復(fù)制算法

    常用于新生代回收,新生代存活的少

    回收過(guò)程

    將可用內(nèi)存按容量分成大小相等的兩塊,每次只使用一塊,這一塊內(nèi)存用完后開(kāi)始垃圾收集

  • 將還存活的對(duì)象復(fù)制到另一塊上
  • 將已使用過(guò)的內(nèi)存空間一次性清除
  • 優(yōu)點(diǎn):

  • 實(shí)現(xiàn)簡(jiǎn)單
  • 運(yùn)行高效
  • 不需要考慮空間碎片
  • 缺點(diǎn):

  • 內(nèi)存縮小為原來(lái)的一半
  • 產(chǎn)生大量的內(nèi)存復(fù)制的開(kāi)銷
  • Appel式回收

    優(yōu)化半?yún)^(qū)復(fù)制分代策略,內(nèi)存這樣劃分:新生代=Eden空間+Survivor空間*2,其中Eden空間和Survivor空間大小比例為8:1(HotSpot中);每次分配內(nèi)存只使用Eden和一塊Survivor空間,發(fā)生垃圾收集時(shí)?

  • 將Eden和Survivor空間中存活的對(duì)象一次性復(fù)制到另一塊Survivor上
  • 清除Eden和已使用的Survivor
  • ????????由此,每次新生代中可以使用的空間是整個(gè)新生代的90%,如果存活的對(duì)象超過(guò)10%,依賴其他內(nèi)存區(qū)域進(jìn)行分配擔(dān)保,實(shí)際上大多數(shù)就是老年代

    標(biāo)記-整理算法

    常用于老年代回收

    回收過(guò)程

  • 標(biāo)記存活的對(duì)象
  • 讓所有存活的對(duì)象向內(nèi)存空間的一側(cè)移動(dòng)
  • 清除掉邊界以外的內(nèi)存
  • 缺點(diǎn):

  • 移動(dòng)對(duì)象代價(jià)大
  • 老年代中每次回收都有大量存活的對(duì)象,移動(dòng)存活對(duì)象并更新所有引用這些對(duì)象的地方是極為負(fù)重的操作
  • 對(duì)象移動(dòng)操作時(shí)必須全程暫停用戶應(yīng)用程序才可,俗稱:stop the world
  • 優(yōu)點(diǎn):

  • 沒(méi)有碎片化,內(nèi)存分配簡(jiǎn)單
  • 相對(duì)不移動(dòng)來(lái)說(shuō)是個(gè)優(yōu)點(diǎn)?
  • ????????和稀泥式,平時(shí)使用普通標(biāo)記-清除,暫時(shí)容忍碎片存在,直到內(nèi)存空間的碎片化程度已經(jīng)達(dá)到影響對(duì)象分配時(shí)再使用標(biāo)記-整理算法收集一次

    總結(jié)

    以上是生活随笔為你收集整理的垃圾回收与垃圾收集算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。