国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

九款常見的 JVM 垃圾回收器

開發
垃圾回收器作為 JVM中核心的一環,了解它的原理,可以幫助我們更好地調優和故障排除,因此,今天我們就來聊聊 JVM中 9款常見的垃圾回收器。

JVM 不僅是大廠面試的一個高頻問題,也是 Java程序員跨入高職級必須掌握的知識點,垃圾回收器作為 JVM中核心的一環,了解它的原理,可以幫助我們更好地調優和故障排除,因此,今天我們就來聊聊 JVM中 9款常見的垃圾回收器。

背景 

因為 Java虛擬機的類型比較多,如果沒有特殊說明,本文特指 HotSpot虛擬機,在分享回收器之前,我們首先對 HotSpot 虛擬機背景做個簡單的介紹。

HotSpot VM,最初是由 “Longview Technologies” 這家小公司設計,并且一開始也不是為 Java語言研發。

1997年,Sun公司收購了這家公司,從而也就得到了 HotSpot虛擬機,在 Sun公司的一番優化下,HotSpot 虛擬機就成了 Sun/OracleJDK 和 OpenJDK共同的默認虛擬機。

2010年,Oracle 收購 Sun公司,HotSpot 虛擬機也就順理成章成為了 Oracle旗下產品。

Sun/OracleJDK 和 OpenJDK 都是 Oracle 旗下產品,Sun/OracleJDK 是商用版,OpenJDK 是免費版,兩款虛擬機的內核是一樣,只是功能略有差異。

關于使用的是 Sun/OracleJDK 還是 OpenJDK ,可以通過 java -version 指令查看。

Sun/OracleJDK:

OpenJDK:

1.Serial 

Serial 收集器,見名知意,它是一個單線程的收集器,而且在進行垃圾回收時還必須暫停其它的工作線程,直到它收集結束(Stop The World)。

在 JDK 1.3.1 之前,它是 HotSpot虛擬機年輕代收集器的唯一選擇。

Serial(年輕代) 和 Serial Old(老年代) 組合模式下,收集器大致的工作流程如下圖:

盡管 Serial 收集器是單線程回收,并且會暫停其它的工作線程,看起來性能很差,但是,它依然是 HotSpot 虛擬機運行在客戶端模式下的默認新生代收集器,因為相對于其它收集器的單線程,Serial 收集器消耗的內存最低,加上沒有多線程交互的開銷,反而使得它簡單高效。

在啟動 Java進程時,可以通過設置 -XX:+UseSerialGC  -XX:+UseSerialOldGC 參數,使用上述回收器組合。

2.ParNew

ParNew 收集器是 Serial 收集器的多線程并行版本,除了使用多線程進行垃圾回收之外,其它的行為和 Serial 收集器都是相同的。主要應用在 HotSpot虛擬機運行在服務端模式下的場景。

ParNew(年輕代) 和 Serial Old(老年代) 組合模式下,收集器大致的工作流程如下圖:

在啟動 Java進程時,可以通過設置 -XX:+UseParNewGC  -XX:+UseSerialOldGC 參數,使用上述回收器組合。

3.Parallel Scavenge 

Parallel Scavenge 收集器也是一款用于年輕代的回收器,它和 ParNew 收集器一樣,采用多線程并發回收,但是,Parallel Scavenge可以通過 -XX:MaxGCPauseMillis 參數設置 GC的最大停頓時間,這樣就可以達到一個吞吐量(Throughput)可控的目標,從而優于 ParNew回收器。

Parallel Scavenge(年輕代) 和 Serial Old(老年代) 組合模式下,收集器大致的工作流程如下圖:

在啟動 Java進程時,可以通過設置 -XX:+UseParallelGC  -XX:+UseSerailOldGC 參數,使用上述回收器組合。

