精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

JVM入門之歷代垃圾回收器 2

jf_78858299 ? 來源:北洋洋洋 ? 作者:北洋 ? 2023-02-10 11:29 ? 次閱讀

CMS收集器

全稱:Concurrent Mark Sweep

特點

  1. 「采用標記-清除算法實現」 2.和Parallel 系列的收集器注重點不同:
Parallel 注重吞吐量CMS注重STW的停頓時間

工作流程

1.初始標記

「CMS inital mark」

?

標記GC Roots直接關聯的對象**「需要STW」**

?

2.并發標記

CMS concurrent mark

?

根據上一步和GC Roots直接關聯的對象進行遍歷整個堆里面的對象圖并進行標記,由于是并發的所以并 「不需要停頓用戶線程」 ,但是比較耗時因為遍歷整個對象圖。

?

3.重新標記

CMS remark

?

在并發標記期間由于和用戶線程是并發的,所以這段期間用戶線程可能更新了引用,所以需要進行一次修正(詳見上一篇文章中講到的 「增量更新」 ) 需要 「STW」 ,STW停頓時間比初始標記時間長,但是并沒有并發標記運行時間長

?

4.并發清除

?

清除刪掉被標記為垃圾的對象,由于采用的是標記-清除算法,所以并不需要移動存活對象因此是可以并發的。(當內存碎片嚴重到不足以分配對象時其實還是需要進行標記-整理算法的,這個時候就會提前觸發FullGC。)

?

「注意」 :在并發階段產生的**“浮動垃圾”**(并發時用戶線程產生的垃圾),需要等到下一次垃圾回收才能進行清理;而且并發的時候需要預留一部分內存空間供用戶線程使用,所以不能等到老年代完全用完在進行清理。JDK5的默認設置是當老年代使用了65%的空間就會觸發GC。

G1 收集器

特點

思維方式的重大轉變:

?

G1之前的收集器都是分代收集的思想,根據不同的代采用不同的GC:新生代(Minor GC),老年代(Major GC),整個JAVA堆(Full GC)。

?

但是GC是根據哪塊內存中垃圾數量多回收效益最大來區分的,面向的是堆內存中的任意一塊內存來組成回收集(Collection Set)進行回收。

實現

?

基于Region的堆內存布局來實現該回收過程。不再以固定大小及固定數量來劃分分代區域,而是把連續的堆內存區域進行劃分為各自獨立大小相等的區域(Region),每一個Region都可以根據需要扮演新生代中的Enen空間,Survivor空間,或者老年代。收集器根據扮演不同角色的Region采用不同策略去處理。

?

Region中有一類特殊的Humongous區域,專門用來存儲大對象。

G1認為一個對象的大小超過了一個Region空間的一半就認為該對象是大對象,如果超過了整個Region空間的超大對象將會被存放在連續的Humongous Region中,因此該區域一般會被作為老年代看待。

優點

「1.建立可預測的停頓時間模型」 :由于采用的是Region,因此回收單元作為Region即每次回收都是Region大小的整數倍。

G1會跟蹤Region區域里面垃圾堆,計算出價值(回收所獲得的空間大小以及回收所需時間的經驗值),接著在后臺維護一個優先級列表,根據用戶設置的允許停頓時間來進行回收價值最大的Region區域。也就是“Garbage First” 的由來。

「2.內存碎片」 整體上采用的是標記-整理,但是在兩個Region中實際上還是采用的復制算法,所以不會出現內存碎片問題。

缺點

「1.浪費額外內存來維護收集器工作」

跨代引用避免全堆掃描之前說過是采用 「記憶集」 的方式來解決,在G1中也一樣。每個Region中都有自己的記憶集 「但是」 在G1中每個Region除了需要記錄別的Region指向自己的指針,還需要標記這些指針分別在哪些卡頁范圍內。其實本質上說是哈希表,Key是別的Region的起始地址,Value是一個集合存儲的元素是卡表的索引號。因此實現起來比原有的記憶集要復雜,而且Region的數量比之前的分代數量要多得多,所以記憶集的維護占用了更高的內存

?

