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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

五、jvm垃圾回收3(几种垃圾收集器)

發布時間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 五、jvm垃圾回收3(几种垃圾收集器) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  根據《深入理解java虛擬機》這本書總結

  前面說到了垃圾標記方法、垃圾收集算法、這篇主要總結一下垃圾收集的具體實現:垃圾收集器

  一、七種常見的垃圾收集器:

    根據所在老年代還是年輕代列出:

    年輕代:Serial、parNew、Parallel Scavenge

    老年代:CMS(Cocurrent Mark Sweep)、Serial Old、Parallel Old

    年輕代+老年代:G1

  二、垃圾收集器具體特點

   1、Serial?

      年輕代單線程收集器,沒有線程交互的開銷,可以達到單線程最高效率回收。

      采用復制算法實現、回收時需要暫停用戶所有線程(stop the world)。

      一般適用于client模式下的年輕代收集,因為對象存活率比較低,并且client內存分配比較小,雖然停頓,但是幾十毫秒是可以接受的。

      可以與老年代的:CMS、Serial Old配合使用

   2、Serial Old

      跟Serial一樣,老年代的單線程收集器

      采用標記-整理算法實現,回收時需要暫時所有用戶線程

      一般適用于client模式下的老年代的收集。

      可以與年輕代的:Serial、parNew、Parallel Scavenge配合使用      

   ? 3、parNew

      Serial升級版,年輕代多線程收集器,可以并行收集(并行:多線程工作。并發:用戶線程和手機線程同時工作)。

      采用復制算法,單核存在線程交互開銷,在多核機器下效果比較好,回收時需要暫停用戶所有線程(stop the world)。。

      可以與老年代的:CMS、Serial Old配合使用

   4、Parallell Scavenge

      年輕代的多線程并行收集器,與其他收集器關注點不同,主要關注吞吐量(運行用戶代碼時間/jvm總運行時間)

      采用復制算法,回收時需要暫停用戶所有線程(stop the world)。。

      不需要手動指定年輕代的各區域大小等,可以動態設定參數,虛擬機會根據當前系統,動態調整最適合的垃圾回收停頓時間,達到需要的吞吐量。

      可以與老年代的:Serial Old、Parallel Old配合使用

   5、Paraller Old

      老年代多線程并行收集器,關注點也是吞吐量,同Parallell Scavenge

      采用標記整理算法,回收時需要暫停用戶所有線程(stop the world)

      可以與新生代的:Parallell Scavenge配合使用

   6、CMS

      老年代的多線程并發并行收集器,以獲取最短回收停頓時間為目標,常用語互聯網B/S架構

      采用標記清除算法,過程為:初始標記(stop the world)-并發標記-重新標記(stop the world)-并發清除

     缺點:

      1、對cpu比較敏感,雖然并發清除期間不暫停用戶線程,但是清除會占用一部分cpu資源,導致響應比較慢

      2、咋并發清除階段產生的浮動垃圾,無法處理

      3、標記-清除,會產生空間碎片。長時間后會導致fullgc。

   7、G1收集器

      1、年輕代和老年代通用的收集器,并發并行收集器,但是現在生產環境還未大量使用

      2、G1與cms不一樣,使用標記-整理算法,沒有空間碎片。

      3、G1可以控制一次垃圾回收的停頓時間:其余的收集器,要么是針對年輕代、要么是針對老年代,G1的策略不同,將堆的內存布局分為大小相同的n個region,可以有計劃的對region進行回收,而不想其他收集器,必須對整個年輕代或者整個老年代回收。當需要進行垃圾收集的時候,g1會維護一個region優先手機列表,根據允許的收集時間來覺得對那些region進行最高效的回收。

      4、g1的垃圾回收是針對于region來做的,這就產生了一個問題,可能當前收集的region中對象,會跟其他沒有分配收集region中的對象有關聯關系,這一般就需要全局掃描,很耗費時間,但是g1中,region之間的對象引用都使用一個叫Remembered Set來記錄,每一個region都有一個set,虛擬機發現對引用類型數據操作時,會檢查引用是否處于一個region中,如果不是則記錄到set中去。這樣在回收region的時候,只需要查看set就能做到對其余region回收的不遺漏。

      5、g1垃圾收集過程:初始標記(stop the world)-并發標記-最終標記(stop the world)-篩選回收(stop the world)

  三、空間分配擔保

    都知道,gc回收分年輕代和老年代,當使用復制算法進行回收的時候,會將當前使用的eden和suviovor中的可用對象,復制到另外一個siuvivor中。這時候,如果suvivor中的空間裝不下可用的對象,那么怎么辦呢?這就是空間分配擔保要解決的問題,會將一些年輕較大的對象移動到老年代。那么在年輕代進行minor gc的時候,會進行什么操作?首先會檢查老年代的最大可用空間是否大于新生代所有對象的總和,如果成立可以保證直接可以進行gc。如果不成立,那么有一個擔保失敗的參數,如果該參數設置為允許,那么繼續檢查老年代最大可用連續空間是否大于歷次晉升到老難帶對象的平均大小,如果大于,那么直接進行minorgc,否則那么直接進行一次fullgc。當然這里也是有風險的,可能雖然可用連續空間是否大于歷次晉升到老難帶對象的平均大小,但是這次直接大于不夠了,如果不夠的話,也只能重新進行一次fullgc了。

  

      

    

轉載于:https://www.cnblogs.com/guoliangxie/p/7384661.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的五、jvm垃圾回收3(几种垃圾收集器)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。