但是,這種組合看起來很尷尬,年輕代使用的多線程并發收集,而老年代卻使用單線程進行回收,怎么看起來老年代的回收都是“拖累”,因此,用于老年代的Parallel Old 并發收集器就誕生了。

Parallel Scavenge(年輕代) 和 Parallel Old(老年代) 組合模式下,收集器大致的工作流程如下圖:

圖片

在啟動 Java進程時,可以通過設置 -XX:+UseParallelGC  -XX:+UseParallelOldGC 參數,使用上述回收器組合。

4.Serial Old 

Serial Old 收集器是 Serial 的老年代版本,它也是一個單線程收集器,使用‘標記-整理’算法,和 Serial 收集器一樣也是用于 HotSpot客戶端模式。

Serial(年輕代) 和 Serial Old(老年代) 組合模式下,收集器大致的工作流程如下圖:

在啟動 Java進程時,可以通過設置 -XX:+UseSerialGC  -XX:+UseSerialOldGC 參數,使用上述回收器組合。

5.Parallel Old

Parallel Old 收集器是從 JDK 6 開始提供支持的,它是 Parallel Scavenge 收集器的老年代版本,支持多線程并發收集,采用‘標記-整理’算法。Parallel Old 收集器的出現,真正意義上實現了“吞吐量優先”的目標。

Parallel Scavenge(年輕代) 和 Parallel Old(老年代) 組合模式下,收集器大致的工作流程如下圖:

在啟動 Java進程時,可以通過設置 -XX:+UseParallelGC  -XX:+UseParallelOldGC 參數,使用上述回收器組合。

6.CMS

CMS 收集器,從 JDK5發布之后正式誕生,可以毫不夸張地說:CMS是一個跨時代的收集器,曾幾何時,它是各互聯網大廠面試中垃圾回收器的必問知識點。

CMS 是 Comcurrent Mark Sweep 的簡稱,用于老年代的垃圾回收。CMS的收集過程包含 5個步驟:

  • Initial Mark(初始標記) Stop The World
  • Concurrent Marking(并發標記)
  • Remark(重復標記) Stop The World
  • Concurrent Sweep(并發清除)
  • Resetting(重置)

CMS 收集器大致的工作流程如下圖:

盡管 CMS回收器實現了回收線程與應用線程能同時并發工作的目標,但它也有致命的問題:無法處理“浮動垃圾”,有可能出現 Concurrent Mode Failure 失敗,導致Full GC。因此,Oracle官方目前已經將 CMS 申明為 “deprecated”,不推薦使用。這也宣告了 CMS收集器的歷史使命已結束。 

在啟動 Java進程時,可以通過設置-XX:+UseConcMarkSweepGC 參數,顯示使用 CMS回收器。

7.G1 

G1 回收器是 Garbage First 的簡稱, 它是一款面向服務器的垃圾回收器,用于大內存的多處理器計算機,目標是實現低延時垃圾回收。

從 Oracle JDK 7 Update 4 及更高版本已完全支持 G1,并且  JDK9 開始,G1 已經成為了默認的垃圾收集器。

應該說,G1是垃圾回收器歷史上的一個里程碑,開啟了基于 Region回收的時代,和以往的垃圾回收器不一樣,G1盡管依然保留了年輕代和老年代的概念,但是各代存儲地址是不連續的,每一代包含了 n個大小相同且不連續的 Region,G1 的堆內存分配如下圖:

G1提供了兩種 GC模式:Young GC和 Mixed GC。

G1的收集過程包含 4個步驟:

(1) Initial Marking(初始標記):標記了從 GC Root開始直接可達的對象

(2) Concurrent Marking(并發標記):在整個堆上查找活動對象,標記全部可達對象。這個階段可能會被年輕代垃圾回收中斷。

(3) Remark(重新標記):完成對堆中活動對象的標記。使用一種稱為“快照在開始時”(Snapshot-at-the-Beginning,SATB)的算法,其速度比 CMS收集器中使用的算法要快得多。

