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

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。

這篇具有很好參考價值的文章主要介紹了深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

java CMS,G1垃圾收集器工作流程原理淺析

JVM內(nèi)存空間基礎(chǔ)知識點(基于JDk1.8)
1.方法區(qū):邏輯概念,元空間,方法區(qū)主要用于存儲類的信息、常量池、方法數(shù)據(jù)、方法代碼等。方法區(qū)邏輯上屬于堆的一部分,但是為了與堆進(jìn)行區(qū)分,通常又叫“非堆”。
2.程序計數(shù)器:程序計數(shù)器可以看作當(dāng)前線程所執(zhí)行的字節(jié)碼的行號指示器。如果線程執(zhí)行的是Java方法那么這個計數(shù)器記錄的是正在執(zhí)行的虛擬機(jī)字節(jié)碼指令地址。如果執(zhí)行的是Native方法,這個計數(shù)器為空。
2.Java虛擬機(jī)棧:Java虛擬機(jī)棧跟程序計數(shù)器一樣是線程私有的,它的生命周期和線程相同。虛擬機(jī)棧描述的是Java方法執(zhí)行的內(nèi)存模型:每個方法在執(zhí)行時都會創(chuàng)建一個棧幀用于存儲局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息。每一個方法從調(diào)用到執(zhí)行完成的過程,就對應(yīng)一個棧幀在虛擬機(jī)棧中入棧到出棧的過程。
3.本地方法棧:本地方法棧與虛擬機(jī)棧作用相似,它們之間的區(qū)別是虛擬機(jī)棧為虛擬機(jī)執(zhí)行Java方法服務(wù),而本地方法棧則為虛擬機(jī)使用到的Native方法服務(wù)。
4.Java堆: Java堆通常是Java虛擬機(jī)所管理的內(nèi)存中最大的一塊。Java堆是被鎖有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動時創(chuàng)建。這塊區(qū)域唯一的目的就是存放對象實例,幾乎所有對象實例都在該區(qū)域分配內(nèi)存。

Java堆時垃圾收集器管理的主要區(qū)域(GC堆),從內(nèi)存回收的角度(收集器一般采用分代收集算法),Java堆還可以細(xì)分為:新生代和老年代。新生代再細(xì)分有:Eden空間、From Survivor空間、To Survivor空間。

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。,java,流程圖,開發(fā)語言,jvm

1)簡述垃圾收集算法

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

兩遍掃描,第一遍掃描枚舉GCRoots根節(jié)點對象標(biāo)記出不可回收對象,第二遍掃描找到可回收對象進(jìn)行清理。算法簡單,存活對象較多的情況下效率比較高,但是容易產(chǎn)生一個內(nèi)存碎片化的問題。

2.復(fù)制算法:

一次掃描找到存活對象進(jìn)行復(fù)制,效率較高。適用于存活對象較少的情況,新生代垃圾收集(新生代對象存活率百分之二)。但是對內(nèi)存要求較高,一半的內(nèi)存空間預(yù)留。

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

兩遍掃描找到存活對象并進(jìn)行移動整理。內(nèi)存不會造成浪費,但是回收效率較低。

4.分代收集算法:前幾種算法的組合

2)垃圾收集器介紹

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。,java,流程圖,開發(fā)語言,jvm

1.serial系列(標(biāo)記整理算法)

serial-serialold組合,單線程垃圾收集器,GC線程工作的時候會暫停所有用戶線程,產(chǎn)生stop the world。適用于內(nèi)存較小的內(nèi)存垃圾回收,簡單而高效,不存在多線程交互開銷,效率高。一般是硬件能力不足的情況下推動產(chǎn)生的。
深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。,java,流程圖,開發(fā)語言,jvm

2.Parallel系列(標(biāo)記整理算法)

Parallel 并行線程垃圾收集器,GC線程工作的時候暫停用戶線程,產(chǎn)生stop the world。內(nèi)存較大時,單線程GC工作時造成的stop the world時間過長,影響用戶體驗。Parallel系列垃圾收集器GC線程并行清理,減少gc工作線程時間。
深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。,java,流程圖,開發(fā)語言,jvm

