国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JVM的故事——垃圾收集器

這篇具有很好參考價(jià)值的文章主要介紹了JVM的故事——垃圾收集器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

垃圾收集器


一、serial收集器

新生代收集器,最基礎(chǔ)的收集器,單線程。進(jìn)行垃圾收集時(shí)必須暫停其他所有工作線程,stop the world
JVM的故事——垃圾收集器,JVM的故事,jvm,java

二、parnew收集器

新生代收集器,實(shí)質(zhì)上是serial收集器的多線程版本。除了serial,只有它能和CMS收集器(老年代收集器)配合工作。隨著處理器核心數(shù)越來(lái)越多,parnew比serial有著更好的性能。(但如果是單核心處理器,parnew一定不會(huì)比serial有更好的性能)

三、parallel scavenge收集器

新生代收集器,基于標(biāo)記復(fù)制算法實(shí)現(xiàn),并行收集,Parallel Scavenge的諸多特性從表面上看和ParNew非常相似。Parallel Scavenge收集器的特點(diǎn)是它的關(guān)注點(diǎn)與其他收集器不同,CMS等收集器的關(guān)注點(diǎn)是盡可能地縮短垃圾收集時(shí)用戶(hù)線程的停頓時(shí)間,而Parallel Scavenge收集器的目標(biāo)則是達(dá)到一個(gè)可控制的吞吐量(Throughput)。

高吞吐量意味著最高效率的運(yùn)行計(jì)算機(jī)資源,盡快完成計(jì)算任務(wù),主要用在后臺(tái)運(yùn)算而不需要太多交互的分析任務(wù)。

四、serial old收集器

Serial Old是Serial收集器的老年代版本,它同樣是一個(gè)單線程收集器,使用標(biāo)記-整理算法。和serial一樣,它的主要作用也是曾經(jīng)供客戶(hù)端模式下hotspot虛擬機(jī)使用。在服務(wù)端,它可以和Parallel Scavenge配合使用,也可以作為CMS失敗的備選方案。

五、parallel old收集器

Parallel Old是Parallel Scavenge收集器的老年代版本,支持多線程并發(fā)收集,基于標(biāo)記-整理算法實(shí)現(xiàn)。在它 出現(xiàn)之前Parallel Scavenge不能與CMS搭配使用,所以只能與serial old搭配使用,這樣的吞吐量不一定有parallel new 搭配CMS高。但是當(dāng)parallel old出現(xiàn)之后,在注重 吞吐量或者處理器資源較為稀缺的場(chǎng)合,都可以?xún)?yōu)先考慮Parallel Scavenge加Parallel Old收集器這個(gè)組合。

六、CMS收集器

CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時(shí)間為目標(biāo)的收集器。CMS非常適合互聯(lián)網(wǎng)網(wǎng)站或者基于瀏覽器的B/S系統(tǒng),因?yàn)榭梢允鬼憫?yīng)時(shí)間盡可能短,提供給用戶(hù)良好的交互體驗(yàn)。CMS是基于標(biāo)記-整理算法實(shí)現(xiàn)的,它的過(guò)程有四個(gè)步驟:初始標(biāo)記-并發(fā)標(biāo)記-重新標(biāo)記-并發(fā)清除
JVM的故事——垃圾收集器,JVM的故事,jvm,java

