chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

ZGC的垃圾回收流程

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-11 15:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Java長期支持版本Java11發(fā)布時推出了ZGC, 之后的Java12 -16均有ZGC的一些更新。然而Java17的新特性已經(jīng)敲定,確定沒有關于ZGC的相關更新,也從另一方面說明了至Java17 ZGC已經(jīng)比較穩(wěn)定,可以作為比較穩(wěn)定的GC垃圾回收器。相信未來ZGC必定會成為主流的Java垃圾回收期,那么盤一盤ZGC就是必然的了。

1 ZGC從何而來,有什么好處

1.1 ZGC 的命名

根據(jù)OpenJDK官方網(wǎng)站的說明ZGC其實并沒有什么特殊意義,就是一個名字而已。起初只是為了致敬ZFS 文件系統(tǒng),表示ZGC與ZFS一樣都是革命性的,是一個跨時代的產(chǎn)品。更像是一種崇拜命名法。所以ZGC就是要做革命性的與以往的垃圾回收器性能上有很大提高的GC。

1.2ZGC的好處及特點

ZGC是一個低延遲的可擴展GC,它有以下的目標

  1. 亞毫秒級別的時間延遲 (就是不超過1毫秒。)

    下圖是SPEC做出的測試對比,Java16中ZGC 已經(jīng)可做到亞毫秒級別的延遲了

圖片

2. 暫停時間不會隨著堆的大小、存活集、根集的大小的增加而增加
3. 支持8MB-16TB級別的堆大小

同時ZGC有如下標簽

  • 并發(fā)
  • 基于Region
  • 堆壓縮
  • 彩色指針 (對象使用64的指針,有44位表示對象內(nèi)存地址(如果是8TB , 4TB堆內(nèi)存則會用到43,42位) ,其中有4位用于GC, 其余為備用 ),個別詳情請看 http://hg.openjdk.java.net/jdk/jdk/rev/24f6b0e413a0

圖片

  • 負載屏障
  • NUMA支持 (每個CPU單獨訪問一塊內(nèi)存)

2 ZGC如何使用及調優(yōu)

2.1 ZGC支持那些系統(tǒng)

圖片

直至Java17 ZGC基本支持所有的主流系統(tǒng)。

2.2 ZGC可用的調優(yōu)參數(shù)

盡管ZGC有比較大的改動,但是它仍然可以使用絕大部分的GC參數(shù)。當然它也有其特有的參數(shù)。

2.2.1 ZGC 通用的參數(shù)

-XX:MinHeapSize, -Xms 最小堆大小 (default = 8388608 = 8M)

-XX:InitialHeapSize, -Xms 初始化堆大小 (default = 134217728 = 128M )

-XX:MaxHeapSize, -Xmx 最大堆大小 (default = 2134900736 = 2036M)

-XX:SoftMaxHeapSize JVM堆的最大軟限制 (default = 2134900736 = 2036M)

-XX:ConcGCThreads 并發(fā)GC的線程數(shù)量(default -XX:+ConcGCThreads=1 )

-XX:ParallelGCThreads 設置垃圾回收時的并行GC線程數(shù)量 (default = 4 )

-XX:UseLargePages 使用大頁面內(nèi)存 (dafault false)

-XX:UseTransparentHugePages 使用Transparent大頁面內(nèi)存

-XX:UseNUMA 使用UNMA內(nèi)存分配,可以獲得更好的性能

-XX:SoftRefLRUPolicyMSPerMB 每MB的空閑內(nèi)存空間允許軟引用對象存活時間(default = 1000)

-XX:AllocateHeapAt = 堆分配參數(shù),可以使用非DRAM 內(nèi)存,這個參數(shù)將指向文件系統(tǒng)的文件并使用內(nèi)存映射來達到在備用存儲設備上進行堆分配。

2.2.2 ZGC 特有的參數(shù)

-XX:ZAllocationSpikeTolerance 修正系數(shù),數(shù)值越大,越早觸發(fā)GC (default = 2.000000)

-XX:ZCollectionInterval ZGC發(fā)生的最小時間間隔 ,秒 (default = 0.000000)