3.CMS垃圾收集器。重點(垃圾清除算法)

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。,java,流程圖,開發(fā)語言,jvm
CMS垃圾收集器工作流程
1.初始標(biāo)記:枚舉GCRoots對象,暫停用戶線程,掃描對象較少,Stop the world時間短。
2.并發(fā)標(biāo)記:GC線程,用戶線程并發(fā)工作,耗時時間最久的一部分內(nèi)容(80%GC時間),GC線程搶占CPU,對用戶線程有影響。由于用戶線程是并發(fā)執(zhí)行的,用戶線程會造成一些對象的引用改變,產(chǎn)生新的垃圾對象。
3.重新標(biāo)記:短暫的stop the world,不會有對象的狀態(tài)改變。并發(fā)標(biāo)記產(chǎn)生的新的垃圾會在這階段被標(biāo)記出來。
4.并發(fā)清理: GC線程和用戶線程并發(fā)執(zhí)行,產(chǎn)生的浮動垃圾由下一次垃圾回收清理。
缺點:CMS進(jìn)行垃圾收集的時候需要預(yù)留一定的內(nèi)存空間給用戶線程工作(默認(rèn)68%,可設(shè)置),在內(nèi)容空間不足時,會導(dǎo)致回收失敗,此時會通過serialold進(jìn)行垃圾回收,速度特別慢。

CMS垃圾收集器采用的是三色標(biāo)記算法。
深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。,java,流程圖,開發(fā)語言,jvm
由于CMS采用的是并發(fā)標(biāo)記,在GC線程工作時,此時有一個黑色的對象的引用對象被置為null,由于黑色對象不需要再被重新掃描,此時又沒有其他引用跟置為null的引用對象產(chǎn)生關(guān)聯(lián)時。就會產(chǎn)生一個浮動垃圾的情況。
在一個灰色對象的引用白色對象引用被置為null,并將黑色對象的屬性引用指向該白色對象時,會產(chǎn)生一個漏標(biāo)現(xiàn)象。CMS采用三色標(biāo)記法+incremental update算法,在黑色對象引用增加時,將黑色引用對象置為灰色,下次重新掃描。

4.G1垃圾收集器。重點,(region內(nèi)標(biāo)記清楚算法,region之間復(fù)制算法)

