JVM垃圾收集器

JVM垃圾收器

JVM垃圾收集器收集器采用分代收集算法驳棱,堆被劃分為新生代和老年代。新生代主要存儲(chǔ)新創(chuàng)建的對(duì)象和尚未進(jìn)入老年代的對(duì)象薄货。老年代存儲(chǔ)經(jīng)過(guò)多次新生代GC(Minor GC)任然存活的對(duì)象缤至。

新生代

程序新創(chuàng)建的對(duì)象都是從新生代分配內(nèi)存,新生代由Eden Space和兩塊相同大小的Survivor Space(通常又稱S0和S1或From和To)構(gòu)成姨谷,可通過(guò)-Xmn參數(shù)來(lái)指定新生代的大小逗宁,也可以通過(guò)-XX:SurvivorRation來(lái)調(diào)整Eden Space及Survivor Space的大小。?

老年代?

用于存放經(jīng)過(guò)多次新生代GC任然存活的對(duì)象梦湘,例如緩存對(duì)象瞎颗,新建的對(duì)象也有可能直接進(jìn)入老年代,主要有兩種情況:①.大對(duì)象捌议,可通過(guò)啟動(dòng)參數(shù)設(shè)置-XX:PretenureSizeThreshold=1024(單位為字節(jié)哼拔,默認(rèn)為0)來(lái)代表超過(guò)多大時(shí)就不在新生代分配,而是直接在老年代分配瓣颅。②.大的數(shù)組對(duì)象倦逐,切數(shù)組中無(wú)引用外部對(duì)象。 老年代所占的內(nèi)存大小為-Xmx對(duì)應(yīng)的值減去-Xmn對(duì)應(yīng)的值宫补。


Young Generation? ? ? ? ? ? Eden + From Space + To Space

Eden? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?存放新生的對(duì)象

Survivor Space (from to )? 有兩個(gè)檬姥,存放每次垃圾回收后存活的對(duì)象

Old Generation? ? ? ? ? ? ? ? ? Old Space 生命周期長(zhǎng)的存活對(duì)象

垃圾收集執(zhí)行規(guī)則

對(duì)象內(nèi)存一般在Eden區(qū)中分配,大對(duì)象(數(shù)組守谓,長(zhǎng)字符串)在老年代分配內(nèi)存穿铆,當(dāng)Eden內(nèi)存不足時(shí)會(huì)發(fā)起MinorGC,發(fā)起前會(huì)檢查老年代最大連續(xù)空間是否足夠新生代對(duì)象空間(這也稱為空間分配擔(dān)保)斋荞,因?yàn)槭遣捎脧?fù)制算法將不回收的對(duì)象復(fù)制到Survivor區(qū)荞雏,Survivor區(qū)如果無(wú)法容納就會(huì)復(fù)制到老年代;如果Survivor區(qū)對(duì)象通過(guò)一次MinorGc,年齡計(jì)數(shù)器+1凤优,年齡超過(guò)設(shè)置的閾值(-XX:MaxTenuringThreshold=15)后就會(huì)進(jìn)入老年代悦陋。

垃圾收集器回收對(duì)象

? ? 通俗講,就是不可能再被任何途徑使用的對(duì)象就會(huì)被垃圾收集器回收筑辨,現(xiàn)在常見的垃圾收集器采用的收集算法有:

? ? ? ? ? ? 引用計(jì)數(shù)算法: 對(duì)象中添加引用計(jì)數(shù)器俺驶,有引用+1,引用失效-1,計(jì)數(shù)器為0表示未被引用可以回收

? ? ? ? ? ? 可達(dá)性分析算法:通過(guò)成為GC Root對(duì)象作為起點(diǎn)棍辕,從根節(jié)點(diǎn)搜索到達(dá)子節(jié)點(diǎn)的路徑稱為引用鏈暮现,若Gc Root 到對(duì)象不可達(dá),則判 定對(duì)象為可回收楚昭。

? ? Java垃圾收集器采用可達(dá)性分析算法栖袋,標(biāo)記為可回收對(duì)象至少經(jīng)歷兩次標(biāo)記過(guò)程:

