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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势、及使用场景

發布時間:2024/7/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势、及使用场景 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

直通BAT之JVM系列

直通BAT必考題系列:JVM的4種垃圾回收算法、垃圾回收機制與總結

直通BAT必考題系列:深入詳解JVM內存模型與JVM參數詳細配置


今天繼續JVM的垃圾回收器詳解,如果說垃圾收集算法是JVM內存回收的方法論,那么垃圾收集器就是內存回收的具體實現。


常見的垃圾收集器有3類:

1.新生代的收集器包括

  • Serial
  • PraNew
  • Parallel Scavenge
  • 2.老年代的收集器包括:

  • Serial Old
  • Parallel Old
  • CMS
  • 3.回收整個Java堆(新生代和老年代)

  • G1收集器
  • 今天我們詳細談談以上7種垃圾收集器的優劣勢和使用場景。

    新生代垃圾收集器

    1.Serial串行收集器-復制算法

    Serial收集器是新生代單線程收集器,優點是簡單高效,算是最基本、發展歷史最悠久的收集器。它在進行垃圾收集時,必須暫停其他所有的工作線程,直到它收集完成。

    Serial收集器依然是虛擬機運行在Client模式下默認新生代收集器,對于運行在Client模式下的虛擬機來說是一個很好的選擇。

    2.ParNew收集器-復制算法

    ParNew收集器是新生代并行收集器,其實就是Serial收集器的多線程版本。

    除了使用多線程進行垃圾收集之外,其余行為包括Serial收集器可用的所有控制參數、收集算法、Stop The Worl、對象分配規則、回收策略等都與Serial 收集器完全一樣。

    3.Parallel Scavenge(并行回收)收集器-復制算法

    Parallel Scavenge收集器是新生代并行收集器,追求高吞吐量,高效利用 CPU。

    該收集器的目標是達到一個可控制的吞吐量(Throughput)。所謂吞吐量就是CPU用于運行用戶代碼的時間與CPU總消耗時間的比值,即 吞吐量=運行用戶代碼時間/(運行用戶代碼時間+垃圾收集時間)

    停頓時間越短就越適合需要與用戶交互的程序,良好的響應速度能提升用戶體驗,而高吞吐量則可用高效率地利用CPU時間,盡快完成程序的運算任務,主要適合在后臺運算而不需要太多交互的任務。

    老年代垃圾收集器

    1.Serial Old 收集器-標記整理算法

    Serial Old是Serial收集器的老年代版本,它同樣是一個單線程(串行)收集器,使用標記整理算法。這個收集器的主要意義也是在于給Client模式下的虛擬機使用

    如果在Server模式下,主要兩大用途:

    (1)在JDK1.5以及之前的版本中與Parallel Scavenge收集器搭配使用

    (2)作為CMS收集器的后備預案,在并發收集發生Concurrent Mode Failure時使用

    2.Parallel Old 收集器-標記整理算法

    Parallel Old 是Parallel Scavenge收集器的老年代版本,使用多線程和“標記-整理”算法。這個收集器在1.6中才開始提供。

    3.CMS收集器-標記整理算法

    CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間為目標的收集器。

    目前很大一部分的Java應用集中在互聯網站或者B/S系統的服務端上,這類應用尤其重視服務器的響應速度,希望系統停頓時間最短,以給用戶帶來較好的體驗。CMS收集器就非常符合這類應用的需求。

    CMS收集器是基于“標記-清除”算法實現的,它的運作過程相對前面幾種收集器來說更復雜一些,整個過程分為4個步驟:

    (1)初始標記

    (2)并發標記

    (3)重新標記

    (4)并發清除

    其中,初始標記、重新標記這兩個步驟仍然需要“Stop The World”

    CMS收集器主要優點

  • 并發收集
  • 低停頓
  • CMS三個明顯的缺點:

    (1)CMS收集器對CPU資源非常敏感。CPU個數少于4個時,CMS對于用戶程序的影響就可能變得很大,為了應付這種情況,虛擬機提供了一種稱為“增量式并發收集器”的CMS收集器變種。

    (2)CMS收集器無法處理浮動垃圾,可能出現“Concurrent Mode Failure”失敗而導致另一次Full GC的產生。在JDK1.5的默認設置下,CMS收集器當老年代使用了68%的空間后就會被激活。

    (3)CMS是基于“標記-清除”算法實現的收集器,手機結束時會有大量空間碎片產生。空間碎片過多,可能會出現老年代還有很大空間剩余,但是無法找到足夠大的連續空間來分配當前對象,不得不提前出發FullGC。

    新生代和老年代垃圾收集器

    1.G1收集器-標記整理算法

    JDK1.7后全新的回收器, 用于取代CMS收集器。

    G1收集器的優勢:

  • 獨特的分代垃圾回收器,分代GC: 分代收集器, 同時兼顧年輕代和老年代
  • 使用分區算法, 不要求eden, 年輕代或老年代的空間都連續
  • 并行性: 回收期間, 可由多個線程同時工作, 有效利用多核cpu資源
  • 空間整理: 回收過程中, 會進行適當對象移動, 減少空間碎片
  • 可預見性: G1可選取部分區域進行回收, 可以縮小回收范圍, 減少全局停頓
  • G1收集器的運作大致可劃分為一下步驟:

    G1收集器的階段分以下幾個步驟:

    1、初始標記(它標記了從GC Root開始直接可達的對象

    2、并發標記(從GC Roots開始對堆中對象進行可達性分析,找出存活對象)

    3、最終標記(標記那些在并發標記階段發生變化的對象,將被回收)

    4、篩選回收(首先對各個Regin的回收價值和成本進行排序,根據用戶所期待的GC停頓時間指定回收計劃,回收一部分Region)

    JVM垃圾收集器總結

    本文主要介紹了JVM中的垃圾回收器,主要包括串行回收器、并行回收器以及CMS回收器、G1回收器。他們各自都有優缺點,通常來說你需要根據你的業務,進行基于垃圾回收器的性能測試,然后再做選擇。下面給出配置回收器時,經常使用的參數:

    -XX:+UseSerialGC:在新生代和老年代使用串行收集器

    -XX:+UseParNewGC:在新生代使用并行收集器

    -XX:+UseParallelGC :新生代使用并行回收收集器,更加關注吞吐量

    -XX:+UseParallelOldGC:老年代使用并行回收收集器

    -XX:ParallelGCThreads:設置用于垃圾回收的線程數

    -XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器

    -XX:ParallelCMSThreads:設定CMS的線程數量

    -XX:+UseG1GC:啟用G1垃圾回收器

    你可能也喜歡:

  • 直通BAT必考題系列:深入剖析JVM之G1收集器、及回收流程、與推薦用例
  • 直通BAT必考題系列:深入詳解JVM內存模型與JVM參數詳細配置
  • 直通BAT必考題系列:JVM的4種垃圾回收算法、垃圾回收機制與總結
  • 直通BAT必考題系列:JVM性能調優的6大步驟,及關鍵調優參數詳解
  • Java多線程系列(七):并發容器的原理,7大并發容器詳解、及使用場景
  • 直通BAT JVM必考題:Minor GC、Major GC、Full GC的區別

  • 總結

    以上是生活随笔為你收集整理的直通BAT必考题系列:7种JVM垃圾收集器特点,优劣势、及使用场景的全部內容,希望文章能夠幫你解決所遇到的問題。

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