欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JVM常見垃圾收集器學(xué)習(xí)指南

 更新時(shí)間:2022年06月23日 17:35:42   作者:Carson.Ho  
這篇文章主要為大家介紹了JVM常見垃圾收集器學(xué)習(xí)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

垃圾收集器 是 垃圾收集算法 的具體實(shí)現(xiàn)

本文將對市面上常見的垃圾收集器類型進(jìn)行講解,希望你們會喜歡

垃圾收集器類型

垃圾收集器 是 垃圾收集算法 的具體實(shí)現(xiàn)

現(xiàn)在主流的垃圾收集器有 7 種:

我們會根據(jù)需求場景的不同,選擇不同特點(diǎn)的垃圾收集器

下面我會詳細(xì)介紹。

1. Serial收集器

1.1 定義

最基本、發(fā)展歷史最長的垃圾收集器

1.2 優(yōu)點(diǎn)

  • 并發(fā)收集 在進(jìn)行垃圾收集時(shí),必須暫停其他所有工作線程(Stop The World),直到收集結(jié)束。

暫停工作線程 是在用戶不可見的情況下進(jìn)行

注:并發(fā) 與 并行的區(qū)別 a. 并發(fā):在 某一時(shí)段內(nèi),交替執(zhí)行多個(gè)任務(wù)(即先處理A再處理B,循環(huán)該過程) b. 并行:在 某一時(shí)刻內(nèi),同時(shí)執(zhí)行多個(gè)任務(wù)(即同時(shí)處理A、B)

  • 單線程 只使用 一條線程 完成垃圾收集(GC線程)
  • 效率高 對于限定單CPU環(huán)境來說,Serial收集器沒有線程交互開銷(專一做垃圾收集),擁有更高的單線程收集效率。

垃圾收集高效,即其他工作線程停頓時(shí)間短(可控制在100ms內(nèi)),只要垃圾收集發(fā)生的頻率不高,完全可以接受。

1.3 使用的垃圾收集算法

復(fù)制 算法

1.4 應(yīng)用場景

客戶端模式下,虛擬機(jī)的 新生代區(qū)域

1.5 工作流程

2. Serial Old收集器

2.1 定義

Serial收集器 應(yīng)用在老年代區(qū)域 的版本

2.2 優(yōu)點(diǎn)

并發(fā)、單線程、效率高

Serial收集器,此處不作過多描述

2.3 使用的垃圾收集算法

標(biāo)記-整理 算法

2.4 應(yīng)用場景

  • 在客戶端模式下,虛擬機(jī)的老年代區(qū)域
  • 在服務(wù)器模式下:

    Parallel Scavenge 收集器搭配使用

    作為CMS收集器的后備預(yù)案,在并發(fā)收集發(fā)生Concurrent Mode Failure時(shí)使用

2.5 工作流程

3. ParNew 收集器

3.1 定義

Serial收集器 的 多線程 版本。

3.2 優(yōu)點(diǎn)

  • 并發(fā)收集 在進(jìn)行垃圾收集時(shí),必須暫停其他所有工作線程(Stop The World),直到收集結(jié)束。

暫停工作線程 是在用戶不可見的情況下進(jìn)行

  • 多線程收集 使用 多條垃圾收集線程(GC線程) 完成垃圾收集

由于存在線程交互的開銷,所以在單CPU環(huán)境下,性能差于 Serial收集器

  • CMS收集器配合工作 目前,只有ParNew 收集器能與 CMS收集器 配合工作
  • 由于CMS收集器使用廣泛,所以該特點(diǎn)非常重要。
  • 關(guān)于CMS收集器 下面會詳細(xì)說明

3.3 使用的垃圾收集算法

復(fù)制 算法

3.4 應(yīng)用場景

服務(wù)器模式下,虛擬機(jī)的 新生代區(qū)域

多線程收集

3.5 工作流程

4. Parallel Scavenge收集器

4.1 定義

ParNew 收集器的升級版

4.2 特點(diǎn)

  • 具備ParNew 收集器并發(fā)、多線程收集的特點(diǎn)
  • 以達(dá)到 可控制吞吐量 為目標(biāo) 其他收集器的目標(biāo)是: 盡可能縮短 垃圾收集時(shí)間,而Parallel Scavenge收集器的目標(biāo)則是:達(dá)到 可控制吞吐量
  • 吞吐量:CPU用于運(yùn)行用戶代碼的時(shí)間 與 CPU總消耗時(shí)間(運(yùn)行用戶代碼時(shí)間+垃圾收集時(shí)間)的比值
  • 如:虛擬機(jī)總共運(yùn)行100分鐘,其中垃圾收集時(shí)間=1分鐘、運(yùn)行用戶代碼時(shí)間 = 99分鐘,那吞吐量 = 99 / 100 = 99%
  • 自適應(yīng) 該垃圾收集器能根據(jù)當(dāng)前系統(tǒng)運(yùn)行情況,動態(tài)調(diào)整自身參數(shù),從而達(dá)到最大吞吐量的目標(biāo)。

