jvm調(diào)優(yōu)總結(jié)(6):新一代的垃圾回收算法-java開(kāi)發(fā)java經(jīng)驗(yàn)技巧

jvm調(diào)優(yōu)總結(jié)(6):新一代的垃圾回收算法-java開(kāi)發(fā)java經(jīng)驗(yàn)技巧

ID:31317350

大小:72.00 KB

頁(yè)數(shù):4頁(yè)

時(shí)間:2019-01-08

jvm調(diào)優(yōu)總結(jié)(6):新一代的垃圾回收算法-java開(kāi)發(fā)java經(jīng)驗(yàn)技巧_第1頁(yè)
jvm調(diào)優(yōu)總結(jié)(6):新一代的垃圾回收算法-java開(kāi)發(fā)java經(jīng)驗(yàn)技巧_第2頁(yè)
jvm調(diào)優(yōu)總結(jié)(6):新一代的垃圾回收算法-java開(kāi)發(fā)java經(jīng)驗(yàn)技巧_第3頁(yè)
jvm調(diào)優(yōu)總結(jié)(6):新一代的垃圾回收算法-java開(kāi)發(fā)java經(jīng)驗(yàn)技巧_第4頁(yè)
資源描述:

《jvm調(diào)優(yōu)總結(jié)(6):新一代的垃圾回收算法-java開(kāi)發(fā)java經(jīng)驗(yàn)技巧》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、JVM調(diào)優(yōu)總結(jié)(6):新一代的垃圾回收算法-編程開(kāi)發(fā)技術(shù)JVM調(diào)優(yōu)總結(jié)(6):新一代的垃圾回收算法原文出處:pengjiaheng垃圾回收的瓶頸傳統(tǒng)分代垃圾回收方式,已經(jīng)在一定程度上把垃圾回收給應(yīng)用帶來(lái)的負(fù)擔(dān)降到了最小,把應(yīng)用的吞吐量推到了一個(gè)極限。但是他無(wú)法解決的一個(gè)問(wèn)題,就是FullGC所帶來(lái)的應(yīng)用暫停。在一?些對(duì)實(shí)時(shí)性要求很高的應(yīng)用場(chǎng)景下,GC暫停所帶來(lái)的請(qǐng)求堆積和請(qǐng)求失敗是無(wú)法接受的。這類應(yīng)用可能要求請(qǐng)求的返回時(shí)間在兒百甚至兒十毫秒以內(nèi),如果分代垃圾冋收方式要達(dá)到這個(gè)指標(biāo),只能把最大堆的設(shè)置限制在一個(gè)相對(duì)較小范圍內(nèi),但是這樣有限制了應(yīng)用木身的處理能

2、力,同樣也是不可接收的。分代垃圾回收方式確實(shí)也考慮了實(shí)時(shí)性要求而提供了并發(fā)回收器,支持最大暫停時(shí)間的設(shè)置,但是受限于分代垃圾回收的內(nèi)存劃分模型,其效果也不是很理想。為了達(dá)到實(shí)時(shí)性的要求(其實(shí)Java語(yǔ)言最初的設(shè)計(jì)也是在嵌入式系統(tǒng)上的),一種新垃圾回收方式呼之欲出,它既支持短的暫停吋間,又支持大的內(nèi)存空間分配??梢院芎玫慕鉀Q傳統(tǒng)分代方式帶來(lái)的問(wèn)題。增量收集的演進(jìn)增量收集的方式在理論上可以解決傳統(tǒng)分代方式帶來(lái)的問(wèn)題。增量收集把對(duì)堆空間劃分成一系列內(nèi)存塊,使用吋,先使用其屮一部分(不會(huì)全部用完),垃圾收集時(shí)把之前用掉的部分中的存活對(duì)象再放到后面沒(méi)冇用的空間中,這

3、樣可以實(shí)現(xiàn)一直邊使用邊收集的效果,避免了傳統(tǒng)分代方式整個(gè)使用完了再暫停的回收的情況。當(dāng)然,傳統(tǒng)分代收集方式也提供了并發(fā)收集,但是他有一個(gè)很致命的地方,就是把整個(gè)堆做為一個(gè)內(nèi)存塊,這樣一方面會(huì)造成碎片(無(wú)法壓縮),另一方面他的每次收集都是對(duì)整個(gè)堆的收集,無(wú)法進(jìn)行選擇,在暫停時(shí)間的控制上還是很弱。而增量方式,通過(guò)內(nèi)存空間的分塊,恰恰可以解決上面問(wèn)題。GarbageFirest(Gl)這部分的內(nèi)容主要參考這里,這篇文章算是對(duì)G1算法論文的解讀。我也沒(méi)加什么東西了。目標(biāo)從設(shè)計(jì)口標(biāo)看G1完全是為了大型應(yīng)用而準(zhǔn)備的。支持很大的堆高吞吐量-支持多CPU和垃圾回收線程-在