-XX:ZFragmentationLimit relocation時,當前region碎片化大于此值,則回收region (default = 25.000000) -XX:ZMarkStackSpaceLimit 指定為標記堆棧分配的最大字節(jié)數(shù) (default = 8589934592 = 8096M)

-XX:ZProactive 是否啟用主動回收 (default true)

-XX:ZUncommit 是否歸還不使用的內(nèi)存給OS(default true)

-XX:ZUncommitDelay 不再使用的內(nèi)存最多延遲多久會歸還給OS (default = 300 s)

2.2.3 ZGC的一些診斷參數(shù)

-XX:+UnlockDiagnosticVMOptions 使用診斷模式,下面的參數(shù)才會起作用

-XX:ZStatisticsInterval 指定統(tǒng)計數(shù)據(jù)輸出之間的時間間隔(秒)。

-XX:ZVerifyForwarding 檢驗轉發(fā)表 -XX:ZVerifyMarking 檢驗標記集

-XX:ZVerifyObjects 檢驗對象 -XX:ZVerifyRoots 檢驗根節(jié)點

-XX:ZVerifyViews 檢驗堆視圖訪問

2.3 啟用ZGC

-XX:+UseZGC 啟用ZGC

-XX:+UseZGC -Xmx-Xlog:gc

-XX:+UseZGC -Xmx-Xlog:gc* 可以打印更詳細的GC日志

2.4 可優(yōu)化參數(shù)詳解

2.4.1 堆參數(shù)的設置

ZGC比較重要的調優(yōu)參數(shù)是設置最大堆內(nèi)存(-Xmx)., ZGC設置一個最大堆內(nèi)存有兩個考量:1.堆可以容納程序的存活集 2.堆中要有足夠的空間允許GC運行時分配.

然而多大內(nèi)存合適這就要根據(jù) 內(nèi)存使用情況以及GC頻率來確定。

2.4.2 并發(fā)GC線程數(shù)設置

另一個調優(yōu)參數(shù)就是并發(fā)GC線程數(shù)量的設置 (-XX:ConcGCThreads=) 。

一般情況下ZGC可以自動選擇一個合適的值,但是也要根據(jù)程序的特點來修改。這個參數(shù)對GC使用CPU的時間影響比較大,如果數(shù)量太大的話,GC線程會占用過多的CPU時間,數(shù)量過少的話垃圾回收有會不及時。通常情況下如果程序的低延遲很重要,那么CPU使用率最好永遠不要超過70%。

2.4.3 將不用的內(nèi)存返回給OS

默認情況下,ZGC會將不使用的內(nèi)存還給OS。可以使用XX:-ZUncommit 取消這一功能。然而如果實際堆內(nèi)存比最小堆內(nèi)存都小的話,肯定不會將不使用的內(nèi)存返還給OS,另外最大堆內(nèi)存(-Xmx)和最小堆內(nèi)存 (-Xms) 的設置相等的話,也不會起作用。

另外可以設置延遲歸還對內(nèi)存的時間 -XX:ZUncommitDelay=

2.4.4 在Linux中開啟大頁支持

在Linux操作系統(tǒng)中,采用內(nèi)存映射來管理內(nèi)存,邏輯頁面映射到對應的物理內(nèi)存,

使用大頁面這個參數(shù)在吞吐量,低延遲,啟動時間方面都有很好的性能提升,可以說除了設置起來有點復雜之外,沒有任何的缺點。設置這個參數(shù)需要Root權限,所以默認沒有開啟。

2.4.5 Linux中使用大透明頁

Linux下的大頁分為兩種標準,大頁(Huge Pages)和透明大頁(Transparent Huge Pages)。大頁是預分配的方式管理,透明大頁是動態(tài)分配的方式。我們可以使用這個參數(shù)-XX:+UseTransparentHugePages 來使用 transparent huge pages .對延遲要求很高的程序而言,這個參數(shù)是不推薦使用的,它可能會造成不必要的延遲峰值。

2.4.6 配置NUMA的支持

NUMA(非一致性內(nèi)存訪問)是Intel為了解決SMP多CPU結構中中線訪問方式中資源競爭和一致性問題引起的。ZGC支持NUMA,此特性是默認開啟的,它可以自主判斷系統(tǒng)是否支持NUMA。如果在支持NUMA的機器上運行,那么將有顯著的性能提升。

