日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM调优总结(6):新一代的垃圾回收算法

發(fā)布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM调优总结(6):新一代的垃圾回收算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
原文出處:?pengjiaheng

垃圾回收的瓶頸

傳統(tǒng)分代垃圾回收方式,已經(jīng)在一定程度上把垃圾回收給應(yīng)用帶來的負(fù)擔(dān)降到了最小,把應(yīng)用的吞吐量推到了一個極限。但是他無法解決的一個問題,就是Full GC所帶來的應(yīng)用暫停。在一些對實時性要求很高的應(yīng)用場景下,GC暫停所帶來的請求堆積和請求失敗是無法接受的。這類應(yīng)用可能要求請求的返回時間在幾百甚至幾十毫秒以內(nèi),如果分代垃圾回收方式要達到這個指標(biāo),只能把最大堆的設(shè)置限制在一個相對較小范圍內(nèi),但是這樣有限制了應(yīng)用本身的處理能力,同樣也是不可接收的。

分代垃圾回收方式確實也考慮了實時性要求而提供了并發(fā)回收器,支持最大暫停時間的設(shè)置,但是受限于分代垃圾回收的內(nèi)存劃分模型,其效果也不是很理想。

為了達到實時性的要求(其實Java語言最初的設(shè)計也是在嵌入式系統(tǒng)上的),一種新垃圾回收方式呼之欲出,它既支持短的暫停時間,又支持大的內(nèi)存空間分配。可以很好的解決傳統(tǒng)分代方式帶來的問題。

增量收集的演進

增量收集的方式在理論上可以解決傳統(tǒng)分代方式帶來的問題。增量收集把對堆空間劃分成一系列內(nèi)存塊,使用時,先使用其中一部分(不會全部用完),垃圾收集時把之前用掉的部分中的存活對象再放到后面沒有用的空間中,這樣可以實現(xiàn)一直邊使用邊收集的效果,避免了傳統(tǒng)分代方式整個使用完了再暫停的回收的情況。

當(dāng)然,傳統(tǒng)分代收集方式也提供了并發(fā)收集,但是他有一個很致命的地方,就是把整個堆做為一個內(nèi)存塊,這樣一方面會造成碎片(無法壓縮),另一方面他的每次收集都是對整個堆的收集,無法進行選擇,在暫停時間的控制上還是很弱。而增量方式,通過內(nèi)存空間的分塊,恰恰可以解決上面問題。

Garbage Firest(G1)

這部分的內(nèi)容主要參考這里,這篇文章算是對G1算法論文的解讀。我也沒加什么東西了。

目標(biāo)

從設(shè)計目標(biāo)看G1完全是為了大型應(yīng)用而準(zhǔn)備的。

支持很大的堆

高吞吐量

–支持多CPU和垃圾回收線程

–在主線程暫停的情況下,使用并行收集

–在主線程運行的情況下,使用并發(fā)收集

實時目標(biāo):可配置在N毫秒內(nèi)最多只占用M毫秒的時間進行垃圾回收

當(dāng)然G1要達到實時性的要求,相對傳統(tǒng)的分代回收算法,在性能上會有一些損失。

算法詳解

G1可謂博采眾家之長,力求到達一種完美。他吸取了增量收集優(yōu)點,把整個堆劃分為一個一個等大小的區(qū)域(region)。內(nèi)存的回收和劃分都以region為單位;同時,他也吸取了CMS的特點,把這個垃圾回收過程分為幾個階段,分散一個垃圾回收過程;而且,G1也認(rèn)同分代垃圾回收的思想,認(rèn)為不同對象的生命周期不同,可以采取不同收集方式,因此,它也支持分代的垃圾回收。為了達到對回收時間的可預(yù)計性,G1在掃描了region以后,對其中的活躍對象的大小進行排序,首先會收集那些活躍對象小的region,以便快速回收空間(要復(fù)制的活躍對象少了),因為活躍對象小,里面可以認(rèn)為多數(shù)都是垃圾,所以這種方式被稱為Garbage First(G1)的垃圾回收算法,即:垃圾優(yōu)先的回收。

