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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

四种常用的垃圾收集器

發布時間:2025/5/22 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 四种常用的垃圾收集器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于垃圾收集器做個小總結:?

? ? ? ? ?垃圾回收器從線程運行情況分類有三種

  • 串行回收,Serial回收器,單線程回收,全程stw;
  • 并行回收,名稱以Parallel開頭的回收器,多線程回收,全程stw;
  • 并發回收,cms與G1,多線程分階段回收,只有某階段會stw;
  • 注:

    串行回收: JDK1.5前的默認算法 缺點是只有一個線程,執行垃圾回收時程序停止的時間比較長

    并行(parallel):指多條垃圾收集線程并行工作,但此時用戶線程仍然處于等待狀態。多個線程執行垃圾回收適合于吞吐量的系統,回收時系統會停止運行? ?高并發項目適合?

    并發(Concurrent):指用戶線程與垃圾收集線程同時執行(但不一定是并行的,可能會交替進行),用戶程序在繼續鏡像,而垃圾收集程序運行于另一個CPU上。

    ?


    ?

    下面常用的四個收集器:

    serial收集器(復制算法)

    串行收集器是最古老,最穩定以及效率高的收集器,可能會產生較長的停頓,只使用一個線程去回收。新生代、老年代使用串行回收;新生代復制算法、老年代標記-壓縮;

    垃圾收集的過程中會Stop The World(服務暫停)

    一個單線程的收集器,在進行垃圾收集時候,必須暫停其他所有的工作線程直到它收集結束。

    特點:CPU利用率最高,停頓時間即用戶等待時間比較長。

    適用場景:小型應用

    通過JVM參數-XX:+UseSerialGC可以使用串行垃圾回收器。

    ?

    ParNew收集器(停止-復制算法)

    ParNew收集器其實就是Serial收集器的多線程版本。新生代并行,老年代串行新生代復制算法、老年代標記-壓縮

    參數控制:-XX:+UseParNewGC? ParNew收集器

    -XX:ParallelGCThreads 限制線程數量

    默認串行(JDK1.0開始就有了 JDK1.5之后有了并行)

    新生代并行,老年代串行目的:回收頻率決定的啊啊哈

    ?

    parallel 收集器 (停止-復制算法)

    Parallel Scavenge收集器類似ParNew收集器Parallel收集器更關注系統的吞吐量(并行的)。可以通過參數來打開自適應調節策略,虛擬機會根據當前系統的運行情況收集性能監控信息,動態調整這些參數以提供最合適的停頓時間或最大的吞吐量;也可以通過參數控制GC的時間不大于多少毫秒或者比例;新生代復制算法、老年代標記-壓縮

    ?

    采用多線程來通過掃描并壓縮堆
    特點:停頓時間短,回收效率高,對吞吐量要求高。
    適用場景:大型應用,科學計算,大規模數據采集等。
    通過JVM參數-XX:+UseParallelGC 打開并發標記掃描垃圾回收器。

    ?

    CMS收集器(標記-清理算法)

    CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間為目標的收集器。目前很大一部分的Java應用都集中在互聯網站或B/S系統的服務端上,這類應用尤其重視服務的響應速度,希望系統停頓時間最短,以給用戶帶來較好的體驗。

    從名字(包含“Mark Sweep”)上就可以看出CMS收集器是基于“標記-清除”算法實現的,它的運作過程相對于前面幾種收集器來說要更復雜一些,整個過程分為4個步驟,包括:

    初始標記(CMS initial mark)

    并發標記(CMS concurrent mark)

    重新標記(CMS remark)

    并發清除(CMS concurrent sweep)

    其中初始標記、重新標記這兩個步驟仍然需要“Stop The World”。初始標記僅僅只是標記一下GC Roots能直接關聯到的對象,速度很快,并發標記階段就是進行GC Roots Tracing的過程,而重新標記階段則是為了修正并發標記期間,因用戶程序繼續運作而導致標記產生變動的那一部分對象的標記記錄,這個階段的停頓時間一般會比初始標記階段稍長一些,但遠比并發標記的時間短。

    ?? 由于整個過程中耗時最長的并發標記和并發清除過程中,收集器線程都可以與用戶線程一起工作,所以總體上來說,CMS收集器的內存回收過程是與用戶線程一起并發地執行。老年代收集器(新生代使用ParNew)

    ?優點:

    ? ? ? ? 并發收集、低停頓、響應時間快

    ?缺點:

    ? ? ? 1、對CPU資源非常敏感
    ? ? ? 2、CMS收集器無法處理浮動垃圾,即清除時用戶進程同時產生的垃圾,只能等到下次GC時回收,并發階段會降低吞吐量
    ? ? ? 3、因為是使用“標記-清除”算法,所以會產生大量碎片

    ?

    特點:響應時間優先,減少垃圾收集停頓時間,適用于對響應時間要求高的系統

    適應場景:大型服務器等。

    通過JVM參數 -XX:+UseConcMarkSweepGC設置

    g1收集器

    在G1中,堆被劃分成 許多個連續的區域(region)。采用G1算法進行回收,吸收了CMS收集器特點。

    特點:支持很大的堆,高吞吐量

    ? --支持多CPU和垃圾回收線程

    ? --在主線程暫停的情況下,使用并行收集

    ? --在主線程運行的情況下,使用并發收集

    實時目標:可配置在N毫秒內最多只占用M毫秒的時間進行垃圾回收

    通過JVM參數 -XX:+UseG1GC 使用G1垃圾回收器

    注意: 并發是指一個處理器同時處理多個任務。?
    并行是指多個處理器或者是多核的處理器同時處理多個不同的任務。?
    并發是邏輯上的同時發生(simultaneous),而并行是物理上的同時發生。?
    來個比喻:并發是一個人同時吃三個饅頭,而并行是三個人同時吃三個饅頭。?

    ?

    參考:https://www.cnblogs.com/aspirant/p/8662690.html

    轉載于:https://www.cnblogs.com/toov5/p/9874361.html

    總結

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

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