4、主線程暫停的情況下,使用并行收集■在主線程運(yùn)行的情況下,使用并發(fā)收集實(shí)時(shí)目標(biāo):可配置在N毫秒內(nèi)最多只占用M毫秒的時(shí)間進(jìn)行垃圾回收當(dāng)然G1要達(dá)到實(shí)時(shí)性的要求,相對(duì)傳統(tǒng)的分代回收算法,在性能上會(huì)冇一些損失。算法詳解G1可謂I■専采眾家之長(zhǎng),力求到達(dá)一種完美。他吸取了增量收集優(yōu)點(diǎn),把整個(gè)堆劃分為一個(gè)一個(gè)等大小的區(qū)域(region)。內(nèi)存的冋收和劃分都以region為單位;同吋,他也吸取了CMS的特點(diǎn),把這個(gè)垃圾回收過(guò)程分為幾個(gè)階段,分散一個(gè)垃圾回收過(guò)程;而且,G1也認(rèn)同分代垃圾回收的思想,認(rèn)為不同對(duì)象的生命周期不同,可以采取不同收集方式,因此,它也支持分代的垃圾

5、回收。為了達(dá)到對(duì)冋收時(shí)間的可預(yù)計(jì)性,G1在掃描了region以后,對(duì)其中的活躍對(duì)彖的大小進(jìn)行排序,首先會(huì)收集那些活躍對(duì)象小的region,以便快速回收空間(要復(fù)制的活躍對(duì)象少了),因?yàn)榛钴S對(duì)象小,里面可以認(rèn)為多數(shù)都是垃圾,所以這種方式被稱為GarbageFirst(G1)的垃圾回收算法,即:垃圾優(yōu)先的回收?;厥詹襟E:初始標(biāo)記(InitialMarking)G1對(duì)于每個(gè)region都保存了兩個(gè)標(biāo)識(shí)用的bitmap,一個(gè)為previousmarkingbitmap,一個(gè)為nextmarkingbitmap,bitmap中包含了一個(gè)bit的地址信息來(lái)指向?qū)ο蟮钠?/p>

6、始點(diǎn)。開(kāi)始InitialMarking之前,首先并發(fā)的清空nextmarkingbitmap,然后停止所有應(yīng)用線程,并掃描標(biāo)識(shí)出每個(gè)region中root可直接訪問(wèn)到的對(duì)象,將region屮top的值放入nexttopatmarkstart(TAMS)屮,Z后恢復(fù)所冇應(yīng)用線程。觸發(fā)這個(gè)步驟執(zhí)行的條件為:???G1定義了一個(gè)JVMHeap大小的百分比的閥值,稱為h,另外還有一個(gè)H,H的值為(l-h)*HeapSize,目前這個(gè)h的值是固定的,后續(xù)G1也許會(huì)將其改為動(dòng)態(tài)的,根據(jù)jvm的運(yùn)行情況來(lái)動(dòng)態(tài)的調(diào)整,在分代方式下,G1還定義了一個(gè)u以及softlimit

7、,softlimit的值為H-u*HeapSize,當(dāng)Heap中使用的內(nèi)存超過(guò)了softlimit值時(shí),就會(huì)在一次cleanup執(zhí)行完畢后在應(yīng)用允許的GC暫停時(shí)間范圍內(nèi)盡快的執(zhí)行此步驟;在pure方式卜,G1將marking與cleanup組成一個(gè)環(huán),以便cleanup能充分的使用marking的信息,當(dāng)cleanup開(kāi)始冋收時(shí),首先冋收能夠帶來(lái)最多內(nèi)存空間的regions,當(dāng)經(jīng)過(guò)多次的cleanup,回收到?jīng)]多少空間的regions時(shí),G1重新初始化一個(gè)新的marking與cleanup構(gòu)成的環(huán)。?并發(fā)標(biāo)記(ConcurrentMarking)按照之前I

8、nitialMarking掃描到的對(duì)象進(jìn)行遍歷,以識(shí)別這些對(duì)象的下

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。