G1至少要耗費大約相當于JAVA堆容量的10%到20%來存儲維持收集器正常工作

?

「2.不僅用到寫后屏障還用到了寫前屏障」

上一小點中已經講到維護卡表是需要進行添加寫后屏障來完成更新卡表的操作的,但是G1還用到了寫前屏障:由于使用的是原始快照來保證可以進行并發標記的基礎,對比與增量更新來說雖然能夠減少最終標記的停頓時間,但是相比于收集器,這款收集器不僅采用了寫前屏障也采用了寫后屏障導致最終的效率降低

工作流程

與之前不同的是 「最后一處」 ,這個步驟需要進行 「更新Region的統計數據,對所有的Region的回收價值和成本進行排序,然后根據用戶設定的期望停頓時間進行決定選擇哪幾個Region構成回收集,然后將一部分的Region中存活對象復制到另外一個空的Region空間中,隨后進行清理掉整個舊的Region空間」 。是不是復制算法(針對與Region來說),因為涉及對象移動,所以需要 「暫停用戶線程」

總結

到此,如果讀者之前閱讀過筆者之前的關于垃圾回收器講解的文章,其實已經對現在大多數垃圾回收器機制和實現原理了解的差不多了,讀者有興趣可以自行去看Shenandoah收集器和ZGC收集器,本文不在敘述,主要確實文章內容有點太長了哈哈。后面的文章將不在分析垃圾回收器的知識,但是還是會更新關于JVM的文章。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • GC
    GC
    +關注

    關注

    0

    文章

    9

    瀏覽量

    17077
  • cms
    cms
    +關注

    關注

    0

    文章

    59

    瀏覽量

    10956
  • JVM
    JVM
    +關注

    關注

    0

    文章

    157

    瀏覽量

    12210
  • 收集器
    +關注

    關注

    0

    文章

    30

    瀏覽量

    3126
