jvm垃圾收集器

默認(rèn)垃圾收集器

jdk9之前:serial? +? serial old

jdk9及之后:G1

Serial

HotSpot新生代默認(rèn)回收器

1.只能單線程回收? 標(biāo)記-復(fù)制算法

2.再回收時(shí)需要“Stop the world”

3.回收效率高,所有線程都停下來知道垃圾回收回收完

ParNew

是Serial的并行版本

1.標(biāo)記-復(fù)制

2.多條回收線程并行,但是回收線程和用戶線程不能并行

3.需要“stop the world”

Parallel Scavenge

1.標(biāo)記 - 復(fù)制

2.多線程并行 需要“stop the world”

3.吞吐量?jī)?yōu)先台颠,可以通過配置設(shè)置吞吐量大小

吞吐量 = 運(yùn)行用戶代碼時(shí)間/(運(yùn)行用戶代碼 + 垃圾回收時(shí)間)

新生代設(shè)置相對(duì)大一些捏悬,吞吐量相對(duì)會(huì)大一些瓢颅,因?yàn)槔厥詹皇悄敲搭l繁

處理器資源稀缺救巷,想優(yōu)先處理用戶代碼 就可以把吞吐量設(shè)置大一些

4.可以設(shè)置停頓時(shí)間大谢夏埂(這里是指停頓時(shí)間何暇,后邊的cms陶夜、G1控制收集時(shí)間因?yàn)椴恍枰猻top the

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? world)

? 可以設(shè)置吞吐量大小,

5.可以通過參數(shù)設(shè)置裆站,開啟自適應(yīng)策略 收集器會(huì)根據(jù)運(yùn)行情況自動(dòng)調(diào)整新生代老年代大小等參數(shù)

Serial Old

1.標(biāo)記 - 整理

2.單線程回收 回收的時(shí)候不會(huì)出現(xiàn)新的垃圾

3.老年代

Parallel Old

1.標(biāo)記 - 整理

2.多線程并行条辟,同時(shí)并發(fā)

3.老年代的回收器

CMS

1.標(biāo)記-清除

2.并發(fā)以獲取最短停頓時(shí)間為目標(biāo)?

3.步驟:

初始標(biāo)記

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

重新標(biāo)記? 處理用戶線程并行期間產(chǎn)生變化的數(shù)據(jù)

并發(fā)清除

4.缺點(diǎn): 并發(fā)操作更消耗cpu資源影響用戶線程,浮動(dòng)垃圾

5.優(yōu)化:

缺點(diǎn)一可以忽略

缺點(diǎn)二設(shè)置閾值當(dāng)堆占用68%或90%時(shí)就觸發(fā)垃圾回收 并發(fā)失敗就stop the world full GC

其他 處理內(nèi)存碎片遏插,設(shè)置參數(shù)在Full GC之前先進(jìn)行碎片整理

G1

算法:標(biāo)記-復(fù)制

思想:部分回收讓停頓時(shí)間可控

特點(diǎn):1.不分新生代老年代捂贿,將整個(gè)堆分若干個(gè)region

? ? ? ? ? 2.每次回收的時(shí)候是將存活的對(duì)象復(fù)制到空的region中,原來的region清空

? ? ? ? ? 3.有Region 中有一類Hummongous區(qū)域用來存儲(chǔ)大對(duì)象(對(duì)象超過了region的一半)

? ? 4.可以設(shè)置單次回收所允許的最長(zhǎng)時(shí)間胳嘲,G1會(huì)根據(jù)是時(shí)間評(píng)估具體需要回收哪些region厂僧,這個(gè)時(shí)間一般為一百至三百毫秒

? ? 5.執(zhí)行步驟:

? ? ? 初始標(biāo)記

? ? ? 并發(fā)標(biāo)記:只有這個(gè)階段是并發(fā)的

? ? ? 重新標(biāo)記:處理用戶線程并行期間發(fā)生變化的數(shù)據(jù) SATB

? ? ? 篩選收集:標(biāo)記-復(fù)制

只有并發(fā)標(biāo)記階段是并發(fā)的其他的都需要stop the worldZGC可以在篩選收集階段實(shí)現(xiàn)并發(fā)

新生代的一般是標(biāo)記-復(fù)制,老年代的一般是標(biāo)記-整理cms標(biāo)記清除 G1標(biāo)記復(fù)制

G1相對(duì)CMS的優(yōu)點(diǎn)和弱點(diǎn)

1.G1的優(yōu)秀特點(diǎn)

? ? 1)G1可以設(shè)置最大停頓時(shí)間? cms不可以

? ? 2)G1是region的內(nèi)存布局? cms分新生代老年代

