版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第28講|談?wù)勀愕腉C調(diào)優(yōu)思路2018-07-10第28第28|談?wù)勀愕腉C調(diào)優(yōu)思路朗讀人 14′35′′|我發(fā)現(xiàn),目前不少外部資料對(duì)G1的介紹大多還停留在JDK7或更早期的實(shí)現(xiàn),很多結(jié)論已經(jīng)存在較大偏差,甚至一些過去的GC選項(xiàng)已經(jīng)不再推薦使用。所以,今天我會(huì)選取新版JDK中G1GCGCGCGC相關(guān)的場(chǎng)景,例如,OOMGC相關(guān)參數(shù)有關(guān);或者,應(yīng)用啟動(dòng)速度方面的需求,GC也會(huì)是個(gè)考慮的方面。望GC暫停盡量控制在200ms以內(nèi),并且保證一定標(biāo)準(zhǔn)的吞吐量。JVMGCGCjstatGCGC的診斷工具等。例如,通過追蹤GC日志,就可以查找是不是GC在特定時(shí)間發(fā)生了長(zhǎng)時(shí)間MinorGCMixedGC型,如CMS和G1都是更側(cè)重于低延遲的GC選項(xiàng)。今天的GC調(diào)優(yōu)問題是JVM調(diào)優(yōu)的一個(gè)基礎(chǔ)方面,很多JVM調(diào)優(yōu)需求,最終都會(huì)GCJVMGC成為新版JDK的默認(rèn)選擇,所以值得你去深入理解。因?yàn)镚1GC一直處在快速發(fā)展之中,我會(huì)側(cè)重它的演進(jìn)變化,尤其是行為和配置相關(guān)的變G1GC部是類似棋盤狀的一個(gè)個(gè)region組成,請(qǐng)參考下面的示意圖。region1M32M2的冪值數(shù),JVM會(huì)盡量劃分2048個(gè)左右、同等大小的region,這點(diǎn)可以從源碼heapRegionBounds.hpp中看到。當(dāng)然這個(gè)數(shù)字既可以手動(dòng)調(diào)整,G1也會(huì)根據(jù)堆大小自動(dòng)進(jìn)行調(diào)整。在G1實(shí)現(xiàn)中,年代是個(gè)邏輯概念,具體體現(xiàn)在,一部分region是作為Eden,一部分作為SurvivorOldregion,G1region50(在應(yīng)用中,通常是byte或char數(shù)組)歸類為Humongous對(duì)象,并放置在相應(yīng)的region中。邏輯上,Humongousregion算是老年代的一部分,因?yàn)檫@樣的大對(duì)象是很昂貴的操作,并不適合GC的算法。regionregion,region連續(xù)空間,這是一個(gè)長(zhǎng)久存在的情況,請(qǐng)參考OpenJDK社區(qū)的討論。這本質(zhì)也可以看作是JVM的bug,盡管解決辦法也非常簡(jiǎn)單,直接設(shè)置較大的region大小,參數(shù)如下:-XX:G1HeapRegionSize=<N,-XX:G1HeapRegionSize=<N,例如GC,G1在,G1采用的仍然是并行的算法,所以同樣會(huì)發(fā)生Stop-The-World的暫停在老年代,大部分情況下都是并發(fā)標(biāo)記,而整理(Compact)則是和GC時(shí)捎帶進(jìn)我在上一講曾經(jīng)介紹過,習(xí)慣上人們喜歡把GC(YoungGC)叫作MinorGC,老年代GC叫作MajorGC,區(qū)別于整體性的FullGC。但是現(xiàn)代GC中,這種概念已經(jīng)不再準(zhǔn)確,對(duì)于G1來說:MinorGCRememberedSet老年代回收,則是依靠MixedGC。并發(fā)標(biāo)記結(jié)束后,JVM就有足夠的信息進(jìn)行收集,MixedGC不僅同時(shí)會(huì)清理Eden、Survivor區(qū)域,而且還會(huì)清理部分Old區(qū)域??梢酝ㄟ^設(shè)置下面的參數(shù),指定觸發(fā)閾值,并且設(shè)定最多被包含在一次MixedGC中的region比逸失敗等情況下,就會(huì)觸發(fā)FullGC。G1相關(guān)概念非常多,有一個(gè)重點(diǎn)就是RememberedSet,用于記錄和region之間對(duì)象的關(guān)系。為什么需要這么做呢?試想,GC是算法,也就是說,類似對(duì)象從Eden或者Survivor到to區(qū)域的“移動(dòng)”,其實(shí)是“”,本質(zhì)上是一個(gè)新的對(duì)象。在這個(gè)過程中,需要必須保證老年代到的跨區(qū)仍然有效。下面的示意圖說明了相關(guān)設(shè)計(jì)。G1RememberedSet,例如,它通常約占用Heap20%或更高,這可是非??捎^的比例。并且,我們進(jìn)行對(duì)象的時(shí)候,因?yàn)樾枰獟呙韬透腃ardTable的描述G1內(nèi)部的資料很多,我就不重復(fù)了,如果你想了解內(nèi)部結(jié)構(gòu)和算法等,我建議參考一些具體的介紹,書籍方面我推 Hunt等撰寫的《JavaPerformanceCompanion》G1上面提到了Humongous對(duì)象的分配和回收,這是很多內(nèi)存問題的來源,Humongous中,Humongous對(duì)象回收采取了更加激進(jìn)的策略。我們知道G1記錄了老年代region間對(duì)象,Humongous對(duì)象數(shù)量有限,所以能夠快速的知道是否有老年代對(duì)象它。如果沒有,能夠它被回收的唯一可能,就是是否有對(duì)象了它,但這個(gè)信息是可以在YoungGC時(shí)就知道的,所以完全可以在YoungGCHumongous我在專欄第5講,提到了在8u20以后字符串排重的特性,在收集過程中,G1會(huì)把新YoungGC(STW)將內(nèi)部數(shù)據(jù)(char數(shù)組,JDK9以后是byte數(shù)組)一致的字符串進(jìn)行排重,也就是將其同一個(gè)數(shù)--YoungGCJava25G1,G1FullGC--G18u40,G1--很重要。早期的G1調(diào)優(yōu)中,通常會(huì)設(shè)置下面參數(shù),但是很難給出一個(gè)普適的數(shù)值,往往要--JDK9G1JVM在運(yùn)行時(shí)進(jìn)行采樣,獲取統(tǒng)計(jì)數(shù)據(jù),然后據(jù)此動(dòng)態(tài)調(diào)整并發(fā)標(biāo)記啟動(dòng)時(shí)機(jī)。對(duì)應(yīng)的JVM參數(shù)如--在現(xiàn)有的資料中,大多G1的FullGC是勁的單線程串行GC。其實(shí),如果采用的是的JDK,你會(huì)發(fā)現(xiàn)FullGC也是并行進(jìn)行的了,在通用場(chǎng)景中的表現(xiàn)還優(yōu)于ParallelFullGCCardTable前面介紹了問題,其實(shí)升級(jí)JDK就可以解決了。僅僅是GC調(diào)優(yōu)。我們來看看打開GC日志,這似乎是很簡(jiǎn)單的事情,可是你確定真的掌握了-- -XX:+Print-XX:+PrintAdaptiveSizePolicy-XX:+PrintAdaptiveSizePolicy打印G1Ergonomics相關(guān)信我們知道GC內(nèi)部一些行為是適應(yīng)性的觸發(fā)的,利用PrintAdaptiveSizePolicy,我們就可以知道為什么JVM做出了一些可能我們不希望發(fā)生的動(dòng)作。例如,G1調(diào)優(yōu)的一個(gè)基本建議就是避HumongousErgonomics考慮要么增大堆的大小,要么直接將region大小提高。----需要注意的一點(diǎn)是,JDK9中JVM和GC日志機(jī)構(gòu)進(jìn)行了重構(gòu),其實(shí)我前面提到的java-java-如果發(fā)現(xiàn)YoungGC非常耗時(shí),這很可能就是因?yàn)樘罅?,我們可以考慮減小--YoungGC--如果我們直接為G1設(shè)置較小的延遲目標(biāo)值,也會(huì)起到減小的效果,雖然會(huì)影響吞吐量。如果是MixedGC延遲較長(zhǎng),我們應(yīng)該怎么做呢?OldregionMixedGC,region數(shù)提高M(jìn)ixedGC的個(gè)數(shù),當(dāng)前默認(rèn)值是8,MixedGC數(shù)量增多,意味著每次被包含的region減少。--今天的內(nèi)容算是拋磚引玉,內(nèi)容你可以參考G1調(diào)優(yōu)指南等,遠(yuǎn)不是幾句話可以囊括的。需要注意的是,也要避免過度調(diào)優(yōu),G1今天我梳理了基本的GC調(diào)優(yōu)思路,并對(duì)G1內(nèi)部結(jié)構(gòu)以及的行為變化進(jìn)行了詳解??偟膩碚f,G1的調(diào)優(yōu)相對(duì)簡(jiǎn)單、直觀,因?yàn)榭梢灾苯釉O(shè)定暫停時(shí)間等目標(biāo),并且其內(nèi)部引入了各種智FullGC精選留Honey拯救世 這一集有難度了,平時(shí)接觸得少,初步讀來能吸收的真有限迷 感謝了這么晚還在回復(fù).點(diǎn)贊 0個(gè)考~ 楊老師能具體s,個(gè) 很詳細(xì)能說說原及參數(shù)的東西謝了迷 如果dump堆太大.我覺得可以先通過mapp00statge原因好的工?eb連查看占?迷 作者回迷請(qǐng)問Set和cardtable關(guān)系是怎么樣的?他們之間是如何協(xié)作一起完成迷請(qǐng)問Set和cardtable關(guān)系是怎么樣的?他們之間是如何協(xié)作一起完成0的作者回我理解cardtable是rememberedset的一種實(shí)迷 Set和cardtable
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年工廠股權(quán)轉(zhuǎn)讓與產(chǎn)業(yè)園區(qū)配套設(shè)施建設(shè)合同3篇
- 個(gè)人貸款延期合同書2024版標(biāo)準(zhǔn)格式版B版
- 二零二五年度啤酒節(jié)場(chǎng)地租賃合同(含設(shè)備安裝與維護(hù)服務(wù))3篇
- 2025年度朋友合資經(jīng)營(yíng)兒童游樂場(chǎng)合同4篇
- 二零二五版綠色建筑項(xiàng)目材料集中采購合同3篇
- 二零二五年度內(nèi)墻膩?zhàn)赢a(chǎn)品責(zé)任保險(xiǎn)合同
- 2025年度生態(tài)旅游區(qū)臨設(shè)轉(zhuǎn)讓及生態(tài)保護(hù)合同4篇
- 2025版土地居間業(yè)務(wù)規(guī)范化合同書(正規(guī)范本)6篇
- 二零二五年度啤酒產(chǎn)品節(jié)慶活動(dòng)專用代理合同
- 二零二五年度二手車買賣及二手車評(píng)估合同協(xié)議2篇
- 2023年廣東省公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 2024年公證遺產(chǎn)繼承分配協(xié)議書模板
- 燃?xì)饨?jīng)營(yíng)安全重大隱患判定標(biāo)準(zhǔn)課件
- 深圳小學(xué)英語單詞表(中英文)
- 護(hù)理質(zhì)量反饋內(nèi)容
- 山東省濟(jì)寧市2023年中考數(shù)學(xué)試題(附真題答案)
- 抖音搜索用戶分析報(bào)告
- 鉆孔灌注樁技術(shù)規(guī)范
- 2023-2024學(xué)年北師大版必修二unit 5 humans and nature lesson 3 Race to the pole 教學(xué)設(shè)計(jì)
- 供貨進(jìn)度計(jì)劃
- 彌漫大B細(xì)胞淋巴瘤護(hù)理查房
評(píng)論
0/150
提交評(píng)論