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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

垃圾回收器

發(fā)布時間:2024/8/1 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 垃圾回收器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、垃圾回收器

????????1.Serial 年輕代 串行回收器,采用的是復制回收算法 ,單線程的

????????2.PS(Parallel Scavenge) 年輕代 并行回收器,采用的是復制回收算法,多線程的

????????3.ParNew 年輕代,配合CMS的并行回收,采用的是復制回收算法,多線程的

????????4.Serial Old 老年代,串行回收器,采用的是標記整理回收算法,單線程的

????????5.Parallel Old 老年代,并行回收器,采用的是標記整理回收算法,多線程的

????????6.CMS 老年代 并發(fā)回收器,采用標記清除回收算法,多線程

????????7.G1 分代收集器,但整個內存分區(qū)不存在物理上的年輕代與老年代的區(qū)別

????????8.ZGC

STW(stop the world): 編譯代碼時為每一個方法注入safepoint(方法中循環(huán)結束的點、方法執(zhí)行結束的點), 在暫停應用時,需要等待所有的用戶線程進入safepoint,之后暫停所有線程, 然后進行垃圾回收。

二、查看jvm垃圾回收器

查看JVM默認的垃圾回收器

cmd命令:

java -XX:+PrintCommandLineFlags -version

結果:

jdk 1.7 1.8 默認 UseParallelGC = PS + PO 【Parallel Scavenge + Parallel Old】

三、垃圾回收器跟內存大小優(yōu)化

1. serial 幾十兆

2.PS 上百兆 - 幾個G

3.CMS - 20G

4.G1 - 上百G

5.ZGC - 4T-16T

四、常見的垃圾回收器組合

  • Serial/Serial Old
  • ParNew/Serial Old:與上邊相比,只是比年輕代多了多線程垃圾回收而已
  • ParNew/CMS:當下比較高效的組合
  • Parallel Scavenge/Parallel Old:自動管理的組合
  • G1:最先進的收集器,但是需要JDK1.7update14以上
  • 五、CMS和G1的比較

    CMS:

    ????????采用多線程實現(xiàn)"標記-清除"算法

    算法原理:

    ????????1.初始標記:需要STW,只標記GC Roots能直接關聯(lián)到的對象。

    ????????2.并發(fā)標記:遍歷之前標記到的關聯(lián)節(jié)點, 80%的時間都耗在這里

    ????????3.重新標記:需要STW,修正并發(fā)標記期間,因用戶程序繼續(xù)運行導致標記產生變動的那一部分對象的標記記錄。

    ????????4.并發(fā)清除:并發(fā)清除可以和用戶線程一起運行,所以總體上停頓的時間非常短。 會產生浮動垃圾

    缺點:

    ????????1.對CPU資源敏感。

    ????????2.無法處理浮動垃圾。

    ????????3.收集結束后會產生大量碎片。

    里程碑的垃圾回收器,jdk1.4版本后期引入

    ????????因此目前任何一個JDK版本默認是CMS 并發(fā)垃圾回收是因為無法忍受STW(Stop-The-World)

    ????????單碎片化嚴重的時候,就會清除老奶奶出來,Serial Old,拿一個掃把一個一個掃,一個老奶奶拿個掃帚掃天安門廣場,那多慢。

    FGC 是老年代空間不足的時候觸發(fā),默認使用垃圾回收器是PS+PO,

    G1:

    三色標記+SATB;

    算法原理:

    • G1收集器將整個堆劃分為多個大小相等的區(qū)域
    • G1跟蹤各個區(qū)域里面的垃圾堆積的價值,在后臺維護一張優(yōu)先列表,每次根據(jù)允許的收集時間,優(yōu)先回收價值最大的區(qū)域,這種思路:在指定的時間內,掃描部分最有價值的region(而不是掃描整個堆內存),并回收,做到盡可能的在有限的時間內獲取盡可能高的收集效率。

    運作流程:

    • 初始標記:標記出所有與根節(jié)點直接關聯(lián)引用對象。需要STW
    • 并發(fā)標記:遍歷之前標記到的關聯(lián)節(jié)點,繼續(xù)向下標記所有存活節(jié)點。在此期間所有變化引用關系的對象,都會被記錄在Remember Set Logs中
    • 最終標記:標記在并發(fā)標記期間,新產生的垃圾。需要STW
    • 篩選回收:根據(jù)用戶指定的期望回收時間回收價值較大的對象(看"原理"第二條)。需要STW

    優(yōu)點:

  • 停頓時間可以預測:我們指定時間,在指定時間內只回收部分價值最大的空間,而CMS需要掃描整個年老代,無法預測停頓時間
  • 無內存碎片:垃圾回收后會整合空間,CMS采用"標記-清理"算法,存在內存碎片
  • 篩選回收階段:
    • 由于只回收部分region,所以STW時間我們可控,所以不需要與用戶線程并發(fā)爭搶CPU資源,而CMS并發(fā)清理需要占據(jù)一部分的CPU,會降低吞吐量。
    • 由于STW,所以不會產生"浮動垃圾"(即CMS在并發(fā)清理階段產生的無法回收的垃圾)

    總結:

    1、CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用;

    2、G1收集器收集范圍是老年代和新生代,不需要結合其他收集器使用;

    3、CMS收集器以最小的停頓時間為目標的收集器;

    4、G1收集器可預測垃圾回收的停頓時間

    5、CMS收集器是使用“標記-清除”算法進行的垃圾回收,容易產生內存碎片

    6、G1收集器使用的是“標記-整理”算法,進行了空間整合,降低了內存空間碎片。

    7.雖然G1的響應時間比CMS快,G1的吞吐量要比CMS少15%左右

    六、垃圾收集器常用參數(shù)

    -XX:+UseSerialGC = Serial New (DefNew) + Serial Old

    小型程序。默認情況下不會是這種選項

    -XX:+UseParNewGC = ParNew + SerialOld

    這個組合已經(jīng)很少用(在某些版本中已經(jīng)廢棄)

    -XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old

    -XX:+UseParallelGC = Parallel Scavenge + Parallel Old

    (1.8默認) 【PS + SerialOld】

    -XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old

    -XX:+UseG1GC = G1

    總結

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

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