在初始標(biāo)記和重新標(biāo)記的過(guò)程都發(fā)生了”stop the world”。
初始標(biāo)記時(shí)間很短,就是標(biāo)記一下GC roots能直接關(guān)聯(lián)到的對(duì)象。
并發(fā)標(biāo)記時(shí)間比較長(zhǎng),是從GC roots直接關(guān)聯(lián)到的對(duì)象開(kāi)始遍歷整個(gè)對(duì)象圖。這個(gè)過(guò)程是和用戶(hù)進(jìn)程并發(fā)進(jìn)行的。
重新標(biāo)記是為了修正并發(fā)標(biāo)記過(guò)程中因用戶(hù)程序繼續(xù)運(yùn)行而導(dǎo)致標(biāo)記發(fā)生變動(dòng)的那一部分對(duì)象標(biāo)記記錄。這個(gè)過(guò)程會(huì)比初始標(biāo)記長(zhǎng)一點(diǎn),但也遠(yuǎn)比并發(fā)標(biāo)記時(shí)間短。
并發(fā)清除階段就是清理刪除掉標(biāo)記階段判斷已經(jīng)死亡的對(duì)象,由于不需要移動(dòng)存活的對(duì)象,所以也可以和用戶(hù)進(jìn)程并發(fā)進(jìn)行。CMS收集器是 HotSpot虛擬機(jī)追求低停頓的第一次成功嘗試,但它還是有三個(gè)明顯的缺點(diǎn)的:1、對(duì)處理器資源非常敏感。在并發(fā)階段會(huì)占用一些性能,導(dǎo)致應(yīng)用程序變慢。CMS默認(rèn)啟動(dòng)的回收線程數(shù)是(處理器核心數(shù)量 +3)/4,當(dāng)處理器的核心數(shù)小于4個(gè)時(shí),CMS對(duì)用戶(hù)程序的影響就會(huì)變得很大。為了應(yīng)對(duì)這種情況,虛擬機(jī)提供了一種稱(chēng)為“增量式并發(fā)收集器”(Incremental Concurrent Mark Sweep/i-CMS)的CMS收集器變種,這會(huì)使垃圾收集的過(guò)程變長(zhǎng),用戶(hù)程序受到的影響小一點(diǎn)。
2、然后,由于CMS收集器無(wú)法處理“浮動(dòng)垃圾”(Floating Garbage),有可能出現(xiàn)“Con-current Mode Failure”失敗進(jìn)而導(dǎo)致另一次完全“Stop The World”的Full GC的產(chǎn)生。(浮動(dòng)垃圾:在進(jìn)行并發(fā)標(biāo)記和并發(fā)清理時(shí),用戶(hù)程序產(chǎn)生的垃圾,但它們是出現(xiàn)在標(biāo)記過(guò)程結(jié)束后,只能留到下一次垃圾收集再被清理。) 同樣也是由于在垃圾收集階段用戶(hù)線程還需要持續(xù)運(yùn)行,那就還需要預(yù)留足夠內(nèi)存空間提供給用戶(hù)線程使用,因此CMS收集器不能像其他收集器那樣等待到老年代幾乎完全被填滿了再進(jìn)行收集,必須預(yù)留一部分空間供并發(fā)收集時(shí)的程序運(yùn)作使用。在JDK 5的默認(rèn)設(shè)置下,CMS收集器當(dāng)老年代使用了68%的空間后就會(huì)被激活,到了JDK6這個(gè)值被提升到了92%,這可以降低回收的頻率。但面對(duì)的風(fēng)險(xiǎn)是:如果CMS運(yùn)行期間預(yù)留的內(nèi)存不夠用戶(hù)程序運(yùn)行,則會(huì)并發(fā)失敗,虛擬機(jī)不得不停止用戶(hù)程序,使用serial old進(jìn)行老年代的垃圾回收。
3、CMS是一款基于“標(biāo)記-清除”算法實(shí)現(xiàn)的收集器,這會(huì)導(dǎo)致內(nèi)存中有大量的碎片空間。這就會(huì)出現(xiàn)往往老年代還有很多剩余空間,但卻無(wú)法找到足夠大的連續(xù)空間來(lái)分配當(dāng)前對(duì)象,而不得不觸發(fā)一次full GC。CMS收集器提供了一個(gè)-XX:+UseCMS-CompactAtFullCollection開(kāi)關(guān)參數(shù),來(lái)使CMS收集器不得不進(jìn)行Full GC時(shí)開(kāi)啟內(nèi)存碎片的合并整理過(guò)程,不過(guò)整理內(nèi)存會(huì)移動(dòng)存活對(duì)象不能進(jìn)行并發(fā),這又使用戶(hù)停頓時(shí)間變長(zhǎng)。因此虛擬機(jī)設(shè)計(jì)者們還提供了另外一個(gè)參數(shù)-XX:CMSFullGCsBefore- Compaction,這個(gè)參數(shù)是在CMS經(jīng)歷過(guò)若干次不用整理內(nèi)存的full GC后,下次full GC前進(jìn)行內(nèi)存整理。