該特性稱為:GC 自適應(yīng)的調(diào)節(jié)策略

這是Parallel Scavenge收集器與 ParNew 收集器 最大的區(qū)別

4.3 使用的垃圾收集算法

復(fù)制 算法

4.4 應(yīng)用場景

服務(wù)器模式下,虛擬機(jī)的 新生代區(qū)域

4.5 工作流程

5. Parallel Old收集器

5.1 定義

Parallel Scavenge收集器 應(yīng)用在老年代區(qū)域 的版本

5.2 特點(diǎn)

以達(dá)到 可控制吞吐量 為目標(biāo)、自適應(yīng)調(diào)節(jié)、多線程收集

Parallel Scavenge收集器

5.3 使用的垃圾收集算法

標(biāo)記-整理 算法

5.4 應(yīng)用場景

服務(wù)器模式下,虛擬機(jī)的 老年代區(qū)域

5.5 工作流程

6. CMS收集器

6.1 定義

Concurrent Mark Sweep,基于 標(biāo)記-清除算法的收集器

6.2 特點(diǎn)

6.2.1 優(yōu)點(diǎn)

并行 用戶線程 & 垃圾收集線程同時(shí)進(jìn)行。

即在進(jìn)行垃圾收集時(shí),用戶還能工作。

  • 單線程收集 只使用 一條線程 完成垃圾收集(GC線程)
  • 垃圾收集停頓時(shí)間短 該收集器的目標(biāo)是: 獲取最短回收停頓時(shí)間 ,即希望 系統(tǒng)停頓的時(shí)間 最短,提高響應(yīng)速度

6.2.2 缺點(diǎn)

  • 總吞吐量會降低 因?yàn)樵撌占鲗?code>CPU資源非常敏感,在并發(fā)階段,雖不會導(dǎo)致用戶線程停頓,但會因?yàn)檎加貌糠志€程(CPU資源)而導(dǎo)致應(yīng)用程序變慢,總吞吐量會降低
  • 無法處理浮動垃圾 由于 并發(fā)清理時(shí) 用戶線程還在運(yùn)行,所以會有新的垃圾不斷產(chǎn)生(即浮動垃圾),只能等到留待下一次GC時(shí)再清理掉。

因?yàn)檫@一部分垃圾出現(xiàn)在標(biāo)記過程之后,所以CMS無法在當(dāng)次GC中處理掉它們

因此,CMS無法等到老年代被填滿再進(jìn)行Full GC,CMS需要預(yù)留一部分空間。即所謂的:可能出現(xiàn)Concurrent Mode Failure失敗而導(dǎo)致另一次Full GC產(chǎn)生。

垃圾收集后會產(chǎn)生大量內(nèi)存空間碎片 因?yàn)?CMS收集器是基于“標(biāo)記-清除”算法的。

6.3 使用的垃圾收集算法

標(biāo)記-清除 算法

6.4 應(yīng)用場景

重視應(yīng)用的響應(yīng)速度、希望系統(tǒng)停頓時(shí)間最短的場景

如互聯(lián)網(wǎng)移動端應(yīng)用

6.5 工作流程

CMS 收集器 是基于 標(biāo)記-清除算法實(shí)現(xiàn)的收集器,工作流程較為復(fù)雜:(分為四個(gè)步驟)

初始標(biāo)記

  • 并發(fā)標(biāo)記
  • 重新標(biāo)記
  • 并發(fā)清除

下面用一張圖詳細(xì)說明工作流程:

  • 由于整個(gè)過程中,耗時(shí)最長的并發(fā)標(biāo)記 和 并發(fā)清除過程都可與用戶線程一起進(jìn)行
  • 所以,CMS收集器的垃圾收集過程可看作是與用戶線程 并發(fā)執(zhí)行的。

7. G1 收集器

7.1 定義

最新、技術(shù)最前沿的垃圾收集器

7.2 特點(diǎn)

并行 用戶線程 & 垃圾收集線程同時(shí)進(jìn)行。

即在進(jìn)行垃圾收集時(shí),用戶還能工作

多線程 即使用 多條垃圾收集線程(GC線程) 進(jìn)行垃圾收集

并發(fā) & 并行 充分利用多CPU、多核環(huán)境下的硬件優(yōu)勢 來縮短 垃圾收集的停頓時(shí)間

垃圾回收效率高 G1 收集器是 針對性 對 Java堆內(nèi)存區(qū)域進(jìn)行垃圾收集,而非每次都對整個(gè) Java 堆內(nèi)存區(qū)域進(jìn)行垃圾收集。