3 ZGC垃圾回收流程簡述

3.1 ZGC同G1類似,也將內(nèi)存分為Regions, 叫做ZPages。ZPages可以動態(tài)的創(chuàng)建和銷毀,而且還可以動態(tài)的變化大小,無論怎么變化均為2MB 的倍數(shù)。

ZGC的堆區(qū)可以分為Small(2MB) Medium(32MB) Large(N*2MB)等多個Heap Regions. 其中Medium和Large是連續(xù)分配的內(nèi)存。

ZGC的垃圾回收一般可以分為已下幾個步驟流程。

  1. Pause Mark Start
    這個階段會有 STW ,主要對Root集進行掃描,標記Root集中存活對象,即標記根可達對象。
  2. Concurrent Mark/Remap
    并發(fā)標記階段,根據(jù)上一步標記的根對象去遍歷對象圖,并標記存活對象,主要根據(jù)上一步的Root存活對象標記其對象樹上的對象。
  3. Pause Mark End
    標記結束,此處有 STW ,算再標記階段,由于之前標記的時候程序也在運行,此時會有對象引用的變更,此處會對那些變更引用的對象重新標記一下。此時也會清理一些Root對象以及無效空間。
  4. Concurrent Prepare for Relocate
    并發(fā)標記Region及處理弱根對象 ,標記需要整理的Region集合,并選擇下一步Relocation要用到的Region集合,也會處理不是強根的對象。
  5. Pause Relocate Start
    開始Relocate,此處有 STW ,處理Root對象的指針,此時會將Roots的對象移動到選好的Region集合中。
  6. Concurrent Relocate
    并發(fā)Relocate,此時并發(fā)執(zhí)行,將存活對象移動到上一步選好的新的Region集合中。然后就是清理被釋放的分區(qū),等等工作。

可以看出來ZGC整體使用了標記復制加整理的思想,不過ZGC可以根據(jù)當前的內(nèi)存使用情況,選擇將存活對象整理到一個全新的空Region集合中或者某個存有對象的Region中。由于整個GC的流程中只有三處需要暫停,然而這三處的STW時間都是亞毫秒級別。整個GC的流程延遲總體會小于1ms。

圖片

總結

