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

Java中的垃圾收集器詳解

 更新時間:2023年07月31日 11:51:57   作者:兔老大RabbitMQ  
這篇文章主要介紹了Java中的垃圾收集器詳解,垃圾收集機制是?Java?的招牌能力,極大地提高了開發(fā)效率,如今垃圾收集幾乎成為現(xiàn)代語言的標(biāo)配,需要的朋友可以參考下

Serial

Serial(串行)收集器收集器是最基本、歷史最悠久的垃圾收集器了。

大家看名字就知道這個收集器是一個單線程收集器了。它的 “單線程” 的意義不僅僅意味著它只會使用一條垃圾收集線程去完成垃圾收集工作,更重要的是它在進(jìn)行垃圾收集工作的時候必須暫停其他所有的工作線程( "Stop The World" ),直到它收集結(jié)束。

新生代采用復(fù)制算法,老年代采用標(biāo)記-整理算法。 

Serial 收集器

虛擬機的設(shè)計者們當(dāng)然知道 Stop The World 帶來的不良用戶體驗,所以在后續(xù)的垃圾收集器設(shè)計中停頓時間在不斷縮短(仍然還有停頓,尋找最優(yōu)秀的垃圾收集器的過程仍然在繼續(xù))。

但是 Serial 收集器有沒有優(yōu)于其他垃圾收集器的地方呢?當(dāng)然有,它簡單而高效(與其他收集器的單線程相比)。Serial 收集器由于沒有線程交互的開銷,自然可以獲得很高的單線程收集效率。Serial 收集器對于運行在 Client 模式下的虛擬機來說是個不錯的選擇。

ParNew

ParNew 收集器其實就是 Serial 收集器的多線程版本,除了使用多線程進(jìn)行垃圾收集外,其余行為(控制參數(shù)、收集算法、回收策略等等)和 Serial 收集器完全一樣。

新生代采用復(fù)制算法,老年代采用標(biāo)記-整理算法。 

ParNew 收集器

它是許多運行在 Server 模式下的虛擬機的首要選擇,除了 Serial 收集器外,只有它能與 CMS 收集器(真正意義上的并發(fā)收集器,后面會介紹到)配合工作。

并行和并發(fā)概念補充:

  • 并行(Parallel) :指多條垃圾收集線程并行工作,但此時用戶線程仍然處于等待狀態(tài)。
  • 并發(fā)(Concurrent):指用戶線程與垃圾收集線程同時執(zhí)行(但不一定是并行,可能會交替執(zhí)行),用戶程序在繼續(xù)運行,而垃圾收集器運行在另一個 CPU 上。

Parallel Scavenge

Parallel Scavenge 收集器也是使用復(fù)制算法的多線程收集器,它看上去幾乎和ParNew都一樣。

 那么它有什么特別之處呢?

-XX:+UseParallelGC 
    使用 Parallel 收集器+ 老年代串行
-XX:+UseParallelOldGC
    使用 Parallel 收集器+ 老年代并行

Parallel Scavenge 收集器關(guān)注點是吞吐量(高效率的利用 CPU)。

CMS 等垃圾收集器的關(guān)注點更多的是用戶線程的停頓時間(提高用戶體驗)。

所謂吞吐量就是 CPU 中用于運行用戶代碼的時間與 CPU 總消耗時間的比值。 

Parallel Scavenge 收集器提供了很多參數(shù)供用戶找到最合適的停頓時間或最大吞吐量,如果對于收集器運作不太了解的話,手工優(yōu)化存在困難的話可以選擇把內(nèi)存管理優(yōu)化交給虛擬機去完成也是一個不錯的選擇。

新生代采用復(fù)制算法,老年代采用標(biāo)記-整理算法。 

Parallel Scavenge 收集器

Serial old

Serial 收集器的老年代版本,它同樣是一個單線程收集器。

它主要有兩大用途:

  • 一種用途是在 JDK1.5 以及以前的版本中與 Parallel Scavenge 收集器搭配使用
  • 另一種用途是作為 CMS 收集器的后備方案。

Parallel old

Parallel Scavenge 收集器的老年代版本。

使用多線程和“標(biāo)記-整理”算法。