G1邏輯分代概念。基于整個內(nèi)存劃分為四個不同類型的內(nèi)存區(qū)域。
H:存放大對象

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。,java,流程圖,開發(fā)語言,jvm
每個region都有一個RememberrdSet內(nèi)存區(qū)域 記錄了其他region到benregion的引用,垃圾收集器只需掃描該區(qū)域即可。
G1分為YGC(新生代回收),F(xiàn)GC(整個堆內(nèi)存回收),MixedGC(可設(shè)置MixedGC啟動的內(nèi)存大?。?br> MixedGC類似于CMS,在堆內(nèi)存空間使用超過45%時,產(chǎn)生MixedGC。G1采用三色標(biāo)記法+SATB算法,在灰色對象的白色引用對象引用清楚時,置入堆棧對象引用,后續(xù)掃描RSet枚舉根對象判斷是有有新的引用指向該白色對象。沒有則進(jìn)行清楚。

CMS垃圾清理流程圖 及 具體邏輯

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。,java,流程圖,開發(fā)語言,jvm

1、新創(chuàng)建的對象一般會被分配在新生代中。常用的新生代的垃圾回收器是 ParNew 垃圾回收器,它按照 8:1:1 將新生代分成 Eden 區(qū),以及兩個 survivor 區(qū)。創(chuàng)建的對象將 Eden 區(qū)全部擠滿,這個對象就是「擠滿新生代的最后一個對象」。此時,Minor Gc 就觸發(fā)了。
2、在正式 Minor Gc 前,JVM 會先檢查新生代中對象,是比老年代中剩余空間大還是小。Minor Gc 之后 survivor 區(qū)不放剩余對象,這些對象就要進(jìn)入到老年代,所以要提前檢查老年代是不是夠用。
3、老年代剩余空間如果大于新生代中的對象大小,那就直接 Minor Gc,Gc 完survivor 不夠放,老年代夠放。
老年代剩余空間如果小于新生代中的對象大小,這時候就要進(jìn)入老年代空間分配擔(dān)保規(guī)則。
4、老年代空間分配擔(dān)保規(guī)則:如果老年代中剩余空間大小,大于歷次 Minor Gc 之后剩余對象的大小,那就允許進(jìn)行 Minor Gc。因為從概率上來說,以前的放的下,這次的也應(yīng)該放的下。那就有兩種情況:
一:老年代中剩余空間大小,大于歷次 Minor Gc 之后剩余對象的大小,進(jìn)行 Minor Gc
二:老年代中剩余空間大小,小于歷次 Minor Gc 之后剩余對象的大小,進(jìn)行 Ful GC,把老年代空出來再檢查。

結(jié)合第四步,開啟老年代空間分配擔(dān)保規(guī)則只能說是大概率上來說,Minor Gc 剩余后的對象夠放到老年代,如果放不下:Minor Gc 后會有這樣三種情況:
Minor Gc 之后的對象足夠放到 survivor 區(qū),Gc 結(jié)束。
Minor Gc 之后的對象不夠放到 survivor 區(qū),接著進(jìn)入到老年代,老年代能放下,那也可以,GC 結(jié)束
Minor Gc 之后的對象不夠放到 survivor 區(qū),老年代也放不下,那就只能 Full GC。
以上是成功 GC 的例子,以下3 中情況,會導(dǎo)致 GC 失敗,報 OOM:
緊接上一節(jié) Ful GC 之后,老年代任然放不下剩余對象,就只能 00M.
未開啟老年代分配擔(dān)保機(jī)制,且一次FuI GC 后,老年代任然放不下剩余對象,也只能 OOM。
開啟老年代分配擔(dān)保機(jī)制,但是擔(dān)保不通過,一次Ful GC 后,老年代任然放不下剩余對象,也是能 OOM。
注:
老年代分配擔(dān)保機(jī)制在JDK1.5以及之前版本中默認(rèn)是關(guān)閉的,需要通過HandlePromotionFailure手動指定,JDK1.6之后就默認(rèn)開啟。如果我們生產(chǎn)環(huán)境服務(wù)使用的是JDK/1.7JDK1.8,所以不用再手動去開啟擔(dān)保機(jī)制。
Full GC主要指新生代、老年代、metaspace上的全部GC

使用G1垃圾回收器的例子
深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。,java,流程圖,開發(fā)語言,jvm
深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。,java,流程圖,開發(fā)語言,jvm文章來源地址http://www.zghlxwxcb.cn/news/detail-857123.html

到了這里,關(guān)于深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程圖 什么社會觸發(fā)Minor GC?觸發(fā)MinorGC過程。Full GC 過程。的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 《深入理解Java虛擬機(jī)(第三版)》讀書筆記:Java內(nèi)存區(qū)域與內(nèi)存溢出異常、垃圾收集器與內(nèi)存分配策略

    《深入理解Java虛擬機(jī)(第三版)》讀書筆記:Java內(nèi)存區(qū)域與內(nèi)存溢出異常、垃圾收集器與內(nèi)存分配策略

    下文是閱讀《深入理解Java虛擬機(jī)(第3版)》這本書的讀書筆記,如有侵權(quán),請聯(lián)系刪除。 Java虛擬機(jī)在執(zhí)行Java程序的過程中會把它所管理的內(nèi)存劃分為若干個不同的數(shù)據(jù)區(qū)域。這些區(qū)域有各自的用途,以及創(chuàng)建和銷毀的時間,有的區(qū)域隨著虛擬機(jī)進(jìn)程的啟動而一直存在,有

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

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

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

    2024年02月16日
    瀏覽(22)
  • 【JVM】JVM收集器CMS與G1區(qū)別

    【JVM】JVM收集器CMS與G1區(qū)別

    CMS收集器和G1收集器的區(qū)別 CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用 G1收集器收集范圍是老年代和新生代。不需要結(jié)合其他收集器使用 CMS收集器以最小的停頓時間為目標(biāo)的收集器。 G1收集器可預(yù)測垃圾回收的停頓時間(建立可預(yù)測的停頓時間

    2024年02月08日
    瀏覽(36)
  • 詳細(xì)了解G1、了解G1、G1垃圾收集器詳解、G1垃圾回收器簡單調(diào)優(yōu)

    詳細(xì)了解G1、了解G1、G1垃圾收集器詳解、G1垃圾回收器簡單調(diào)優(yōu)

    4.詳細(xì)了解G1: 4.1.一:什么是垃圾回收 4.2.了解G1 4.3.G1 Yong GC 4.4.G1 Mix GC 4.5.三色標(biāo)記算法 4.6.調(diào)優(yōu)實踐 5.G1垃圾收集器詳解 5.1.G1垃圾收集器 5.2.G1的堆內(nèi)存劃分 5.3.G1的運行過程 5.4.三色標(biāo)記 5.4.1.漏標(biāo)問題 5.5.記憶集與卡表 5.6.安全點與安全區(qū)域 6.G1垃圾回收器簡單調(diào)優(yōu) 6.1.堆 6.2

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

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

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

    2024年02月10日
    瀏覽(27)
  • CMS垃圾收集器&三色標(biāo)記-JVM(十二)

    CMS垃圾收集器&三色標(biāo)記-JVM(十二)

    上篇文章說了CMS垃圾收集器是賦值清除,所以他不可以碎片整理,于是jvm支持兩個參數(shù),幾次fullGC之后碎片整理壓縮空間。Cms他會搶占cpu資源,因為是并行運行,所以會有浮動垃圾。還有執(zhí)行不確定性,垃圾收集完,繼續(xù)進(jìn)入新的對象,導(dǎo)致異常concurrent mode faliture,最后用

    2024年02月16日
    瀏覽(25)
  • JVM(Java Virtual Machine)G1收集器篇

    JVM(Java Virtual Machine)G1收集器篇

    本文參考《深入理解Java虛擬機(jī)》,本文主要介紹G1收集器的收集思想和具體過程(填上一篇文章留下的坑) 本系列其他文章鏈接: JVM(Java Virtual Machine)內(nèi)存模型篇 JVM(Java Virtual Machine)垃圾收集算法篇 JVM(Java Virtual Machine)垃圾收集器篇 G1是一款主要面向服務(wù)端應(yīng)用的垃圾

    2024年02月07日
    瀏覽(29)
  • 小研究 - Java虛擬機(jī)垃圾收集器的性能分析與調(diào)節(jié)

    小研究 - Java虛擬機(jī)垃圾收集器的性能分析與調(diào)節(jié)

    垃圾收集器是Java虛擬機(jī)(JVM)的核心組成部分之一,對Java虛擬機(jī)的性能有非常重要的影響。本文將介紹GC的工作原理以及對象回收算法,重點介紹JVM的分段回收技術(shù);剖析JVM自帶的GC性能分析工具;闡述如何通過命令行參數(shù)調(diào)節(jié)GC的運行,提

    2024年02月11日
    瀏覽(25)
  • 從原理聊JVM(二):從串行收集器到分區(qū)收集開創(chuàng)者G1

    作者:京東科技?康志興 隨著Java的進(jìn)化過程,涌現(xiàn)出各種不同的垃圾回收器,從串行執(zhí)行到并行執(zhí)行,從高吞吐到低延遲,終極目標(biāo)就是讓開發(fā)人員專注于程序的代碼書寫而無需關(guān)注內(nèi)存管理。 JDK早期出現(xiàn)的垃圾回收器通常單獨作用于不同分代,到后期出現(xiàn)的G1開始,才可以

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

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

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

    2024年02月04日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包