JVM學習筆記——垃圾回收篇( 三 )

終結器引用上述圖片的A4對象就是終結器引用
我們下面介紹終結器引用的概念:

  • 終結器引用實際上是對象自己定義的finallize方法
  • 終結器對象同樣也需要綁定引用隊列,因為他需要靠終結器對象來清除內部對象
然后我們介紹終結器引用的回收概念:
  • 如果我們希望清除終結器引用的對象,那么我們需要先將終結器引用對象導入到引用隊列中
  • 引用隊列中同樣也會一直檢測是否出現終結器對象,若出現終結器對象 , 那么針對該終結器對象調用其內部對象的finallize方法刪除
我們需要注意的是:
  • 引用隊列中檢測終結器對象的優先級較低,所以效率相關而言比較慢
垃圾回收算法本小節將會介紹垃圾回收的三種基本回收算法
標記清除法我們首先給出簡單圖示:
JVM學習筆記——垃圾回收篇

文章插圖
我們來做簡單解釋:
  • 首先我們找出需要進行垃圾回收的部分并進行標記
  • 然后我們將該標記地址部分清除即可(注意:這里的清除僅僅是記錄起始地址和終止地址,然后在其他內存占用時再次覆蓋)
該算法的優缺點:
  • 執行速度極快
  • 但會產生內存碎片,當內存碎片逐漸增多會導致問題
標記整理法我們首先給出簡單圖示:
JVM學習筆記——垃圾回收篇

文章插圖
我們來做簡單解釋:
  • 首先我們根據Root標記出需要垃圾回收的部分
  • 然后我們將垃圾回收的部分拋出之后,將后面的部分進行地址騰挪,使其緊湊
該算法的優缺點:
  • 不會產生內存碎片 , 導致內存問題
  • 速度較慢,同時整理過程中其他進程全部停止(因為會涉及內存地址重塑,進行其他進程可能會導致內存放置地址錯誤)
區域復制法我們首先給出簡單圖示:
JVM學習筆記——垃圾回收篇

文章插圖
我們來做簡單解釋:
  • 我們準備兩塊完全相同的區間,將他們分為From和To區間
  • 我們首先在from區間存儲數據,我們直接進行垃圾回收判定
  • 然后將需要保存的數據直接放入To區間,垃圾回收的部分不需要管理
  • 最后我們將From和To區間的定義交換 , 將新添加的數據放入現在的From區間(之前騰挪的To區間)
該算法的優缺點:
  • 不會產生內存碎片,相對而言比較迅速
  • 但需要占用兩塊相同的地址空間,導致占用空間較多
分代垃圾回收機制本小節將會介紹垃圾回收的常用機制
分代垃圾回收機制介紹我們前面已經介紹了三種垃圾回收算法 , 但實際上我們的垃圾回收采用的是三種方法的組合方法:
JVM學習筆記——垃圾回收篇

文章插圖
我們首先對大概念進行介紹:
  • 新生代:用于存放新產生的內存數據,清除頻繁
  • 老生代:用于存放一直使用的內存數據,只有當內存占滿時才會清理
然后我們對小概念進行介紹:
  • 伊甸園:用于存放所有的新產生的內存數據
  • 幸存區From:用于存放未被垃圾回收的數據
  • 幸存區To:用于進行未被垃圾回收的數據的復制方法
  • 幸存值:用于表示內存數據的常用程度,所有內存數據進入時默認值為0 , 
然后我們對整個回收機制進行介紹:
  • 首先我們的新數據都會進入到新生代的伊甸園中去,默認幸存值為0
  • 當伊甸園數據滿后,會進行gc , 這時我們進行標記清除法,將不需要的內存篩出
  • 同時將幸存下來的內存數據放入到幸存區From,幸存值+1,同時進行From和To區間的對調
  • 我們繼續進行儲存直到伊甸園再次占滿,對整個新生代進行gc
  • 首先將幸存區From的幸存內存放入To中并將伊甸園的幸存數據放入To,進行區間調換,幸存值+1
  • 直到幸存值達到一個閾值(默認為6或者15),該內存數據就會被移動到老年代,新生代仍舊繼續工作
  • 直至新生代和老年代全部都占滿后,這時我們就需要進行大型的垃圾回收 , 也就是我們之前提到的Full gc!
分代垃圾回收相關VM參數我們下面介紹一下分代垃圾回收機制的相關參數:
含義參數堆初始大小-Xms堆最大大小-Xmx 或 -XX:MaxHeapSize=size新生代大小-Xmn 或 (-XX:NewSize=size + -XX:MaxNewSize=size )幸存區比例(動態)-XX:InitialSurvivorRatio=ratio 和 -XX:+UseAdaptiveSizePolicy幸存區比例-XX:SurvivorRatio=ratio晉升閾值-XX:MaxTenuringThreshold=threshold晉升詳情-XX:+PrintTenuringDistributionGC詳情-XX:+PrintGCDetails -verbose:gcFullGC 前 MinorGC (小gc)-XX:+ScavengeBeforeFullGC分代垃圾回收案例展示我們通過一個簡單的實例來展示分代垃圾回收的實際演示:

推薦閱讀