(4) Cleanup(清除垃圾):該過程完成 3個事情

  • 對活動對象和完全釋放的區域進行記賬。(Stop The World) 
  • 清理已記住的集合。(Stop The World) 
  • 重置空的區域并將其返回到空閑列表。(并發執行)

G1 收集器大致的工作流程如下圖:

在啟動 Java進程時,可以通過設置 -XX:+UseG1GC 參數,顯示使用 G1回收器。

8.Shenandoah

Shenandoah 也是一款 HotSpot 虛擬機回收器,首次出現在Open JDK12中,最初是由 RedHat公司開發,2014年貢獻給 OpenJDK,或許因為它不是 Oracle公司自己開發的,所以,Shenandoah 目前只存在 OpenJDK 而不存在 OracleJDK商業版中。Shenandoah主要使用連接矩陣和轉發指針的技術,連接矩陣替代 G1中的卡表。

Shenandoah工作流程分為 9個步驟:

  • Initial Marking(初始標記):和G1 一樣,標記了從 GC Root開始直接可達的對象,Stop The World
  • Concurrent Marking(并發標記):和G1 一樣,在整個堆上查找活動對象,標記全部可達對象。
  • Final Marking(最終標記):和G1 一樣,
  • Concurrent Cleanup(并發清理):清理無存活對象的 Region
  • Concurrent Evacuation(并發回收):把存活的對象復制到空的 Region中,
  • Inital Update Reference(初始引用更新):修正并發回收階段被復制對象的引用地址
  • Concurrent Update Reference(并發引用更新):引用更新操作
  • Final Update Reference(最終引用更新):修正存在于 GCRoots中的引用
  • Concurrent Cleanup(并發清理):回收空的 Region
2. Concurrent Marking(并發標記):和G1 一樣,在整個堆上查找活動對象,標記全部可達對象。

Shenandoah 收集器大致的工作流程如下圖(圖片來自 OpenJDK官方):

在啟動 Java進程時,可以通過設置XX:+UseShenandoahGC參數,顯示使用 Shenandoah回收器。

注意,如果使用的是Sun/OracleJDK,將無法使用該回收器。

9.ZGC 

ZGC 是 Oracle官方研發并從 JDK11中引入,它是一款采用染色指針和讀屏障技術的回收器,ZGC 和 G1一樣,堆空間被劃分成多個 Region,不同的是,ZGC的 Region 被官方稱為Page,它可以動態創建和銷毀,容量也可以動態調整。

ZGC的 Region分為三種:

  • 小型 Region:容量固定為 2MB,用于存放 < 256KB的對象;
  • 中型 Region:容量固定為 32MB,用于存放 >= 256KB且 < 4MB的對象;
  • 大型 Region:容量為 2^n MB,存放 >= 4MB 的對象,而且每個大型Region 中只存放一個大對象。由于大對象移動代價過大,所以該對象不會被重分配。

ZGC 工作流程分為 4個步驟:

  • Concurrent Mark(并發標記):和G1 一樣,標記了從 GC Root開始直接可達的對象
  • Concurrent Prepare for Relocate(并發預備重分配)
  • Concurrent for Relocate(并發重分配)
  • Concurrent Remap(并發重映射)

ZGC 收集器大致的工作流程如下圖:

ZGC垃圾回收過程幾乎全部是并發,實際 Stop The World(STW)停頓時間極短,不到10ms。這得益于其采用的著色指針和讀屏障技術。

在啟動 Java進程時,可以通過設置XX:+UseZGC參數,顯示使用 ZGC回收器。

到此,9款垃圾收集器就介紹完畢,如果你對垃圾回收器很感興趣,推薦閱讀周志明博士的《深入理解Java虛擬機》第三版,書中除了垃圾回收器, JVM其它相關的內容也都有詳細地介紹,應該是國內很多 Java程序員學習 JVM的必備書籍。