本片總體概括了介紹了比較成熟的ZGC,介紹了ZGC的一些重要調優(yōu)參數(shù),講解了一下ZGC的垃圾回收流程。相信各位看官也有所收獲。目前ZGC的應用比較少,但隨著Java17的正式推出,那么ZGC必然會逐漸成為主流GC。

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

    關注

    20

    文章

    2989

    瀏覽量

    109529
  • 參數(shù)
    +關注

    關注

    11

    文章

    1867

    瀏覽量

    33063
  • 文件系統(tǒng)

    關注

    0

    文章

    296

    瀏覽量

    20389
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    固態(tài)硬盤垃圾回收方法

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

    基于邏輯區(qū)間熱度的垃圾回收算法

    針對現(xiàn)有的NAND閃存垃圾回收算法中回收性能不高,磨損均衡效果差,并且算法內(nèi)存開銷大的問題,提出了一種基于邏輯區(qū)間熱度的垃圾回收算法。該算法
    發(fā)表于 12-05 18:27 ?0次下載
    基于邏輯區(qū)間熱度的<b class='flag-5'>垃圾</b><b class='flag-5'>回收</b>算法

    電子垃圾回收產(chǎn)業(yè)的隱秘世界

    如今的電腦和手機等電子設備換代頻繁、淘汰迅速,因此電子垃圾回收利用也成了一個在全球蓬勃發(fā)展的產(chǎn)業(yè)。
    發(fā)表于 01-22 19:20 ?1.2w次閱讀

    Jvm垃圾回收機制及性能調優(yōu)實戰(zhàn)

    JVM中自動檢測并移除不再使用的數(shù)據(jù)對象的這種機制稱為:垃圾回收,簡稱GC。JVM通過使用垃圾收集器及使用相應的垃圾回收算法將內(nèi)存中不再被使
    發(fā)表于 04-03 14:31 ?2次下載

    交大發(fā)布可回收垃圾分揀機器人,實現(xiàn)助力全國垃圾分類回收工作

    6月4日消息,交大中英國際低碳學院可回收垃圾分揀機器人,更是打破國外技術壟斷,可實現(xiàn)每小時分揀垃圾5400次,并在大量垃圾中精準識別可回收
    的頭像 發(fā)表于 06-04 14:31 ?3187次閱讀

    智能垃圾回收機器人的應用優(yōu)勢是什么

    為什么需要垃圾回收機器人? 首先,垃圾分類回收是實現(xiàn)地球資源循環(huán)利用至關重要的一環(huán),對于可持續(xù)發(fā)展有重大意義。垃圾分類也是對付
    發(fā)表于 07-22 09:26 ?2298次閱讀

    智能垃圾回收機器人的應用優(yōu)勢有哪些

    為什么需要垃圾回收機器人? 首先,垃圾分類回收是實現(xiàn)地球資源循環(huán)利用至關重要的一環(huán),對于可持續(xù)發(fā)展有重大意義。垃圾分類也是對付
    發(fā)表于 08-17 16:08 ?4561次閱讀

    生活垃圾數(shù)據(jù)化分類回收方法及其回收系統(tǒng)(機械部分)

    一種生活垃圾數(shù)據(jù)化分類回收方法及其回收系統(tǒng)(機械部分)(1).doc 上傳完成 刪除 標題一種生活垃圾數(shù)據(jù)化分類回收方法及其
    發(fā)表于 11-05 18:18 ?0次下載

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

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

    Kubernetes容器垃圾回收的策略

    Kubernetes的垃圾回收由kubelet進行管理,每分鐘會查詢清理一次容器,每五分鐘查詢清理一次鏡像。在kubelet剛啟動時并不會立即進行GC,即第一次進行容器回收為kubelet啟動一分鐘后,第一次進行鏡像
    的頭像 發(fā)表于 08-15 09:16 ?1744次閱讀

    JVM入門之垃圾回收算法

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

    一文詳解ZGC關鍵技術

    ZGC是如何設計怎么達到這個目標的呢?本文將從ZGC算法的關鍵特性入手,通過分析ZGC周期處理過程來理解這些特性,探索ZGC設計思想。
    發(fā)表于 10-23 18:26 ?1012次閱讀
    一文詳解<b class='flag-5'>ZGC</b>關鍵技術

    智能垃圾回收箱及其控制系統(tǒng)

    智能高效遠程控制智能垃圾回收箱本文設計了基于機械傳動、嵌入式系統(tǒng)和物聯(lián)網(wǎng)技術的智能垃圾回收箱及控制系統(tǒng),包括結構、硬件和軟件設計,以及基于機智云后臺服務器的操作系統(tǒng),實現(xiàn)了用戶信息識
    的頭像 發(fā)表于 04-13 08:10 ?1931次閱讀
    智能<b class='flag-5'>垃圾</b><b class='flag-5'>回收</b>箱及其控制系統(tǒng)

    智能垃圾回收箱控制系統(tǒng)硬件設計

    智能高效遠程控制智能垃圾回收箱控制系統(tǒng)硬件部分的選型與設計是整個產(chǎn)品的基礎,所有功能的實現(xiàn)都要圍繞其進行開發(fā)。本章對智能垃圾回收箱控制系統(tǒng)的硬件進行詳細設計。智能
    的頭像 發(fā)表于 04-13 08:10 ?1382次閱讀
    智能<b class='flag-5'>垃圾</b><b class='flag-5'>回收</b>箱控制系統(tǒng)硬件設計

    智能垃圾回收箱功能實驗

    需要系統(tǒng)地介紹智能垃圾回收箱軟件硬件設計完成后的設備運行狀況,包括正常工作和問題調試。同時,也要描述當所有設備正常工作時智能垃圾回收箱的操作流程
    的頭像 發(fā)表于 05-24 08:10 ?889次閱讀
    智能<b class='flag-5'>垃圾</b><b class='flag-5'>回收</b>箱功能實驗