整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          馬士兵云原生架構(gòu)師2023

          馬士兵云原生架構(gòu)師2023

          士兵云原生架構(gòu)師2023

          來百度APP暢享高清圖片

          //下栽のke:chaoxingit.com/2533/

          原生架構(gòu)師:引領(lǐng)企業(yè)數(shù)字化轉(zhuǎn)型的關(guān)鍵角色

          隨著云計算的普及和技術(shù)的快速發(fā)展,云原生架構(gòu)師已成為企業(yè)數(shù)字化轉(zhuǎn)型中的關(guān)鍵角色。云原生架構(gòu)師負(fù)責(zé)設(shè)計、構(gòu)建和維護云原生應(yīng)用程序,這些應(yīng)用程序以云為基礎(chǔ),具有可擴展性、彈性、敏捷性和安全性。本文將探討云原生架構(gòu)師的重要性、職責(zé)和工作方法。

          一、云原生架構(gòu)師的重要性

          云原生架構(gòu)師在企業(yè)數(shù)字化轉(zhuǎn)型中發(fā)揮著至關(guān)重要的作用。首先,他們能夠幫助企業(yè)充分利用云計算的優(yōu)勢,提高IT效率和降低成本。其次,通過設(shè)計云原生應(yīng)用程序,架構(gòu)師能夠提高應(yīng)用程序的可擴展性、彈性、敏捷性和安全性,以滿足企業(yè)不斷變化的需求和市場變化。最后,云原生架構(gòu)師能夠為企業(yè)提供靈活、可靠和安全的IT基礎(chǔ)設(shè)施,確保企業(yè)業(yè)務(wù)的高效運行。

          二、云原生架構(gòu)師的職責(zé)

          作為云原生架構(gòu)師,你需要承擔(dān)以下職責(zé):

          1. 設(shè)計和構(gòu)建云原生應(yīng)用程序:你需要了解應(yīng)用程序的需求和目標(biāo),設(shè)計出符合企業(yè)業(yè)務(wù)需求的云原生應(yīng)用程序,并確保其可擴展性、彈性、敏捷性和安全性。
          2. 優(yōu)化技術(shù)選型:你需要根據(jù)應(yīng)用程序的需求和企業(yè)的實際情況,選擇適合的技術(shù)棧和工具,以確保應(yīng)用程序的性能和穩(wěn)定性。
          3. 參與團隊溝通和協(xié)作:你需要與開發(fā)團隊、產(chǎn)品團隊和設(shè)計團隊緊密合作,確保云原生應(yīng)用程序的設(shè)計和開發(fā)符合整體項目的要求和目標(biāo)。
          4. 監(jiān)控和分析:你需要定期監(jiān)控應(yīng)用程序的性能和安全性,分析潛在的問題和風(fēng)險,并及時采取相應(yīng)的措施。

          三、工作方法和技能要求

          作為云原生架構(gòu)師,你需要具備以下技能和方法:

          1. 熟練掌握Web開發(fā)技術(shù):你需要熟悉HTML、CSS、JavaScript等Web開發(fā)技術(shù),以及相關(guān)的框架和庫,如React、Vue等。
          2. 深入了解云原生架構(gòu):你需要了解云原生架構(gòu)的基本概念和方法,包括微服務(wù)架構(gòu)、容器化等技術(shù),以及如何設(shè)計和優(yōu)化云原生應(yīng)用程序的性能、可擴展性和可維護性。
          3. 良好的團隊協(xié)作能力:你需要與開發(fā)團隊、產(chǎn)品團隊和設(shè)計團隊緊密合作,確保云原生應(yīng)用程序的設(shè)計和開發(fā)符合整體項目的要求和目標(biāo)。
          4. 深入了解用戶體驗和交互設(shè)計:你需要了解用戶體驗和交互設(shè)計的基本原則,以確保你的云原生應(yīng)用程序符合用戶需求和期望,并提供良好的用戶體驗。
          5. 良好的問題解決能力:你需要能夠解決云原生開發(fā)中的各種問題,并能夠做出正確的決策,以確保你的應(yīng)用程序能夠滿足不斷變化的市場需求。

          四、云原生架構(gòu)師如何提升自己的技能

          云原生架構(gòu)師需要不斷學(xué)習(xí)和適應(yīng)新技術(shù)、工具和最佳實踐,以保持其技能的先進性和競爭力。下面是一些提升技能的方法:

          1. 持續(xù)學(xué)習(xí)

          • 參加在線課程和認(rèn)證: 許多組織和平臺(如Linux Foundation、CNCF、Coursera、Udemy等)提供云原生技術(shù)的在線課程和認(rèn)證,涵蓋Docker、Kubernetes、Istio、Prometheus等。
          • 閱讀官方文檔和書籍: 利用官方文檔深入了解各種云原生技術(shù)。閱讀相關(guān)書籍也可以幫助你從基礎(chǔ)到高級,全面掌握知識。

          2. 實踐和實驗

          • 動手實踐: 實際操作是學(xué)習(xí)技術(shù)的最佳方式。可以通過構(gòu)建自己的項目或貢獻開源項目來實踐你學(xué)到的知識。
          • 使用模擬項目: 嘗試在云平臺上部署真實應(yīng)用程序,使用Kubernetes等工具來管理這些應(yīng)用。

          3. 參與社區(qū)和網(wǎng)絡(luò)

          • 參加Meetup和技術(shù)會議: 加入本地或在線的云原生技術(shù)Meetup,參加如KubeCon等技術(shù)會議,這些都是學(xué)習(xí)最新技術(shù)趨勢、最佳實踐和網(wǎng)絡(luò)的好機會。
          • 加入在線論壇和社交媒體群組: 如GitHub、Stack Overflow、LinkedIn、Twitter等,這些平臺上有豐富的討論和資源。

          4. 關(guān)注行業(yè)趨勢

          • 閱讀技術(shù)博客和案例研究: 訂閱云原生領(lǐng)域的博客,閱讀企業(yè)的案例研究,了解他們是如何解決實際問題的。
          • 了解新工具和技術(shù): 云原生領(lǐng)域不斷發(fā)展,新工具和技術(shù)層出不窮。跟蹤并學(xué)習(xí)這些新技術(shù)可以幫助你保持領(lǐng)先。

          5. 深化專業(yè)領(lǐng)域知識

          • 專注于特定領(lǐng)域: 盡管云原生領(lǐng)域很廣泛,但深入專研某一特定領(lǐng)域(如容器編排、服務(wù)網(wǎng)格、持續(xù)集成/持續(xù)部署CI/CD、監(jiān)控和日志等)可以使你成為該領(lǐng)域的專家。
          • 參與專業(yè)培訓(xùn)和研討會: 報名參加專業(yè)的培訓(xùn)課程和研討會,可以幫助你在特定領(lǐng)域獲得更深入的知識。

          五。云原生架構(gòu)師的職業(yè)發(fā)展

          云原生架構(gòu)師的職業(yè)發(fā)展前景廣闊。隨著企業(yè)數(shù)字化轉(zhuǎn)型的加速,對云原生架構(gòu)師的需求將不斷增加。此外,云原生架構(gòu)師還可以通過不斷學(xué)習(xí)和掌握新的技術(shù)和工具,不斷提升自己的專業(yè)水平。

          六、總結(jié)

          云原生架構(gòu)師是企業(yè)數(shù)字化轉(zhuǎn)型中的關(guān)鍵角色,他們負(fù)責(zé)設(shè)計和構(gòu)建高效、可擴展和可維護的前端應(yīng)用程序。作為云原生架構(gòu)師,需要熟練掌握Web開發(fā)技術(shù)、深入了解云原生架構(gòu)、良好的團隊協(xié)作能力、深入了解用戶體驗和交互設(shè)計,以及良好的問題解決能力。通過不斷學(xué)習(xí)和實踐,你將能夠成為一名出色的云原生架構(gòu)師,為企業(yè)數(shù)字化轉(zhuǎn)型做出重要貢獻。

          七、未來展望

          隨著云計算和技術(shù)的不斷發(fā)展,云原生架構(gòu)師的角色將更加重要。未來,云原生架構(gòu)師需要不斷關(guān)注行業(yè)趨勢和技術(shù)發(fā)展,掌握新的技術(shù)和工具,以應(yīng)對不斷變化的市場需求和挑戰(zhàn)。此外,他們還需要與跨職能團隊緊密合作,共同推動企業(yè)數(shù)字化轉(zhuǎn)型的進程。

          總之,云原生架構(gòu)師是引領(lǐng)企業(yè)數(shù)字化轉(zhuǎn)型的關(guān)鍵角色,他們需要具備廣泛的技能和經(jīng)驗,以及對云原生架構(gòu)和用戶體驗的深入了解。通過不斷學(xué)習(xí)和實踐,他們將為企業(yè)數(shù)字化轉(zhuǎn)型做出重要貢獻,并獲得良好的職業(yè)發(fā)展前景。

          中軟卓越了解,隨著“互聯(lián)網(wǎng)+”和“中國制造2025”等政策紅利不斷釋放,企業(yè)對網(wǎng)絡(luò)技術(shù)人才的需求正呈快速上升趨勢,互聯(lián)網(wǎng)、金融、電子機械等領(lǐng)域的高端人才早已供不應(yīng)求。目前近百家互聯(lián)網(wǎng)、金融等企業(yè)參會,提供了包括軟件工程師、研發(fā)員多個職位,起步年薪均在20萬至50萬元之間。這對于不少從事IT行業(yè)的人才來說,的確是個不小的吸引力。然而對于曾畢業(yè)于清華計算系的高材生馬士兵來說,這是給新人的機會,如何盡最大的努力幫助他們完美融入IT領(lǐng)域,已經(jīng)成為他當(dāng)下最重視的問題之一。

          馬士兵出生于河北辛集,早在1994年-1999年,他以優(yōu)異的成績考取了中國最著名的學(xué)府清華大學(xué),畢業(yè)以后,他從程序員做起,繼而成為編程培訓(xùn)師。馬士兵先后在IBM、澳大利亞GoldenTech工作多年,歷任程序員、TeamLeader、ProjectManager、CTO等職位,薪水也從萬元突破百萬,在他接手過的十幾個大型項目當(dāng)中,憑借天賦和創(chuàng)新能力,讓其收獲了業(yè)界的一致好評。其中經(jīng)他參與的項目有遠(yuǎn)程教學(xué)管理平臺、遠(yuǎn)程實時教學(xué)平臺、遠(yuǎn)程視頻監(jiān)控系統(tǒng)、視頻會議系統(tǒng)、電信級VOD運營與計費系統(tǒng)、通用寬帶計費系統(tǒng)、農(nóng)行網(wǎng)上銀行系統(tǒng)、通用負(fù)載均衡與內(nèi)容分發(fā)產(chǎn)品、專用數(shù)據(jù)庫軟件(底層)、ERP庫存系統(tǒng)、NIO網(wǎng)絡(luò)游戲服務(wù)器后臺框架,這些說出來赫赫有名的項目,不僅因他的加入而更好更快的完成,同時馬士兵也因這些項目在業(yè)界名聲大振!

          如果在跨國公司、世界500強企業(yè)一直這么工作下去,憑他的實力成為亞太地區(qū)負(fù)責(zé)人也是可以想象的。然而就是這么事業(yè)中天的他,卻突然辭職,做起了教育,這讓他周圍的親人朋友感到意外。

          2016年,他創(chuàng)立了馬士兵(北京)教育科技有限公司,并親自出任CEO。與此同時, 馬士兵還一手打造了TAC教學(xué)模式,并將將項目為王的理念融入到教學(xué)中,他所講授的坦克大戰(zhàn)項目已經(jīng)被很多學(xué)員列為經(jīng)典,在這個項目中他創(chuàng)新性的將設(shè)計模式,網(wǎng)絡(luò)游戲無縫融合到一起。他的設(shè)計模式系列教程指導(dǎo)著很多初級程序員走向架構(gòu)師的崗位。

          不少IT學(xué)子都對馬士兵老師敬愛有加,在知乎上馬士兵也相當(dāng)有“影響力”,大家說他講得課深入淺出,讓人能聽明白,那些專業(yè)術(shù)語在馬老師嘴里說出來,就變得親切易懂。

          是的,馬士兵秉承對編程教育行業(yè)的熱愛,并執(zhí)著于教學(xué)方法的創(chuàng)新,在中國科學(xué)院研究生院、北京交通大學(xué)、華中科技大學(xué)傳授軟件開發(fā)課程,并耗時數(shù)年,創(chuàng)建了國內(nèi)獨一無二的JAVA四合一全棧開發(fā)課程,這些課程就是為了幫助初級編成人員更好的深造自己。

          一方面創(chuàng)業(yè),一方面散播知識,馬士兵馬不停蹄的躬耕在互聯(lián)網(wǎng)領(lǐng)域里,他用身體力行的方式告訴我們,與其做一份職業(yè),不如將其變成事業(yè),在幫助年輕人的方式方法上“授之以魚不如授之以漁”,馬士兵如此說,亦是如此做。

          文章來源:http://www.whzrgj.com/hynews/2791.html

          Garbage Collector,也稱為ZGC,在 jdk 11 中引入的一種可擴展的低延遲垃圾收集器,在 jdk 15 中發(fā)布穩(wěn)定版。在旨在滿足以下目標(biāo):

          • < 1ms 最大暫停時間(jdk < 16 是 10ms,jdk >=16 是 <1ms )。
          • 暫停時間不會隨著堆、live-set 或 root-set 的大小而增加。
          • 使用內(nèi)存大小從 8MB 到16TB 地堆。

          ZGC 具有以下特征:

          • 并發(fā)
          • 基于 region
          • 壓縮
          • NUMA 感知
          • 使用彩色指針
          • 使用負(fù)載屏障

          ZGC 的核心是一個并發(fā)垃圾收集器,這意味著所有繁重的工作都在Java 線程繼續(xù)執(zhí)行的同時完成。這極大地限制了垃圾收集對應(yīng)用程序響應(yīng)時間的影響。

          ZGC 特征

          ZGC 收集器是一款基于 Region 內(nèi)存布局的,(暫時) 不設(shè)分代的,使用了讀屏障、染色指針和內(nèi)存多重映射等技術(shù)來實現(xiàn)可并發(fā)的標(biāo)記-整理算法的,以低延遲為首要目標(biāo)的一款垃圾收集器。

          內(nèi)存布局

          ZGC 沒有分代的概念

          ZGC 的內(nèi)存布局說起。與 Shenandoah 和 G1一樣,ZGC 也采用基于 Region 的堆內(nèi)存布局,但與它們不同的是 , ZGC 的 Region 具 有 動 態(tài) 性 (動態(tài)創(chuàng)建和銷毀 , 以及動態(tài)的區(qū)域容量大小)。在 x64硬件平臺下 , ZGC 的 Region 可以具有大、中、小三類容量(如下圖所示):

          • 小型 Region (Small Region ): 容量固定為 2M, 存放小于 256K 的對象。
          • 中興 Region (Medium Region): 容量固定為 32M,放置大于等于256K但小于4M的對象。
          • 大型 Region (Large Region): 容量不固定,可以動態(tài)變化,但必須為2MB 的整數(shù)倍,用于放置 4MB或以上的大對象。

          NUMA-aware

          NUMA 對應(yīng)的有 NMA 、UMA 即 Uniform Memory Access Architecture, NUMA 就是 Non Uniform Memory Access Architecture. UMA 表示內(nèi)存只有一塊,所有的 CUU 都要去訪問這些內(nèi)存,那么會存在競爭問題(競爭內(nèi)存總線訪問權(quán)),有競爭就要去加鎖,有鎖效率就會受到影響,而且 CPU 核心數(shù)越多,競爭就越激烈。NUMA 的話每個 CPU 對應(yīng)有一個內(nèi)存塊,且這塊內(nèi)存在主板上離這個 CPU 是最近的,每個 CPU 優(yōu)先訪問這塊內(nèi)存,那效率就自然提高了。

          服務(wù)器的 NUMA 架構(gòu)在中大型系統(tǒng)上非常流行,也就是高性能的解決方案,尤其在系統(tǒng)延遲方面表現(xiàn)非常優(yōu)秀,ZGC 是能自動感知 NUMA 架構(gòu)并且充分利用 NUMA 架構(gòu)的特征。

          染色指針(Colored Pointer)

          Colored Pointer, 即染色指針,如圖所示, ZGC 的核心設(shè)計之一。以前的垃圾收集器的 GC 信息都保存在對象口中,而 ZGC 的 GC 信息保存在指針中(直接把標(biāo)記信息記錄在對象的引用指針上)。

          每個對象有一個64位指針,這64位被分為:

          • 18位:預(yù)留給以后使用。
          • 1位:Finalizable標(biāo)識,此位與并發(fā)引用處理有關(guān),它表示這個對象只能通過finalizer才能訪問(finalizer:object基類的一個空方法,如果被重寫則會在GC之前調(diào)用該方法,該方法會且只會被調(diào)用一次)。
          • 1位:Remapped 標(biāo)識,設(shè)置此位的值后,對象未指向relocation set中(relocation set表示需要GC的Region集合)。
          • 1位:Marked1標(biāo)識。
          • 1位:Marked0標(biāo)識,和上面的Marked1都是標(biāo)記對象用于輔助GC。
          • 42位:對象的地址(所以它可以支持2^42=4T內(nèi)存):

          為什么會有兩個 mark 標(biāo)記?

          每一個GC周期開始時,會交換使用的標(biāo)記位,使上次GC周期中修正的已標(biāo)記狀態(tài)失效,所有引用都變成未標(biāo)記。GC周期1:使用mark0, 則周期結(jié)束所有引用mark標(biāo)記都會成為 01。GC周期2:使用mark1, 與周期1相同,所有的mark標(biāo)記都會成為 10。

          ZGC不能做指針壓縮?

          指針壓縮指的是壓縮為32位,尋址位數(shù)不能超過35,也就是JVM內(nèi)存最大為32G(2^35=32GB),這里的尋址位數(shù)已經(jīng)達到了42位。

          顏色指針的三大優(yōu)勢 ?

          1. 在一個Region中的所有存活對象都被移走后(復(fù)制走后),這個Region就可以被立即釋放掉,因為它還有轉(zhuǎn)發(fā)表記錄著原始地址和新地址,這樣的話,理論上,只要還有一個Region對象空閑,ZGC就能完成垃圾收集。
          2. 顏色指針有指針的“自愈”(Self-Healing)能力,這樣子就減少了寫屏障(例如三色標(biāo)記中的增量更新或原始快照),只需要一個讀屏障就可以解決問題,減少了內(nèi)存屏障的使用數(shù)量。
          3. 顏色指針有著極大的擴展性,因為還有18位未使用,這樣更有利于后續(xù)功能的擴展。

          多重映射尋址

          不同的虛擬機內(nèi)存到物理內(nèi)存的轉(zhuǎn)換關(guān)系可以在硬件層面,操作系統(tǒng)層面或者軟件層面來實現(xiàn)。在 Linux 平臺上 ZGC 采用了多重映射(Mult-Mapping)將多個不同的虛擬內(nèi)存地址映射到同一個物理內(nèi)存地址上,著是一種多對一映射,一位著 ZGC 在虛擬內(nèi)中看到的地址空間要比時機的堆內(nèi)存容量來得更大。把染色指針中的標(biāo)志位看作是地址分段符,那只要將這些不同的地址分段符都映射到同一個福利內(nèi)空間,經(jīng)過多重映射轉(zhuǎn)換后,就可以直接使用染色指針進行尋址了,如下圖所示:

          多重映射技術(shù)確實可能帶來一些諸如復(fù)制大對象時會更容易這樣額外的好處,但是從源頭上來說,ZGC 的多重映射只是采用染色指針的衍生品,并不是為了專門的為實現(xiàn)其他某種特征需求而做的。

          讀屏障

          ZGC采用的讀屏障的方式來修正指針引用,由于ZGC采用的是復(fù)制整理的方式進行GC,很有可能在對象的位置改變之后指針位置尚未更新時程序調(diào)用了該對象,那么此時在程序需要并行的獲取該對象的引用時,ZGC就會對該對象的指針進行讀取,判斷Remapped標(biāo)識,如果標(biāo)識為該對象位于本次需要清理的region區(qū)中,該對象則會有內(nèi)存地址變化,會在指針中將新的引用地址替換原有對象的引用地址,然后再進行返回。

          如此,使用讀屏障便解決了并發(fā)GC的對象讀取問題。

          Object o=obj.fieldA;    // Loading an object reference from heap
          <load barrier needed here>
          Object p=o;             // No barrier, not a load from heap
          o.doSomething();          // No barrier, not a load from heap
          int i=obj.fieldB;       // No barrier, not an object reference
          
          

          LoadBarriers的存在,所以會導(dǎo)致配置ZGC的應(yīng)用的吞吐量會變低。官方的測試數(shù)據(jù)是需要多出額外4%的開銷:

          ZGC 工作過程

          ZGC 的運作過程主要可以分為以下四個階段:

          ZGC 處理過程.png

          并發(fā)標(biāo)記(Concurrent Mark):與G1、Shenandoah一樣,并發(fā)標(biāo)記是遍歷對象圖做可達性分析的 階段,前后也要經(jīng)過類似于G1、Shenandoah的初始標(biāo)記、最終標(biāo)記(盡管ZGC中的名字不叫這些)的短暫停頓,而且這些停頓階段所做的事情在目標(biāo)上也是相類似的。與G1、Shenandoah不同的是,ZGC的標(biāo)記是在指針上而不是在對象上進行的,標(biāo)記階段會更新染色指針中的Marked 0、Marked 1標(biāo)志位。

          并發(fā)預(yù)備重分配(Concurrent Prepare for Relocate):這個階段需要根據(jù)特定的查詢條件統(tǒng)計得出本次收集過程要清理哪些Region,將這些Region組成重分配集(Relocation Set)。重分配集與G1收集器的回收集(Collection Set)還是有區(qū)別的,ZGC劃分Region的目的并非為了像G1那樣做收益優(yōu)先的增量回收。相反,ZGC每次回收都會掃描所有的Region,用范圍更大的掃描成本換取省去G1中記憶集的維護成本。因此,ZGC的重分配集只是決定了里面的存活對象會被重新復(fù)制到其他的Region中,里面 的Region會被釋放,而并不能說回收行為就只是針對這個集合里面的Region進行,因為標(biāo)記過程是針對全堆的。此外,在JDK 12的ZGC中開始支持的類卸載以及弱引用的處理,也是在這個階段中完成的。

          并發(fā)重分配(Concurrent Relocate):重分配是ZGC執(zhí)行過程中的核心階段,這個過程要把重分配集中的存活對象復(fù)制到新的Region上,并為重分配集中的每個Region維護一個轉(zhuǎn)發(fā)表(Forward Table),記錄從舊對象到新對象的轉(zhuǎn)向關(guān)系。得益于染色指針的支持,ZGC收集器能僅從引用上就明確得知一個對象是否處于重分配集之中,如果用戶線程此時并發(fā)訪問了位于重分配集中的對象,這次訪問將會被預(yù)置的內(nèi)存屏障所截獲,然后立即根據(jù)Region上的轉(zhuǎn)發(fā)表記錄將訪問轉(zhuǎn)發(fā)到新復(fù)制的對象上,并同時修正更新該引用的值,使其直接指向新對象,ZGC將這種行為稱為指針的“自愈”(Self-Healing)能力。

          這樣做的好處是只有第一次訪問舊對象會陷入轉(zhuǎn)發(fā),也就是只慢一次,對比 Shenandoah 的 Brooks 轉(zhuǎn)發(fā)指針,那是每次對象訪問都必須付出的固定開銷,簡單地說就是每 次都慢,因此 ZGC 對用戶程序的運行時負(fù)載要 Shenandoah 來得更低一些。還有另外一個直接的好處是由于染色指針的存在,一旦重分配集中某個 Region 的存活對象都復(fù)制完畢后,這個 Region 就可以立即釋放用于新對象的分配(但是轉(zhuǎn)發(fā)表還得留著不能釋放掉),哪怕堆中還有很多指向這個對象的未更新指針也沒有關(guān)系,這些舊指針一旦被使用,它們都是可以自愈的。

          并發(fā)重映射(Concurrent Remap):重映射所做的就是修正整個堆中指向重分配集中舊對象的所有引用,這一點從目標(biāo)角度看是與 Shenandoah 并發(fā)引用更新階段一樣的,但是 ZGC 的并發(fā)重映射并不是一個必須要“迫切”去完成的任務(wù),因為前面說過,即使是舊引用,它也是可以自愈的,最多只是第一次使用時多一次轉(zhuǎn)發(fā)和修正操作。重映射清理這些舊引用的主要目的是為了不變慢(還有清理結(jié)束后可以釋放轉(zhuǎn)發(fā)表這樣的附帶收益),所以說這并不是很“迫切”。因此,ZGC 很巧妙地把并發(fā)重映射階段要做的工作,合并到了下一次垃圾收集循環(huán)中的并發(fā)標(biāo)記階段里去完成,反正它們都是要遍歷所有對象的,這樣合并就節(jié)省了一次遍歷對象的開銷。一旦所有指針都被修正之后,原來記錄新舊對象關(guān)系的轉(zhuǎn)發(fā)表就可以釋放掉了。

          ZGC 核心參數(shù)

          ZGC 觸發(fā)時機

          ZGC 中的幾種觸發(fā) GC場景:

          • 定時觸發(fā): 默認(rèn)為不使用,可以通過 ZCollectionInterval 參數(shù)配置。GC 日志中的關(guān)鍵字 “Timer”。
          • 預(yù)熱觸發(fā): 最多三次,在堆內(nèi)存空間達到 10%、20%、30% 時機觸發(fā)、主要是通過 GC 的時間、為其他的 GC 觸發(fā)準(zhǔn)備。GC日志關(guān)鍵字 “Warmup”。
          • 分配速率: 基于正態(tài)分布統(tǒng)計,計算內(nèi)存 99% 可能的最大分配速率,以及此速率下內(nèi)存將要耗盡的時間點,在耗盡之前觸發(fā) GC (耗盡時間,一次 GC 最大持續(xù)時間-一次 GC 檢測周期時間)。GC日志關(guān)鍵字 “Allocation Rate”。
          • 主動觸發(fā): (默認(rèn)開啟,可以通過 ZProactictive 參數(shù)配置)距上一次 GC 堆內(nèi)存增長 10%,超過 5 分鐘時,對比上次 GC的間隔時間限(一次 GC 最大持續(xù)時間),超過則觸發(fā)。GC 日志關(guān)鍵字 “Proactive”。
          • 元數(shù)據(jù)分配觸發(fā): 元數(shù)據(jù)區(qū)不足導(dǎo)致,GC 日志關(guān)鍵中是 “Metadata GC Threshold”
          • 直接觸發(fā): 代碼中顯示調(diào)用 System.gc() 觸發(fā),GC 日志關(guān)鍵字是 “System.gc()”。
          • 阻塞內(nèi)存分配請求觸發(fā): 垃圾對象來不及揮手,占滿整個堆空間,導(dǎo)致部分線程阻塞,GC 日志關(guān)鍵字是 “Allocation Stall”。

          ZGC 日志分析

          我們將對下面的一個簡單的程序做一個 ZGC LOG 做一個分析,下面是具體的代碼和分析。

          示例代碼

          下面是一段簡單的代碼:

          /**
           * VM Args:-XX:+UseZGC -Xmx8m -Xlog:gc*
           */
          public class HeapOOM {
          
              public static void main(String[] args) {
                  List<byte[]> list=new ArrayList<>();
                  while (true) {
                      list.add(new byte[2048]);
                  }
              }
          }
          
          

          GC 日志分析

          GC 日志如下(運行環(huán)境 JDK 17),舉個例子:GC 日志中每一行都標(biāo)注了對 GC 過程中的信息,關(guān)鍵信息如下:

          • Start: 開始GC,并標(biāo)明的GC觸發(fā)的原因。上圖中觸發(fā)原因是自適應(yīng)算法。
          • Phase-Pause Mark Start: 初始標(biāo)記,會STW。
          • Phase-Pause Mark End: 再次標(biāo)記,會STW。
          • Phase-Pause Relocate Start: 初始轉(zhuǎn)移,會STW。

          Heap信息:記錄了GC過程中Mark、Relocate前后的堆大小變化狀況。High和Low記錄了其中的最大值和最小值,我們一般關(guān)注High中Used的值,如果達到100%,在GC過程中一定存在內(nèi)存分配不足的情況,需要調(diào)整GC的觸發(fā)時機,更早或者更快地進行GC。

          GC信息統(tǒng)計:可以定時的打印垃圾收集信息,觀察10秒內(nèi)、10分鐘內(nèi)、10個小時內(nèi),從啟動到現(xiàn)在的所有統(tǒng)計信息。利用這些統(tǒng)計信息,可以排查定位一些異常點。

          ZGC 總結(jié)

          本文主要是從概念上描述了 ZGC 的特征和工作過程。

          目前大多數(shù)互聯(lián)網(wǎng)公司還是使用 jdk 8、jdk 11 主流使用的還是 ParNew + CMS 組合或者 G1。

          對于我們一線 Java 開發(fā)者應(yīng)該具備新技術(shù)的學(xué)習(xí)熱情和關(guān)注度,才能在激烈的社會競爭中保持優(yōu)勢。

          原文 https://developer.51cto.com/article/706899.html


          主站蜘蛛池模板: 海角国精产品一区一区三区糖心| 精品黑人一区二区三区| 色一乱一伦一图一区二区精品| 无码日韩精品一区二区三区免费 | 激情综合丝袜美女一区二区| 国产成人无码AV一区二区在线观看 | 久久se精品一区二区国产| 国产精品高清一区二区人妖| 国产精品免费大片一区二区| 国产肥熟女视频一区二区三区| 精品无码AV一区二区三区不卡| 超清无码一区二区三区| AV怡红院一区二区三区| 亚洲性日韩精品一区二区三区| 性色av无码免费一区二区三区| 国产福利一区二区三区| 亚洲国产高清在线精品一区| 久久久久一区二区三区| 亚欧色一区W666天堂| 无码国产精品一区二区免费模式| 日韩精品人妻一区二区中文八零| 亚洲男人的天堂一区二区| 久久免费视频一区| 丝袜无码一区二区三区| 久久亚洲国产精品一区二区| 国产午夜精品免费一区二区三区| 亚洲乱码一区二区三区在线观看| 伊人久久精品无码av一区| 国产无线乱码一区二三区| 人妻无码一区二区三区AV| 蜜桃臀无码内射一区二区三区| 久久久综合亚洲色一区二区三区| 色妞色视频一区二区三区四区| 中文字幕一区二区三区久久网站 | 精品视频无码一区二区三区| 麻豆AV一区二区三区久久| 亚洲熟女综合一区二区三区| 久久青青草原一区二区| 无码人妻久久一区二区三区蜜桃 | 国产一区二区内射最近更新| 精品一区二区三区在线观看视频|