最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

垃圾收集器類型

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

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

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

下面我會(huì)詳細(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線程)
  • 效率高 對(duì)于限定單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收集器 下面會(huì)詳細(xì)說明

3.3 使用的垃圾收集算法

復(fù)制 算法

3.4 應(yīng)用場景

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

多線程收集

3.5 工作流程

4. Parallel Scavenge收集器

4.1 定義

ParNew 收集器的升級(jí)版

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)行情況,動(dòng)態(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)

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

垃圾收集后會(huì)產(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)移動(dò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 收集器是 針對(duì)性 對(duì) Java堆內(nèi)存區(qū)域進(jìn)行垃圾收集,而非每次都對(duì)整個(gè) Java 堆內(nèi)存區(qū)域進(jìn)行垃圾收集。

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

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

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

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

7.3 使用的垃圾收集算法

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

對(duì)于老年代:標(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é)

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

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

相關(guān)文章

  • JAVA 枚舉單例模式及源碼分析的實(shí)例詳解

    JAVA 枚舉單例模式及源碼分析的實(shí)例詳解

    這篇文章主要介紹了 JAVA 枚舉單例模式及源碼分析的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • intellij idea使用git stash暫存一次提交的操作

    intellij idea使用git stash暫存一次提交的操作

    這篇文章主要介紹了intellij idea使用git stash暫存一次提交的操作,具有很好的參考價(jià)值希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot?Web開發(fā)之請(qǐng)求響應(yīng)、分層解耦問題記錄

    SpringBoot?Web開發(fā)之請(qǐng)求響應(yīng)、分層解耦問題記錄

    在?Spring?Boot?的?Web?請(qǐng)求響應(yīng)處理中,Servlet?起著關(guān)鍵的作用,Servlet?是?Java?Web?開發(fā)中的基本組件,主要負(fù)責(zé)處理客戶端的請(qǐng)求并生成響應(yīng),這篇文章主要介紹了SpringBoot?Web開發(fā)之請(qǐng)求響應(yīng),分層解耦,需要的朋友可以參考下
    2024-08-08
  • 前端發(fā)送的請(qǐng)求Spring如何返回一個(gè)文件詳解

    前端發(fā)送的請(qǐng)求Spring如何返回一個(gè)文件詳解

    這篇文章主要給大家介紹了關(guān)于前端發(fā)送的請(qǐng)求Spring如何返回一個(gè)文件的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-09-09
  • Java中Array、List、Map相互轉(zhuǎn)換的方法詳解

    Java中Array、List、Map相互轉(zhuǎn)換的方法詳解

    這篇文章主要介紹了Java中Array、List、Map相互轉(zhuǎn)換的方法詳解,在實(shí)際項(xiàng)目開發(fā)中或者一些算法面試題目中經(jīng)常需要用到Java中這三種類型的相互轉(zhuǎn)換,比如對(duì)于一個(gè)整型數(shù)組中尋找一個(gè)整數(shù)與所給的一個(gè)整數(shù)值相同,需要的朋友可以參考下
    2023-08-08
  • java實(shí)現(xiàn)發(fā)送手機(jī)短信

    java實(shí)現(xiàn)發(fā)送手機(jī)短信

    這篇文章主要介紹了java實(shí)現(xiàn)發(fā)送手機(jī)短信,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Java統(tǒng)計(jì)字符串中字符出現(xiàn)次數(shù)的方法示例

    Java統(tǒng)計(jì)字符串中字符出現(xiàn)次數(shù)的方法示例

    這篇文章主要介紹了Java統(tǒng)計(jì)字符串中字符出現(xiàn)次數(shù)的方法,涉及Java針對(duì)字符串的遍歷、查找、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • JAVA 對(duì)象創(chuàng)建與對(duì)象克隆

    JAVA 對(duì)象創(chuàng)建與對(duì)象克隆

    這篇文章主要介紹了JAVA 對(duì)象創(chuàng)建與對(duì)象克隆,new 創(chuàng)建、反射、克隆、反序列化,克隆它分為深拷貝和淺拷貝,通過調(diào)用對(duì)象的 clone方法,進(jìn)行對(duì)象的克隆,下面來看看文章的詳細(xì)內(nèi)容吧
    2022-02-02
  • SpringBoot幾種常用的接口日期格式化方法

    SpringBoot幾種常用的接口日期格式化方法

    在 Springboot 應(yīng)用程序中,日期時(shí)間格式化處理是非常重要的一方面,本文將總結(jié)SpringBoot幾種常用的接口日期格式化方法,通過示例代碼介紹了非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2024-11-11
  • 深入理解Java8新特性之新日期時(shí)間API的應(yīng)用

    深入理解Java8新特性之新日期時(shí)間API的應(yīng)用

    自從 14 年發(fā)布 Java 8 以后,我們古老 java.util.Date 終于不再是我們 Java 里操作日期時(shí)間的唯一的選擇,其實(shí) Java 里的日期時(shí)間的相關(guān) API 一直為世猿詬病,今天我們來了解新的日期時(shí)間API是怎么使用吧
    2021-11-11

最新評(píng)論

安泽县| 内丘县| 陇南市| 广南县| 广饶县| 苍南县| 江阴市| 德江县| 安徽省| 彰化市| 吴桥县| 随州市| 湖州市| 乃东县| 安国市| 通辽市| 大方县| 淮滨县| 城市| 新河县| 新疆| 东海县| 荣昌县| 定安县| 汉寿县| 内丘县| 德令哈市| 沛县| 峨边| 花莲市| 镇安县| 韩城市| 基隆市| 舟曲县| 响水县| 六盘水市| 新竹市| 巧家县| 山丹县| 华安县| 琼海市|