在注重吞吐量以及 CPU 資源的場合,都可以優(yōu)先考慮 Parallel Scavenge 收集器和 Parallel Old 收集器。

CMS收集器

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

它非常符合在注重用戶體驗的應(yīng)用上使用。

CMS(Concurrent Mark Sweep)收集器是 HotSpot 虛擬機第一款真正意義上的并發(fā)收集器,它第一次實現(xiàn)了讓垃圾收集線程與用戶線程(基本上)同時工作。

從名字中的Mark Sweep這兩個詞可以看出,CMS 收集器是一種 “標(biāo)記-清除”算法實現(xiàn)的,它的運作過程相比于前面幾種垃圾收集器來說更加復(fù)雜一些。

整個過程分為四個步驟:

  1. 初始標(biāo)記: 暫停所有的其他線程,并記錄下直接與 root 相連的對象,速度很快 ;
  2. 并發(fā)標(biāo)記: 同時開啟 GC 和用戶線程,用一個閉包結(jié)構(gòu)去記錄可達(dá)對象。但在這個階段結(jié)束,這個閉包結(jié)構(gòu)并不能保證包含當(dāng)前所有的可達(dá)對象。因為用戶線程可能會不斷的更新引用域,所以 GC 線程無法保證可達(dá)性分析的實時性。所以這個算法里會跟蹤記錄這些發(fā)生引用更新的地方。
  3. 重新標(biāo)記: 重新標(biāo)記階段就是為了修正并發(fā)標(biāo)記期間因為用戶程序繼續(xù)運行而導(dǎo)致標(biāo)記產(chǎn)生變動的那一部分對象的標(biāo)記記錄,這個階段的停頓時間一般會比初始標(biāo)記階段的時間稍長,遠(yuǎn)遠(yuǎn)比并發(fā)標(biāo)記階段時間短
  4. 并發(fā)清除: 開啟用戶線程,同時 GC 線程開始對為標(biāo)記的區(qū)域做清掃。

CMS 垃圾收集器

從它的名字就可以看出它是一款優(yōu)秀的垃圾收集器

主要優(yōu)點:

  • 并發(fā)收集
  • 低停頓

但是它有下面三個明顯的缺點:

  • 對 CPU 資源敏感;
  • 無法處理浮動垃圾;
  • 它使用的回收算法-“標(biāo)記-清除”算法會導(dǎo)致收集結(jié)束時會有大量空間碎片產(chǎn)生。

G1收集器

G1 (Garbage-First) 是一款面向服務(wù)器的垃圾收集器,主要針對配備多顆處理器及大容量內(nèi)存的機器。以極高概率滿足 GC 停頓時間要求的同時,還具備高吞吐量性能特征。

被視為 JDK1.7 中 HotSpot 虛擬機的一個重要進(jìn)化特征。

它具備以下特點:

  • 并行與并發(fā):G1 能充分利用 CPU、多核環(huán)境下的硬件優(yōu)勢,使用多個 CPU(CPU 或者 CPU 核心)來縮短 Stop-The-World 停頓時間。部分其他收集器原本需要停頓 Java 線程執(zhí)行的 GC 動作,G1 收集器仍然可以通過并發(fā)的方式讓 java 程序繼續(xù)執(zhí)行。
  • 分代收集:雖然 G1 可以不需要其他收集器配合就能獨立管理整個 GC 堆,但是還是保留了分代的概念。
  • 空間整合:與 CMS 的“標(biāo)記--清理”算法不同,G1 從整體來看是基于“標(biāo)記整理”算法實現(xiàn)的收集器;從局部上來看是基于“復(fù)制”算法實現(xiàn)的。
  • 可預(yù)測的停頓:這是 G1 相對于 CMS 的另一個大優(yōu)勢,降低停頓時間是 G1 和 CMS 共同的關(guān)注點,但 G1 除了追求低停頓外,還能建立可預(yù)測的停頓時間模型,能讓使用者明確指定在一個長度為 M 毫秒的時間片段內(nèi)。

G1 收集器的運作大致分為以下幾個步驟:

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