? ? 3)G1是按受益來動(dòng)態(tài)確定收集行為

? ? 4)G1采用標(biāo)記-復(fù)制算法了牛,沒有內(nèi)存碎片

2.弱點(diǎn)

? ? 1)內(nèi)存占用高:

? ? ? ? ? G1為了解決region問題颜屠,每個(gè)region上都有一個(gè)卡表辰妙,所以G1的記憶集會(huì)占用超過堆20%的內(nèi)存空間,cms也使用了卡表來處理跨代指針甫窟,但是只有新生代老年代所以占用內(nèi)存較小

? ? ? 2)負(fù)載高:

? ? ? ? ? cms需要使用寫后屏障維護(hù)卡表

? ? ? ? ? G1需要使用寫后屏障維護(hù)卡表密浑,還需要使用寫前屏障記錄指針(G1用了原始快照搜索算法所以需要這個(gè)指針)

各個(gè)回收器之間的關(guān)系:

新生代:? serial? --并行-->? parNew? --吞吐量-->? parallel scavenge?

老年代:? serial old? ? ? ? ? ? cms? ? ? ? ? ? ? ? ? ? ? ? ? ? parallel old

綜合: G1

經(jīng)典組合: ps + po

? ? ? ? ? ? ? ? parnew + cms + serial old

? ? ? ? ? ? ? ? G1

如何選擇垃圾收集器?

影響選擇的因素:

1.關(guān)注點(diǎn)(吞吐量粗井、延遲尔破、內(nèi)存占用)

2.基礎(chǔ)設(shè)施(處理器數(shù)量、內(nèi)存大小浇衬、操作系統(tǒng)是window還是Linux)

3.JDK的發(fā)行商懒构、版本號(hào)

幾種收集器的特點(diǎn)

C1:綜合性能好 花錢

ZGC:使用比較新的軟硬件版本,注重延遲

Shenandoah:window

CMS:堆內(nèi)存在4G到6G耘擂,硬件和JDK比較落后

G1:堆內(nèi)存更大一點(diǎn)考慮G1

注重吞吐量: ps + po

注重低延遲胆剧,對(duì)停頓時(shí)間敏感:

? ? ? ? ? ? ? ? ? ? 內(nèi)存小: cms

? ? ? ? ? ? ? ? ? ? 內(nèi)存夠大:G1 ZGC

整個(gè)內(nèi)存回收過程是什么樣的流程醉冤?

1.大對(duì)象直接進(jìn)入老年代? 可設(shè)置界限

2.多次回收仍存活的進(jìn)入老年代

分代年齡判定

新生代每回收一次年齡加一秩霍,超過15進(jìn)入老年代

動(dòng)態(tài)年齡判定

相同年齡的對(duì)象占用survivor一半內(nèi)存,那么等于或大于這個(gè)年齡的對(duì)象直接進(jìn)入老年代

3.內(nèi)存擔(dān)保

? 新生代回收時(shí)(復(fù)制算法 survivor到另一個(gè)survivor)不夠用蚁阳,就直接將無法容納的對(duì)象放入老年代铃绒,如果老年代也放不下就Full GC

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市螺捐,隨后出現(xiàn)的幾起案子匿垄,更是在濱河造成了極大的恐慌,老刑警劉巖归粉,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異漏峰,居然都是意外死亡糠悼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門浅乔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倔喂,“玉大人,你說我怎么就攤上這事靖苇∠” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵贤壁,是天一觀的道長(zhǎng)悼枢。 經(jīng)常有香客問我,道長(zhǎng)脾拆,這世上最難降的妖魔是什么馒索? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任莹妒,我火速辦了婚禮,結(jié)果婚禮上绰上,老公的妹妹穿的比我還像新娘旨怠。我一直安慰自己,他們只是感情好蜈块,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布鉴腻。 她就那樣靜靜地躺著,像睡著了一般百揭。 火紅的嫁衣襯著肌膚如雪爽哎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天信峻,我揣著相機(jī)與錄音倦青,去河邊找鬼。 笑死盹舞,一個(gè)胖子當(dāng)著我的面吹牛产镐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播踢步,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼癣亚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了获印?” 一聲冷哼從身側(cè)響起述雾,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兼丰,沒想到半個(gè)月后玻孟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳍征,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年黍翎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艳丛。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匣掸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氮双,到底是詐尸還是另有隱情碰酝,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布戴差,位于F島的核電站送爸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碱璃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一弄痹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嵌器,春花似錦肛真、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至讥珍,卻和暖如春历极,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衷佃。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工趟卸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氏义。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓锄列,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親惯悠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子邻邮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361