因為篇幅有限,本文只是簡單地分析了 HotSpot虛擬機常見的 9款垃圾回收器,并沒有做原理上的分析,我會在接下來的文章中分別對 CMS,G1,ZGC,Shenandoah 4款垃圾收集器做詳細的講解,鏈接:JVM專欄 。最后用一張圖表對 9款回收器做一個對比:


責任編輯:趙寧寧 來源: 猿java
相關推薦

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2022-01-20 10:34:49

JVM垃圾回收算法

2009-12-30 10:14:29

JVM垃圾回收

2022-06-22 09:54:45

JVM垃圾回收Java

2023-08-08 10:29:55

JVM優化垃圾回收

2021-10-05 20:29:55

JVM垃圾回收器

2021-11-05 15:23:20

JVM回收算法

2009-12-25 16:15:31

JVM垃圾回收算法

2010-09-25 15:33:19

JVM垃圾回收

2021-03-11 07:26:52

垃圾回收器單線程

2025-05-16 08:00:00

2021-02-04 10:43:52

開發技能代碼

2010-09-26 16:42:04

JVM內存組成JVM垃圾回收

2010-09-27 09:01:26

JVM分代垃圾回收

2017-04-25 14:39:55

JVM內存Java

2010-09-25 15:26:12

JVM垃圾回收

2010-09-16 15:10:24

JVM垃圾回收機制

2022-06-07 07:10:40

MinorGCMajorGCFullGC

2010-01-06 09:28:08

JVM分代垃圾回收
點贊
收藏

51CTO技術棧公眾號

