日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM从入门到精通(十):垃圾回收算法串讲:CMS,G1,三色标记算法

發(fā)布時間:2024/2/28 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM从入门到精通(十):垃圾回收算法串讲:CMS,G1,三色标记算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

CMS

  • 并發(fā)回收,工作線程和GC線程同時進(jìn)行,暫停時間短

  • 老年代

  • 分為 四個階段

    • 初始標(biāo)記:需要STW,因為初始的垃圾并不多,因此耗費的時間不長
    • 并發(fā)標(biāo)記:垃圾回收線程和工作線程同時執(zhí)行。一邊產(chǎn)生垃圾,一邊標(biāo)記(最耗時的階段,不過是并發(fā)的)
    • 重新標(biāo)記:STW,對并發(fā)標(biāo)記的過程中新產(chǎn)生的垃圾進(jìn)行重新標(biāo)記 / 取消標(biāo)記
    • 并發(fā)清理:清理的過程也會產(chǎn)生新的“浮動垃圾”,需要等下一次CMS重新運行的時候再次清理
  • CMS 存在的 問題

    • Memory Fragmentation 內(nèi)存碎片問題: 標(biāo)記清除會產(chǎn)生碎片化,如果老年代不能再分配位置,CMS會讓 Serial Old 來清理,效率很低。
    • Floating Garbage 浮動垃圾問題:如果老年代滿了,浮動垃圾還沒有清理完,會讓 Serial Old 清理。
    • 解決:降低觸發(fā) CMS 的閾值,保持老年代有足夠的空間
    • java -XX:+PrintFlagsFinal -version | grep CMSInitiatingOccupancyFraction

G1

垃圾優(yōu)先的垃圾回收器:
G1把內(nèi)存空間分為一塊一塊的region。當(dāng)G1垃圾回收器發(fā)現(xiàn)有必要進(jìn)行垃圾回收的時候,它會優(yōu)先回收存活對象最少的region,也就是垃圾最多的region。這就是“垃圾優(yōu)先”。

設(shè)計架構(gòu)的兩大重要思想:
1、分而治之的思想(Hbase,各種分庫分表等等)
2、分層的思想(網(wǎng)絡(luò)七層模型)

G1把內(nèi)存分為一塊一塊的 region
每一塊 region 有自己的邏輯分代:

  • old
  • suvivor
  • eden
  • humongous


大對象


G1 也是有 FGC的,對象分配不下的時候,就會產(chǎn)生FGC。


如果G1產(chǎn)生FGC,你應(yīng)該做什么?
1. 擴內(nèi)存
2. 提高CPU性能(回收的快,業(yè)務(wù)邏輯產(chǎn)生對象的速度固定,垃圾回收越快,內(nèi)存空間越大)
3. 降低MixedGC觸發(fā)的閾值,讓MixedGC提早發(fā)生(默認(rèn)是45%)

特點
適用于需要特別快的響應(yīng)時間的場景(不需要很高吞吐量)
新老年代的比例是動態(tài)的,5%-60%,一般不用手工指定,也不要手工指定。因為這是G1預(yù)測停頓時間的基準(zhǔn)。它會根據(jù)上次回收的時間,進(jìn)行動態(tài)的調(diào)整。

先把這兩個名詞背下來,我們待會兒再講

  • 三色標(biāo)記
  • 顏色指針



card table
我們補充一個概念叫 card table,這是一張用來記錄 card 的表,是一個位圖。card 是類似于 page,是一頁一頁的,對象位于card內(nèi)部


阿里的多租戶JVM:趙海平他們做的…,專門針對webapplication的,session base的應(yīng)用。請求來訪問,形成垃圾,請求走了,垃圾就被回收了。

Cset:collection set
有哪些需要被回收,會收集到表格里。

Rset:remembered set

每一的region

并發(fā)標(biāo)記算法


CMS 和 G1 用到的都是三色標(biāo)記算法。
把對象在邏輯上分成三種顏色。
1、第一種顏色是黑色。他自己是不是垃圾已經(jīng)被標(biāo)記完了,而且成員變量會牽扯到他引用的一些對象,也已經(jīng)標(biāo)記完了。這時候我們稱之為這個對象是黑色。
2、第二種是灰色。本身標(biāo)記完了,但是還沒有標(biāo)記到他所引用的那些對象也用的那些對象,還是白色沒有標(biāo)記到的,所以這個時候他叫做灰色。
3、還有就是第三種是白色,就是沒被標(biāo)記到的對象,這些對象是白色的。

漏標(biāo)發(fā)生的情況:


打破上述兩個條件之一即可:

為什么G1使用SATB?


Rset會不會影響賦值的效率?會!

  • 由于Rset的存在,那么每次給對象復(fù)制引用的時候,就得做一些額外的操作。
  • 指的是在Rset中做一些額外的記錄(比如說記錄有哪些引用指向了我的對象等等,這些操作在GC中被稱為寫屏障)。這個寫屏障不是之前說的內(nèi)存屏障,而是GC專有的寫屏障。
  • 會影響賦值的效率。 沒有銀彈!NO Silver Bullet!只有特定條件下特定的解決方案,沒有通用的解決方案。

總結(jié)

以上是生活随笔為你收集整理的JVM从入门到精通(十):垃圾回收算法串讲:CMS,G1,三色标记算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。