七、Garbage First收集器

Garbage First(簡(jiǎn)稱(chēng)G1)收集器是垃圾收集器技術(shù)發(fā)展歷史上的里程碑式的成果,它開(kāi)創(chuàng)了收集器面向局部收集的設(shè)計(jì)思路和基于Region的內(nèi)存布局形式。G1收集器是把Java堆劃分為多個(gè)大小相等獨(dú)立區(qū)域(region),每個(gè)region都可以根據(jù)需要去扮演新生代的survivor、eden或者老年代,收集器也根據(jù)它們扮演的不同角色采取不同的策略。
對(duì)于大小超過(guò)Region容量一半的對(duì)象,都被認(rèn)為是大對(duì)象,它們都被放在特定的Humongous區(qū)域,一般把這個(gè)區(qū)域當(dāng)成老年代來(lái)看待。
Region是單次回收的最小單位,后臺(tái)維護(hù)一個(gè)優(yōu)先級(jí)隊(duì)列,存儲(chǔ)著每個(gè)Region回收的價(jià)值,每次根據(jù)最大停頓時(shí)間去優(yōu)先回收那些價(jià)值更高的Region。
JVM的故事——垃圾收集器,JVM的故事,jvm,java
G1收集器存在的一些技術(shù)難題:
1、將Java堆分成了多個(gè)Region,里面存在跨Region引用對(duì)象??梢允褂糜洃浖苊馊炎鳛镚C Roots掃描,不過(guò)每個(gè)Region都要維護(hù)自己的記憶集。
2、在并發(fā)標(biāo)記階段保證收集線程與用戶(hù)線程互不干擾。CMS采用的是增量更新算法實(shí)現(xiàn),G1 收集器則是通過(guò)原始快照(SATB)算法來(lái)實(shí)現(xiàn)的。G1收集器設(shè)計(jì)了兩個(gè)名為T(mén)AMS(Top at Mark Start)的指針,在并發(fā)回收時(shí)新分配的對(duì)象都要在這兩個(gè)指針之上,這也就不會(huì)標(biāo)記到新分配的對(duì)象。當(dāng)回收速度小于分配速度導(dǎo)致沒(méi)有空間分配給新對(duì)象時(shí),也會(huì)導(dǎo)致full GC
3、建立一個(gè)可靠的停頓預(yù)測(cè)模型。G1收集器是以衰減平均值來(lái)實(shí)現(xiàn)停頓預(yù)測(cè)模型的。衰減平均值更意味著最近的平均值,也就是越新的統(tǒng)計(jì)狀態(tài)權(quán)重越高。

G1收集器的回收過(guò)程大致分為四個(gè)階段:初始標(biāo)記、并發(fā)標(biāo)記、最終標(biāo)記、篩選回收。
初始標(biāo)記:標(biāo)記一下GC Roots能直接關(guān)聯(lián)到的對(duì)象,并修改TAMS指針的值
并發(fā)標(biāo)記:遞歸掃描整個(gè)堆里的對(duì)象,找出需要進(jìn)行回收的對(duì)象,這個(gè)過(guò)程耗時(shí)較長(zhǎng),但是可以和用戶(hù)線程并發(fā)進(jìn)行。還要重新處理SATB記錄下在并發(fā)階段有變動(dòng)的對(duì)象引用。
最終標(biāo)記:處理并發(fā)標(biāo)記結(jié)束后仍遺留下來(lái)的少量SATB記錄。
篩選回收:對(duì)各個(gè)Region的回收價(jià)值和成本進(jìn)行分析,根據(jù)用戶(hù)預(yù)期停頓時(shí)間制作回收計(jì)劃。把決定回收的Region的存活對(duì)象復(fù)制到其他空的Region中,然后再把決定回收的Region全部清理。
JVM的故事——垃圾收集器,JVM的故事,jvm,java
一般來(lái)講,小內(nèi)存的應(yīng)用CMS性能會(huì)優(yōu)于G1,大內(nèi)存的應(yīng)用反之,這個(gè)Java堆容量堆平衡點(diǎn)大概在6-8GB之間。