回收步驟:

初始標(biāo)記(Initial Marking)

G1對于每個region都保存了兩個標(biāo)識用的bitmap,一個為previous marking bitmap,一個為next marking bitmap,bitmap中包含了一個bit的地址信息來指向?qū)ο蟮钠鹗键c。

開始Initial Marking之前,首先并發(fā)的清空next marking bitmap,然后停止所有應(yīng)用線程,并掃描標(biāo)識出每個region中root可直接訪問到的對象,將region中top的值放入next top at mark start(TAMS)中,之后恢復(fù)所有應(yīng)用線程。

觸發(fā)這個步驟執(zhí)行的條件為:

??? G1定義了一個JVM Heap大小的百分比的閥值,稱為h,另外還有一個H,H的值為(1-h)*Heap Size,目前這個h的值是固定的,后續(xù)G1也許會將其改為動態(tài)的,根據(jù)jvm的運行情況來動態(tài)的調(diào)整,在分代方式下,G1還定義了一個u以及soft limit,soft limit的值為H-u*Heap Size,當(dāng)Heap中使用的內(nèi)存超過了soft limit值時,就會在一次clean up執(zhí)行完畢后在應(yīng)用允許的GC暫停時間范圍內(nèi)盡快的執(zhí)行此步驟;

在pure方式下,G1將marking與clean up組成一個環(huán),以便clean up能充分的使用marking的信息,當(dāng)clean up開始回收時,首先回收能夠帶來最多內(nèi)存空間的regions,當(dāng)經(jīng)過多次的clean up,回收到?jīng)]多少空間的regions時,G1重新初始化一個新的marking與clean up構(gòu)成的環(huán)。?

并發(fā)標(biāo)記(Concurrent Marking)

按照之前Initial Marking掃描到的對象進行遍歷,以識別這些對象的下層對象的活躍狀態(tài),對于在此期間應(yīng)用線程并發(fā)修改的對象的以來關(guān)系則記錄到remembered set logs中,新創(chuàng)建的對象則放入比top值更高的地址區(qū)間中,這些新創(chuàng)建的對象默認(rèn)狀態(tài)即為活躍的,同時修改top值。

最終標(biāo)記暫停(Final Marking Pause)

當(dāng)應(yīng)用線程的remembered set logs未滿時,是不會放入filled RS buffers中的,在這樣的情況下,這些remebered set logs中記錄的card的修改就會被更新了,因此需要這一步,這一步要做的就是把應(yīng)用線程中存在的remembered set logs的內(nèi)容進行處理,并相應(yīng)的修改remembered sets,這一步需要暫停應(yīng)用,并行的運行。

存活對象計算及清除(Live Data Counting and Cleanup)

值得注意的是,在G1中,并不是說Final Marking Pause執(zhí)行完了,就肯定執(zhí)行Cleanup這步的,由于這步需要暫停應(yīng)用,G1為了能夠達到準(zhǔn)實時的要求,需要根據(jù)用戶指定的最大的GC造成的暫停時間來合理的規(guī)劃什么時候執(zhí)行Cleanup,另外還有幾種情況也是會觸發(fā)這個步驟的執(zhí)行的:

??? G1采用的是復(fù)制方法來進行收集,必須保證每次的”to space”的空間都是夠的,因此G1采取的策略是當(dāng)已經(jīng)使用的內(nèi)存空間達到了H時,就執(zhí)行Cleanup這個步驟;

對于full-young和partially-young的分代模式的G1而言,則還有情況會觸發(fā)Cleanup的執(zhí)行,full-young模式下,G1根據(jù)應(yīng)用可接受的暫停時間、回收young regions需要消耗的時間來估算出一個yound regions的數(shù)量值,當(dāng)JVM中分配對象的young regions的數(shù)量達到此值時,Cleanup就會執(zhí)行;partially-young模式下,則會盡量頻繁的在應(yīng)用可接受的暫停時間范圍內(nèi)執(zhí)行Cleanup,并最大限度的去執(zhí)行non-young regions的Cleanup。?