收藏 人收藏

    評論

    相關推薦

    固態硬盤垃圾回收方法

    由于NAND閃存的固有限制,寫前擦除和擦除粒度較大,基于NAND Flash的固態硬盤(SSD)需要執行垃圾回收以重用失效頁。然而垃圾回收帶來的高開銷會顯著降低SSD的性能,也會直接影
    發表于 12-03 10:50 ?2次下載
    固態硬盤<b class='flag-5'>垃圾</b><b class='flag-5'>回收</b>方法

    Jvm垃圾回收機制及性能調優實戰

    JVM中自動檢測并移除不再使用的數據對象的這種機制稱為:垃圾回收,簡稱GC。JVM通過使用垃圾收集
    發表于 04-03 14:31 ?2次下載

    帶顏色的JVM垃圾回收三色標記法

    三色標記法是一種垃圾回收法,它可以讓JVM不發生或僅短時間發生STW(Stop The World),從而達到清除JVM內存垃圾的目的。
    的頭像 發表于 10-20 14:23 ?1617次閱讀

    詳解JVM垃圾回收算法和垃圾回收

    JVM 垃圾回收機制是對堆中沒有使用的對象進行回收,那么判斷對象是否“存活”就至關重要。在判斷對象是否“存活”的方法中,我們會介紹引用計數算法和可達性分析法。
    的頭像 發表于 03-29 13:55 ?1475次閱讀
    詳解<b class='flag-5'>JVM</b>的<b class='flag-5'>垃圾</b><b class='flag-5'>回收</b>算法和<b class='flag-5'>垃圾</b><b class='flag-5'>回收</b><b class='flag-5'>器</b>

    JVM入門歷代垃圾回收 1

    很多人經常把這兩個搞混,當然筆者剛開始的時候也是傻傻分不清楚。其實只要記住并行說的是GC 線程之間的關系,而并發說的是GC和用戶線程之間的關系
    的頭像 發表于 02-10 11:29 ?599次閱讀
    <b class='flag-5'>JVM</b><b class='flag-5'>入門</b><b class='flag-5'>之</b><b class='flag-5'>歷代</b><b class='flag-5'>垃圾</b><b class='flag-5'>回收</b><b class='flag-5'>器</b> 1

    JVM入門關于GC的擴展知識1

    本章主要是對上一篇文章講的垃圾回收機制的擴展,垃圾回收其實本身是有很多可以優化的點的,本章就進行對這些優化點進行介紹。
    的頭像 發表于 02-10 11:35 ?540次閱讀
    <b class='flag-5'>JVM</b><b class='flag-5'>入門</b><b class='flag-5'>之</b>關于GC的擴展知識1

    JVM入門關于GC的擴展知識2

    本章主要是對上一篇文章講的垃圾回收機制的擴展,垃圾回收其實本身是有很多可以優化的點的,本章就進行對這些優化點進行介紹。
    的頭像 發表于 02-10 11:35 ?547次閱讀
    <b class='flag-5'>JVM</b><b class='flag-5'>入門</b><b class='flag-5'>之</b>關于GC的擴展知識<b class='flag-5'>2</b>

    JVM入門垃圾回收算法

    根據如何判定對象是垃圾垃圾回收算法分為兩類:1、 「引用計數式垃圾收集」 (判定垃圾是通過引用計數
    的頭像 發表于 02-10 11:40 ?779次閱讀
    <b class='flag-5'>JVM</b><b class='flag-5'>入門</b><b class='flag-5'>之</b><b class='flag-5'>垃圾</b><b class='flag-5'>回收</b>算法

    詳細解析JVM中的垃圾回收機制

    Java語言的一大優勢在于其具有自動垃圾回收(Garbage Collection,GC)機制,讓開發者無需關心內存的分配與釋放。
    的頭像 發表于 06-06 16:53 ?1979次閱讀

    垃圾收集JVM參數配置

    本篇文章我們就來給大家介紹垃圾收集JVM 參數配置。 JVM參數有很多,其實我們直接使用默認的JVM參數,不去修改都可以滿足大多數情況
    的頭像 發表于 10-09 16:35 ?529次閱讀
    <b class='flag-5'>垃圾</b>收集<b class='flag-5'>器</b>的<b class='flag-5'>JVM</b>參數配置

    jvm參數的設置和jvm調優

    初始分配的堆內存大小。例如,-Xms512m表示將初始堆大小設置為512MB。 -Xmx:設置JVM最大可分配的堆內存大小。例如,-Xmx2g表示將最大堆大小設置為2GB。 -Xmn:設置年輕代的大小
    的頭像 發表于 12-05 11:36 ?1438次閱讀

    jvm配置的mx

    用于設置JVM的最大堆內存大小,即堆的上限。當堆內存不足時,JVM會觸發垃圾回收機制以釋放內存。如果垃圾
    的頭像 發表于 12-05 14:24 ?680次閱讀

    智能垃圾回收箱控制系統硬件設計

    身份識別;身份驗證后,控制啟動電機打開回收門,持續開啟7秒;用戶投放垃圾后,回收門自動關閉。超聲波模塊檢測桶內垃圾容量,超過設定值時,控制
    的頭像 發表于 04-13 08:10 ?784次閱讀
    智能<b class='flag-5'>垃圾</b><b class='flag-5'>回收</b>箱控制系統硬件設計

    智能垃圾回收箱功能實驗

    過程中,會涉及到回收箱的語音播報模塊,電機驅動模塊,超聲波傳感模塊,垃圾稱重模塊,無線數據傳輸模塊等。2語音播報模塊的試驗語音播報模塊的主要功能是播放“垃圾分類,家園更美
    的頭像 發表于 05-24 08:10 ?415次閱讀
    智能<b class='flag-5'>垃圾</b><b class='flag-5'>回收</b>箱功能實驗

    從原理聊JVM(一):染色標記和垃圾回收算法

    導讀 JAVA簡單易用的特性,能夠讓研發人員在不了解JVM的底層運行機制的情況下依舊能夠編寫出功能完善的代碼。 但是對JVM的理解,是一個程序員普通和優秀的分水嶺。全面地了解JVM的工作原理,能夠
    的頭像 發表于 08-20 15:25 ?190次閱讀
    從原理聊<b class='flag-5'>JVM</b>(一):染色標記和<b class='flag-5'>垃圾</b><b class='flag-5'>回收</b>算法