八、收集器的權(quán)衡

一般進(jìn)行收集器的選擇時(shí),主要考慮三方面:應(yīng)用程序所注重的點(diǎn)是什么,運(yùn)行應(yīng)用的硬件情況,使用的JDK版本
比如是面向用戶(hù)的B/S系統(tǒng),那么低延遲就比較重要。如果有預(yù)算但沒(méi)有調(diào)優(yōu)經(jīng)驗(yàn),就適合商業(yè)技術(shù)支持的專(zhuān)有解決方案,可以使用C4收集器;如果沒(méi)有足夠預(yù)算就可以試試ZGC。
如果接手的是遺留系統(tǒng),JDK版本比較低,就可以根據(jù)堆內(nèi)存大小選擇收集器,在4-6GB可以選擇CMS,更大內(nèi)存就可以選擇G1。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-687702.html

到了這里,關(guān)于JVM的故事——垃圾收集器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JVM--- 垃圾收集器詳細(xì)整理

    JVM--- 垃圾收集器詳細(xì)整理

    目錄 一、垃圾收集需要考慮的三個(gè)事情: 二、垃圾回收針對(duì)的區(qū)域 三、如何判斷對(duì)象已死 ? ? ? ? 1.引用計(jì)數(shù)算法: ? ? ? ? 2.可達(dá)性分析算法 四、引用 五、生存還是死亡? 六、回收方法區(qū) 七、垃圾收集算法 ? ? ? ? 1.分代收集理論 2.標(biāo)記-清除算法 ????????3.標(biāo)記

    2024年02月19日
    瀏覽(30)
  • JVM ZGC垃圾收集器

    JVM ZGC垃圾收集器

    ZGC(“Z”并非什么專(zhuān)業(yè)名詞的縮寫(xiě),這款收集器的名字就叫作Z Garbage Collector)是一款在JDK 11中新加入的具有實(shí)驗(yàn)性質(zhì)[1]的低延遲垃圾收集器,是由Oracle公司研發(fā)的。 ZGC收集器 是一款基于Region內(nèi)存布局的,(暫時(shí))不設(shè)分代的,使用了讀屏障、染色指針和內(nèi)存多重映射等技術(shù)

    2024年02月10日
    瀏覽(24)
  • 深入理解JVM垃圾收集器

    深入理解JVM垃圾收集器

    相關(guān)系列 深入理解JVM垃圾收集算法-CSDN博客 目前市面常見(jiàn)的垃圾收集器有Serial、ParNew、Parallel、CMS、Serial Old、Parallel Old、G1、ZGC以及有二種不常見(jiàn)的Epsilon、Shenandoah的,從上圖可以看到有連線的的垃圾收集器是可以組合使用,是年輕代+老年代。為什么會(huì)出現(xiàn)這么多的垃圾收集

    2024年04月09日
    瀏覽(24)
  • JVM:垃圾收集器(7種)

    JVM:垃圾收集器(7種)

    如果兩個(gè)收集器之間存在連線,就說(shuō)明它們可以搭配使用。它們說(shuō)在的區(qū)域則表示這個(gè)收集器屬于新生代收集器還是老年代收集器。其中Serial(串行)、Parallel(并行) ? ? ? ? Serial收集器是最基礎(chǔ)、歷史最悠久的收集器,是HotSpot虛擬機(jī)新生代收集器的唯一選擇。這個(gè)收集器

    2024年01月20日
    瀏覽(22)
  • Java虛擬機(jī)(JVM)垃圾收集器、新生代、老年代、永久代以及內(nèi)存分配策略

    Java虛擬機(jī)(JVM)垃圾收集器、新生代、老年代、永久代以及內(nèi)存分配策略

    在 Java 中,堆被劃分成兩個(gè)不同的區(qū)域:新生代 ( Young )、老年代 ( Old )。而新生代 ( Young ) 又被劃分為三個(gè)區(qū)域:Eden、From Survivor、To Survivor。這樣劃分的目的是為了使 JVM 能夠更好的管理堆內(nèi)存中的對(duì)象,包括內(nèi)存的分配以及回收。 新生代中一般保存新出現(xiàn)的對(duì)象,所以每次

    2024年02月04日
    瀏覽(27)
  • ZGC垃圾收集器-JVM(十五)

    上篇文章說(shuō)了G1的特性,無(wú)分代,復(fù)制算法,大內(nèi)存就可以用G1,可預(yù)測(cè)stw時(shí)間等特性。 G1垃圾收集分類(lèi)-JVM(十四) ZGC收集器 -XX:+UseZGC ZGC(Z Garbage Collector)是在jdk11新加入的低延遲垃圾收集器。 Zgc有四個(gè)目標(biāo) : 支持至少TB級(jí)別堆內(nèi)存回收。(目前4TB) STW保持在10ms之內(nèi)。 吞

    2024年02月16日
    瀏覽(20)
  • G1垃圾收集器-JVM(十三)

    G1垃圾收集器-JVM(十三)

    上篇文章說(shuō)了CMS垃圾收集器使用以及三色標(biāo)記如何解決cms的一些問(wèn)題。分別有初始標(biāo)記,并發(fā)標(biāo)記,重新標(biāo)記,并發(fā)清理,并發(fā)重置。 CMS垃圾收集器三色標(biāo)記-JVM(十二) G1收集器(Garbage-First) -XX:+UseG1GC 這是一款面向服務(wù)器的垃圾收集器,主要針對(duì) 設(shè)備多核cpu和大內(nèi)存的機(jī)

    2024年02月16日
    瀏覽(22)
  • JVM-垃圾回收(標(biāo)記算法,收集器)

    JVM-垃圾回收(標(biāo)記算法,收集器)

    申明:文章內(nèi)容是本人學(xué)習(xí)極客時(shí)間課程所寫(xiě),文字和圖片基本來(lái)源于課程資料,在某些地方會(huì)插入一點(diǎn)自己的理解,未用于商業(yè)用途,侵刪。 原資料地址:課程資料 垃圾回收的基本原理 1 什么是垃圾? 在內(nèi)存中,沒(méi)有被引用的對(duì)象就是垃圾。 2 如果找到垃圾對(duì)象? 引用計(jì)

    2024年02月21日
    瀏覽(31)
  • JVM垃圾回收算法和CMS垃圾收集器

    JVM垃圾回收算法和CMS垃圾收集器

    目錄 判斷一個(gè)對(duì)象是否死亡? 1、引用計(jì)數(shù)法? 2、可達(dá)性分析算法 三色標(biāo)記 垃圾收集算法 1、分代收集理論? 2、垃圾回收算法 標(biāo)記-清除 標(biāo)記-復(fù)制 標(biāo)記-整理 CMS(Concurrent Mark Sweep)收集器 CMS垃圾收集器步驟 CMS垃圾收集器優(yōu)缺點(diǎn) 垃圾收集需要完成的三件事情: 哪些內(nèi)存需

    2024年02月10日
    瀏覽(27)
  • 三種方式查看 JVM 垃圾收集器

    三種方式查看 JVM 垃圾收集器

    ????????不同版本的 JVM 默認(rèn)使用的垃圾收集器是不同的,目前的新生代和老年代的垃圾收集器如下圖所示,新生代和老年代之間的連線表示這些垃圾收集器可以進(jìn)行搭配使用 ????????垃圾收集器的名字和? JVM 里面的參數(shù)對(duì)照表如下,即在 JVM 里面并不是存儲(chǔ)的垃圾收

    2024年02月09日
    瀏覽(36)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包