展望

以后JVM的調(diào)優(yōu)或許跟多需要針對G1算法進行調(diào)優(yōu)了。

本系列:

  • JVM調(diào)優(yōu)總結(jié)(1):一些概念
  • JVM調(diào)優(yōu)總結(jié)(2):基本垃圾回收算法
  • JVM調(diào)優(yōu)總結(jié)(3):垃圾回收面臨的問題
  • JVM調(diào)優(yōu)總結(jié)(4):分代垃圾回收
  • JVM調(diào)優(yōu)總結(jié)(5):典型配置
  • JVM調(diào)優(yōu)總結(jié)(6):新一代的垃圾回收算法
from:http://www.importnew.com/19269.html

總結(jié)

以上是生活随笔為你收集整理的JVM调优总结(6):新一代的垃圾回收算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 超碰c | 无码精品一区二区三区AV | 91看片视频 | 风流少妇 | 在线伊人 | 国产露出视频 | 可以免费看的黄色 | 亚洲男女一区二区三区 | 欧美日韩人妻精品一区二区 | 国产 一二三四五六 | av天天有| 免费午夜视频在线观看 | 日韩福利视频在线观看 | 欧美69精品久久久久久不卡 | 国产免费久久 | 成人在线影片 | 婷婷色网站 | 欧美另类一区二区 | 国产亚洲精品网站 | 在线免费看污网站 | 国产不卡视频一区二区三区 | 黑名单上的人全集免费观看 | 在线免费观看av网站 | 天天干天天爽天天操 | 欧美第一页草草影院 | 乱人伦av | 国产乱子伦视频一区二区三区 | 制中文字幕音影 | 制服.丝袜.亚洲.中文.综合懂 | 超碰97干 | 人妖一级片 | 亚洲精品乱码久久久久久按摩观 | 精品国产乱码久久久 | 亚洲v视频| 麻豆精品久久久 | 国语对白av | 久久免费福利视频 | 中文字幕精品一区二区精品 | 少妇影院在线观看 | 干综合网| 精品无码久久久久成人漫画 | 污污网站在线播放 | 理论片琪琪午夜电影 | 屁屁影院国产第一页 | 久久99久久99 | www.欧美.com | 激烈的性高湖波多野结衣 | 欧美日韩国产综合在线 | 国产无遮挡免费 | 亚洲精品一区二区三区蜜桃 | 91美女精品| 日韩精品成人一区二区在线 | 亚洲AV乱码国产精品观看麻豆 | 成人91| 日本夫妻性生活视频 | av在观看 | 婷婷激情五月网 | 国产婷婷综合 | 日日av| 成人欧美在线观看 | 中文字幕一区二区人妻电影丶 | 狠狠操在线观看 | 福利一区二区 | 一区二区三区网站 | 黄色www| 99欧美精品| 欧美色图亚洲色 | 久久aⅴ国产欧美74aaa | 麻豆视频免费在线观看 | 欧美视频中文字幕 | av成人免费在线 | 五月天国产视频 | 青草热视频 | 制服丝袜一区二区三区 | 毛片一级片 | 99久久免费看精品国产一区 | 91视频合集 | 黑人玩弄人妻一区二区三区 | 麻豆爱爱视频 | 午夜剧场福利社 | 毛片毛片毛片毛片 | 欧美中文| 国产综合婷婷 | 午夜精品久久久久久久蜜桃 | 亚洲av无码一区二区三区在线播放 | 影音先锋在线视频观看 | 波多野结衣电车 | 丰满人妻一区二区三区四区53 | 精品日韩在线观看 | 日韩精品一区二区三区在线 | 五十路息子 | 日本激情网站 | 色人阁在线视频 | 日韩女优中文字幕 | 999av| 成年精品 | 婷婷综合激情网 | 午夜不卡久久精品无码免费 | 樱花草涩涩www在线播放 |