欧美图片激情小说| 日本一本在线免费福利| 国产午夜一区二区三区| 久在线观看视频| 国产精品久久久久久久久图文区| 在线免费激情视频| 日韩精品一区二区在线| 国产精品亚洲成在人线| 欧洲成人在线视频| 欧美日韩日本国产亚洲在线| 日韩一区二区三区资源| 99re亚洲国产精品| 在线天堂av| 亚洲国产精品一区二区久| 成人福利一区| 国产专区一区二区| 成人免费电影视频| 天堂av免费观看| 日韩欧美精品在线视频| 亚洲高清999| 国精产品一区二区| 久久亚洲一区二区三区四区| 你懂的视频在线播放| 亚洲人成网站在线播| 欧美日韩伦理在线免费| 在线成人性视频| 玉米视频成人免费看| 国产蜜臀一区二区打屁股调教| 2021国产精品视频| 韩国三级中文字幕hd久久精品| 宅男深夜国产| 亚洲午夜未删减在线观看 | 国产精品v日韩精品v在线观看| 欧美色图片你懂的| 午夜视频一区二区在线观看| 久久久久久国产精品mv| 综合欧美亚洲日本| 人人鲁人人莫人人爱精品| 91精品中国老女人| 91欧美一区二区| 久久香蕉av| 亚洲va男人天堂| 国产精品久久久久7777按摩| 亚洲人成在线网站| 国产精品国产精品| 亚洲男同1069视频| 亚洲欧美在线人成swag| 亚洲精品二区| 欧美在线你懂得| 久久99免费视频| 欧美牲交a欧美牲交aⅴ免费真| 亚洲国内精品视频| 一本久道综合久久精品| 一级毛片在线播放| 8x拔播拔播x8国产精品| 91视频91自| 在线成人视屏| 亚洲一区二区三区免费看| 欧美午夜免费电影| 久久理论电影| ·天天天天操| 欧美激情视频网站| 成人中文字幕在线| 亚洲三级欧美| 99精品视频网站| 精品国产一区二区三区av性色 | 懂色av色香蕉一区二区蜜桃| 欧美一卡2卡3卡4卡无卡免费观看水多多| 婷婷中文字幕综合| 妖精一区二区三区精品视频| 国产精品无码av在线播放| 亚洲精品久久久久久久久| 久久精品在线| 国产网红女主播精品视频| 日韩av图片| 亚洲精品www| 国产在线看一区| 天堂中文av在线资源库| 亚洲毛片aa| 精品呦交小u女在线| 国产一区视频导航| 欧美精品总汇| 免费在线观看亚洲视频| 日韩中文理论片| 91影院在线免费观看| 欧洲精品久久久久毛片完整版| ijzzijzzij亚洲大全| 日韩电影在线观看永久视频免费网站| 久久狠狠亚洲综合| 深夜视频一区二区| 国产真人做爰毛片视频直播| 色偷偷偷综合中文字幕;dd| 99久久99久久精品国产片果冻| 欧美激情福利| 一道本视频在线观看| 国内精品久久久久影院优 | 精品女同一区二区三区在线播放| 在线亚洲a色| 日本电影免费看| 91久久中文字幕| 欧美美女网站色| 美女一区二区视频| 中韩乱幕日产无线码一区| 久草热视频在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 日韩一区在线免费观看| 欧美在线免费看视频| 国产区高清在线| 亚洲精品在线观看免费| 伊人伊成久久人综合网站| 久久久久99精品国产片| 九九久久成人| 97视频在线观看网站| 亚洲欧洲一二三| 久久精品国产欧美激情| 亚洲欧美日韩在线| 黄页网站一区| 欧美一区 二区 三区| 久久人妻精品白浆国产 | 欧美激情视频给我| 亚洲成av人片在www色猫咪| 亚洲调教视频在线观看| 咪咪网在线视频| 国产精品视频分类| 99在线影院| 国产一区二区三区在线看| 国产精品国产精品国产专区不蜜 | 好吊色欧美一区二区三区| 精品毛片乱码1区2区3区| 成人免费观看男女羞羞视频| 红杏aⅴ成人免费视频| 欧美女同网站| 青青草视频国产| 欧美一区二区三区精品电影| 欧美日韩亚洲不卡| 91网上在线视频| 国产精品传媒精东影业在线| 成人性生交大片免费看在线播放| 日韩av在线综合| 国产精品三区在线| 欧美精品一本久久男人的天堂| 欧美色视频日本高清在线观看| 国产一区二区三区在线观看免费 | 成人av影视在线| 在线成人一区二区| 婷婷中文字幕综合| 成人av网站在线观看| 国产精品毛片久久| 电影天堂国产精品| 奇米影视888狠狠狠777不卡| 400部精品国偷自产在线观看 | 久久国产精品高清一区二区三区| 亚洲在线欧美| 国模吧一区二区三区| 欧美最猛性xxxxx直播| 99久久伊人久久99| 欧美婷婷在线| 精品久久97| 在线观看涩涩| av资源网在线观看| 色成人亚洲网| 99久久久无码国产精品性色戒| 国产成人精品免费久久久久| 日韩理论片久久| 在线视频中文字幕一区二区| 国产调教视频一区| 奇米综合一区二区三区精品视频| av永久不卡| 视频欧美一区| 亚洲精品福利电影| av女优在线| 91短视频在线观看| 日韩 欧美 高清| 午夜在线视频免费观看| 97神马电影| 日韩美女免费视频| 色爱av美腿丝袜综合粉嫩av| 日韩久久久精品| 色一情一伦一子一伦一区| 欧美韩国日本不卡| 国产美女久久久久| 国产农村妇女毛片精品久久莱园子 | 91精品国产免费| 一区二区三区日韩| 99久久精品国产精品久久| 久久亚洲不卡| 欧美日本久久| 日本一区二区免费高清| 天堂久久av| 亚洲成人1区| 日韩免费va| 永久av在线| 青青草视频在线观看| 日韩男人天堂| 1区不卡电影| 污污网站免费看| 另类小说色综合| 亚洲精品一二三四五区| 人妻无码久久一区二区三区免费| 亚洲一区三区电影在线观看|