? ? ?a.? 判斷Gc Root引用鏈?zhǔn)欠窨蛇_(dá),不可達(dá)情況下判斷是否有必要對(duì)象的finalize(),若有抚太,則將這個(gè)對(duì)象放置F-Queue隊(duì)列塘幅,稍后由虛擬機(jī)自動(dòng)建立的低優(yōu)先級(jí)的Finalizer線程去觸發(fā)finalize();
? ? ?b.? GC會(huì)對(duì)F-Queue中對(duì)象進(jìn)行第二次小規(guī)模標(biāo)記尿贫,對(duì)象可以通過(guò)finalize()拯救自己电媳,否則就會(huì)被回收。

垃圾收集算法細(xì)節(jié)

標(biāo)記清除算法:Mark-Sweep? 標(biāo)記出所有的需要回收的對(duì)象庆亡,統(tǒng)計(jì)回收所有回收的對(duì)象;缺點(diǎn)是效率不高匾乓,會(huì)產(chǎn)生大量的不連續(xù)內(nèi)存碎片,導(dǎo)致分配大對(duì)象內(nèi)存時(shí)無(wú)法獲取連續(xù)的內(nèi)存空間

復(fù)制算法:使用指針實(shí)現(xiàn)內(nèi)存空間的復(fù)制清理身冀,HotSpot使用此種算法钝尸,Java堆內(nèi)存分為新生代和老年代括享,?新生代默認(rèn)劃分Eden&Survivor(8:1)搂根,GC觸發(fā)時(shí),會(huì)將活動(dòng)對(duì)象復(fù)制到Survivor區(qū)铃辖,當(dāng)Survivor空間不夠時(shí)會(huì)進(jìn)入老年代空間,比如長(zhǎng)期存活對(duì)象(Survivor區(qū)對(duì)象通過(guò)一次MinorGc剩愧,年齡計(jì)數(shù)器+1,年齡超過(guò)進(jìn)入老年代)娇斩,大對(duì)象(長(zhǎng)字符串仁卷、數(shù)組);?缺點(diǎn):對(duì)象存活率較高時(shí)就會(huì)進(jìn)行頻繁的復(fù)制犬第,效率會(huì)變低

標(biāo)記整理算法:在標(biāo)記清除算法基礎(chǔ)上锦积,將存活的對(duì)象移向一端,然后直接清理端邊界以外的內(nèi)存

分代收集算法:就是將以上幾種算法擇優(yōu)分區(qū)使用歉嗓,新生代(Minor GC)中使用復(fù)制算法丰介,老年代(Major GC)使用標(biāo)記? 整理算法進(jìn)行回收

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哮幢,更是在濱河造成了極大的恐慌带膀,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件橙垢,死亡現(xiàn)場(chǎng)離奇詭異垛叨,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)柜某,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門嗽元,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人喂击,你說(shuō)我怎么就攤上這事还棱。” “怎么了惭等?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵珍手,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我辞做,道長(zhǎng)琳要,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任秤茅,我火速辦了婚禮稚补,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘框喳。我一直安慰自己课幕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布五垮。 她就那樣靜靜地躺著乍惊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪放仗。 梳的紋絲不亂的頭發(fā)上润绎,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音诞挨,去河邊找鬼莉撇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惶傻,可吹牛的內(nèi)容都是我干的棍郎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼银室,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涂佃!你這毒婦竟也來(lái)了静秆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤巡李,失蹤者是張志新(化名)和其女友劉穎抚笔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侨拦,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡殊橙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狱从。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膨蛮。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖季研,靈堂內(nèi)的尸體忽然破棺而出敞葛,到底是詐尸還是另有隱情,我是刑警寧澤与涡,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布惹谐,位于F島的核電站,受9級(jí)特大地震影響驼卖,放射性物質(zhì)發(fā)生泄漏氨肌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一酌畜、第九天 我趴在偏房一處隱蔽的房頂上張望怎囚。 院中可真熱鬧,春花似錦桥胞、人聲如沸恳守。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)催烘。三九已至,卻和暖如春整胃,著一層夾襖步出監(jiān)牢的瞬間颗圣,已是汗流浹背喳钟。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工屁使, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奔则。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓蛮寂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親易茬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酬蹋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344