G1收集器除了將 Java 堆內(nèi)存區(qū)域分為新生代 & 老年代之外,還會細(xì)分為許多個(gè)大小相等的獨(dú)立區(qū)域( Region),然后G1收集器會跟蹤每個(gè) Region里的垃圾價(jià)值大小,并在后臺維護(hù)一個(gè)列表;每次回收時(shí),會根據(jù)允許的垃圾收集時(shí)間 優(yōu)先回收價(jià)值最大的Region,從而避免了對整個(gè)Java堆內(nèi)存區(qū)域進(jìn)行垃圾收集,從而提高效率。

因?yàn)樯鲜鰴C(jī)制,G1收集器還能建立可預(yù)測的停頓時(shí)間模型:即讓 使用者 明確指定一個(gè)長度為M毫秒的時(shí)間片段內(nèi),消耗在垃圾收集上的時(shí)間不得從超出N毫秒。即具備實(shí)時(shí)性

分代收集 同時(shí)應(yīng)用在 內(nèi)存區(qū)域的新生代 & 老年代

不會產(chǎn)生內(nèi)存空間碎片

從整體上看,G1 收集器是基于 標(biāo)記-整理算法實(shí)現(xiàn)的收集器

從局部上看,是基于 復(fù)制算法 實(shí)現(xiàn) 上述兩種算法意味著 G1 收集器不會產(chǎn)生內(nèi)存空間碎片。

7.3 使用的垃圾收集算法

對于新生代:復(fù)制算法

對于老年代:標(biāo)記 - 整理算法

7.4 應(yīng)用場景

服務(wù)器端虛擬機(jī)的內(nèi)存區(qū)域(包括 新生代 & 老年代)

7.5 工作流程

G1 收集器的工作流程分為4個(gè)步驟:

初始標(biāo)記

  • 并發(fā)標(biāo)記
  • 最終標(biāo)記
  • 篩選回收

下面用一張圖詳細(xì)說明工作流程

8. 總結(jié)

本文對垃圾收集器的類型進(jìn)行全面講解

以上就是JVM常見垃圾收集器學(xué)習(xí)指南的詳細(xì)內(nèi)容,更多關(guān)于JVM垃圾收集器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • IDEA中編寫并運(yùn)行shell腳本的實(shí)現(xiàn)

    IDEA中編寫并運(yùn)行shell腳本的實(shí)現(xiàn)

    這篇文章主要介紹了IDEA中編寫并運(yùn)行shell腳本的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(46)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(46)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • java 中Comparable與Comparator詳解與比較

    java 中Comparable與Comparator詳解與比較

    這篇文章主要介紹了java 中Comparable與Comparator詳解與比較的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java服務(wù)器主機(jī)信息監(jiān)控工具類的示例代碼

    Java服務(wù)器主機(jī)信息監(jiān)控工具類的示例代碼

    這篇文章主要介紹了Java服務(wù)器主機(jī)信息監(jiān)控工具類的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 快速入手IntelliJ IDEA基本配置

    快速入手IntelliJ IDEA基本配置

    IntelliJ IDEA是java編程語言開發(fā)的集成環(huán)境,本篇主要介紹了對它的安裝、配置maven倉庫、調(diào)試方法、常用的插件推薦、快捷鍵大全與常用快捷鍵說明,感興趣的朋友一起看看吧
    2021-10-10
  • Java多線程之CAS機(jī)制詳解

    Java多線程之CAS機(jī)制詳解

    這篇文章主要介紹了Java多線程之CAS機(jī)制詳解,CAS指的是Compare-And-Swap(比較與交換),它是一種多線程同步的技術(shù),常用于實(shí)現(xiàn)無鎖算法,從而提高多線程程序的性能和擴(kuò)展性,需要的朋友可以參考下
    2023-07-07
  • Springboot上傳文件時(shí)提示405問題及排坑過程

    Springboot上傳文件時(shí)提示405問題及排坑過程

    這篇文章主要介紹了Springboot上傳文件時(shí)提示405問題及排坑過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 完美解決springboot中使用mybatis字段不能進(jìn)行自動映射的問題

    完美解決springboot中使用mybatis字段不能進(jìn)行自動映射的問題

    今天在springboot中使用mybatis的時(shí)候不能字段不能夠進(jìn)行自動映射,接下來給大家給帶來了完美解決springboot中使用mybatis字段不能進(jìn)行自動映射的問題,需要的朋友可以參考下
    2023-05-05
  • 基于@RequestMapping 用法詳解之地址映射

    基于@RequestMapping 用法詳解之地址映射

    這篇文章主要介紹了@RequestMapping 用法詳解之地址映射,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot整合Shiro思路(最新超詳細(xì))

    SpringBoot整合Shiro思路(最新超詳細(xì))

    這篇文章主要介紹了SpringBoot整合Shiro思路(最新超詳細(xì)),本文內(nèi)容比較長,通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評論