G1 收集器在后臺維護(hù)了一個優(yōu)先列表,每次根據(jù)允許的收集時間,優(yōu)先選擇回收價值最大的 Region(這也就是它的名字 Garbage-First 的由來)。

這種使用 Region 劃分內(nèi)存空間以及有優(yōu)先級的區(qū)域回收方式,保證了 GF 收集器在有限時間內(nèi)可以盡可能高的收集效率(把內(nèi)存化整為零)。

到此這篇關(guān)于Java中的垃圾收集器詳解的文章就介紹到這了,更多相關(guān)Java垃圾收集器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javaweb分頁原理詳解

    javaweb分頁原理詳解

    這篇文章主要為大家詳細(xì)介紹了javaweb分頁的原理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • SpringBoot application.yml配置文件使用及說明

    SpringBoot application.yml配置文件使用及說明

    本文詳細(xì)介紹了SpringBoot application.yml 配置文件的使用和配置項,包括創(chuàng)建 application.yml 文件、配置數(shù)據(jù)源、數(shù)據(jù)庫、緩存、郵件服務(wù)等,適合希望深入了解SpringBoot配置文件的開發(fā)者閱讀
    2025-12-12
  • SpringMVC上傳文件的兩種方法

    SpringMVC上傳文件的兩種方法

    這篇文章主要為大家詳細(xì)介紹了SpringMVC上傳文件的兩種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量的問題分析

    MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量的問題分析

    在Java編碼中,我們通常會把這些數(shù)字或者字符串定義在常量類或者接口中,可以直接在mapper中也可以使用這些常量就比較好,這篇文章主要介紹了MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量,需要的朋友可以參考下
    2023-06-06
  • javaweb servlet中使用請求轉(zhuǎn)發(fā)亂碼的實現(xiàn)

    javaweb servlet中使用請求轉(zhuǎn)發(fā)亂碼的實現(xiàn)

    下面小編就為大家?guī)硪黄猨avaweb servlet中使用請求轉(zhuǎn)發(fā)亂碼的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • IDEA的崛起自己定義快捷生成代碼塊的詳細(xì)步驟

    IDEA的崛起自己定義快捷生成代碼塊的詳細(xì)步驟

    這篇文章主要介紹了IDEA的崛起自己定義快捷生成代碼塊的詳細(xì)步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Java Reflect如何利用反射獲取屬性上的注解

    Java Reflect如何利用反射獲取屬性上的注解

    AnnotatedElement接口是Java反射機制的一部分,用于讀取運行中程序的注釋信息,通過getAnnotation、getAnnotations、isAnnotationPresent和getDeclaredAnnotations方法,可以訪問和判斷注解,Field類實現(xiàn)了該接口
    2024-09-09
  • 使用eclipse + maven一步步搭建SSM框架教程詳解

    使用eclipse + maven一步步搭建SSM框架教程詳解

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三個開源框架整合而成,常作為數(shù)據(jù)源較簡單的web項目的框架.這篇文章主要介紹了eclipse + maven搭建SSM框架 ,需要的朋友可以參考下
    2017-11-11
  • springboot快速集成mybatis-plus的詳細(xì)教程

    springboot快速集成mybatis-plus的詳細(xì)教程

    這篇文章主要介紹了springboot快速集成mybatis-plus的教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • ShardingSphere數(shù)據(jù)庫讀寫分離算法及測試示例詳解

    ShardingSphere數(shù)據(jù)庫讀寫分離算法及測試示例詳解

    這篇文章主要為大家介紹了ShardingSphere數(shù)據(jù)庫讀寫分離算法及測試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評論

大港区| 加查县| 姚安县| 广平县| 莱阳市| 共和县| 东港市| 九龙城区| 通江县| 卓尼县| 锡林郭勒盟| 文水县| 沈丘县| 东安县| 琼海市| 肃宁县| 阿荣旗| 吴忠市| 长垣县| 黄石市| 天长市| 阿拉尔市| 乐业县| 淄博市| 德安县| 万盛区| 玉林市| 珲春市| 西充县| 仙桃市| 客服| 秭归县| 玛曲县| 德惠市| 杂多县| 孙吴县| 安岳县| 桂平市| 义马市| 重庆市| 西乌|