jvm 優(yōu)化篇-(6)-問(wèn)題大匯總娇昙,每日一題尺迂?

死神---朽木白哉
1、JVM何時(shí)會(huì)回收??類?-----0415

三個(gè)條件缺一不可:

  • 1枪狂、類的所有實(shí)例(堆中)都已經(jīng)被回收??危喉。
  • 2、該類的ClassLoader已經(jīng)被回收??了州疾。
  • 3辜限、該類對(duì)應(yīng)的Class對(duì)象沒(méi)有任何引用。
2严蓖、方法執(zhí)行完畢薄嫡,棧幀立馬出棧,該棧幀中的變量數(shù)據(jù)立馬回收??颗胡?還是等垃圾回收器回收??毫深?為什么?-----0416

出棧就回收了毒姨,基礎(chǔ)類型變量?jī)?nèi)存分配就在棧中哑蔫,所以出棧就直接銷毀了。引用堆中的對(duì)象需要等一次YongGC弧呐。

3闸迷、實(shí)例對(duì)象被回收’和‘Class對(duì)象沒(méi)有引用’ 是一個(gè)概念么?-----0417

不是俘枫,Class對(duì)象代表的是類腥沽,如果有變量引用了類的Class對(duì)象,那么就是有引用鸠蚪。

4今阳、新生代為何分為三塊區(qū)域{Eden、From茅信、To}盾舌,半劈分成兩塊為什么不行?-----0418

三塊區(qū)域蘸鲸,只有From or To 空間是閑置的矿筝,而分為兩塊后,要有一半的新生代資源閑置著棚贾。

5、如何理解STW對(duì)系統(tǒng)的影響榆综?調(diào)優(yōu)策略如何制定妙痹?------0419

一直以來(lái)都是想著控制yonggc在50ms以下,oldgc在300ms以下鼻疮。但是GC執(zhí)行勢(shì)必都會(huì)帶來(lái)STW,JVM分代回收??的本質(zhì)是對(duì)象的生命周期結(jié)束時(shí)就近一次執(zhí)行GC進(jìn)行回收。所以調(diào)優(yōu)者需要估算出對(duì)象的生命周期篙议。

6、parnew+cms回收器崭篡,如何保證只做yonggc?-------0420

需要觀察每秒鐘新增多少對(duì)象吧秕,多長(zhǎng)時(shí)間觸發(fā)一次yonggc琉闪,平均一次yonggc后有多少對(duì)象存活,survivor區(qū)域是否放的下(對(duì)象動(dòng)態(tài)年齡等問(wèn)題)砸彬,計(jì)算survivor區(qū)域與eden區(qū)域比例跳過(guò)動(dòng)態(tài)年齡導(dǎo)致進(jìn)入老年代的問(wèn)題颠毙。

7、使用ParNew回收器并行線程是怎么設(shè)置的砂碉?------0421

一般是與應(yīng)用服務(wù)器的CPU核數(shù)保持一致蛀蜜。非要設(shè)定可以使用-XX:ParallelGCThreads指定。

8增蹭、啟動(dòng)系統(tǒng)的時(shí)候是選擇服務(wù)端模式還是客戶端模式滴某?對(duì)ParNew有什么影響?------0422

系統(tǒng)部署在linux上就選擇server模式滋迈,部署在windows上就選擇client模式霎奢。
一般web項(xiàng)目都是部署在多核的linux服務(wù)器上面,ParNew可以充分利用多核資源杀怠。windows上一般都是安裝client模式椰憋,比如qq、wx等赔退,如果用ParNew方式會(huì)導(dǎo)致CPU運(yùn)行多個(gè)線程橙依,反而加重了性能開(kāi)銷。所以Client一般選擇Serial模式硕旗。

9窗骑、CMS回收??第一階段“初始標(biāo)記”都標(biāo)記哪些?STW嘛漆枚?------0423

初始標(biāo)記需要STW创译,為了保障低停頓,只標(biāo)記出GC-ROOT直接引用的對(duì)象墙基。
10软族、CMS回收??第二階段“并發(fā)標(biāo)記”都標(biāo)記哪些?STW嘛残制?------0424
并發(fā)標(biāo)記不會(huì)STW立砸,垃圾回收線程與工作線程同時(shí)工作。并發(fā)標(biāo)記時(shí)根據(jù)第一階段標(biāo)記的GC-ROOT進(jìn)行延展標(biāo)記初茶。

11颗祝、CMS回收??第三階段“重新標(biāo)記”都標(biāo)記哪些?STW嘛?------0425

重新標(biāo)記需要STW螺戳,需要標(biāo)記第二階段新創(chuàng)建對(duì)象&已有對(duì)象可能失去引用變成垃圾搁宾。

12、CMS回收??第四階段“并發(fā)清理”會(huì)STW嘛倔幼?------0425

并發(fā)清理很耗時(shí)盖腿,需要進(jìn)行對(duì)象清理,垃圾回收線程與工作線程并發(fā)運(yùn)行的凤藏,不會(huì)STW奸忽。

13、CMS回收??“并發(fā)標(biāo)記”&“并發(fā)清理”這兩個(gè)階段時(shí)揖庄,垃圾回收線程與工作線程并行運(yùn)行栗菜,會(huì)導(dǎo)致cpu資源會(huì)成為瓶頸,CMS并發(fā)回收線程數(shù)如何設(shè)置蹄梢?-------0426

cms默認(rèn)啟動(dòng)的垃圾回收線程數(shù):(cpu核數(shù)+3)/4

14疙筹、CMS回收器在“并發(fā)清理”階段可能會(huì)發(fā)生“Concurrent Mode Failure”問(wèn)題?為什么禁炒?發(fā)生了“Concurrent Mode Failure”問(wèn)題jvm會(huì)如何解決而咆?-------0427

CMS在“并發(fā)清理”階段系統(tǒng)線程是工作著的,這就會(huì)產(chǎn)生“浮動(dòng)垃圾”(通過(guò)YongGC進(jìn)入老年代的對(duì)象)幕袱,CMS為了保證回收期間還有一定的內(nèi)存空間讓一些對(duì)象進(jìn)入老年代暴备,一半會(huì)預(yù)留一些空間,-XX:CMSInitiatingOccupancyFraction設(shè)置剩余百分比(默認(rèn)68%)们豌。
如果CMS在回收期間涯捻,剩余空間小于本次晉升的對(duì)象大小會(huì)怎樣呢?
就會(huì)發(fā)生“Concurrent Mode Failure”錯(cuò)誤望迎,也就是說(shuō)并發(fā)垃圾回收失敗障癌,此時(shí)JVM會(huì)升級(jí)處理策略:自動(dòng)啟用“Serial Old”垃圾回收??替代CMS回收??,Serial Old 會(huì)強(qiáng)行STW辩尊,重新進(jìn)行GC-Roots跟蹤標(biāo)記出全部垃圾對(duì)象涛浙,不允許新對(duì)象產(chǎn)生,一次性清理垃圾對(duì)象摄欲,然后恢復(fù)系統(tǒng)線程轿亮。

15、CMS內(nèi)存碎片整理會(huì)STW嘛胸墙?為什么我注?-------0428

首先內(nèi)存整理會(huì)STW,內(nèi)存碎片會(huì)導(dǎo)致分配連續(xù)空間受阻劳秋,JVM就會(huì)頻繁觸發(fā)FullGC。所以CMS也會(huì)根據(jù)設(shè)置-XX:CMSFullGCsBeforeCompaction=n意思是說(shuō)在上一次CMS并發(fā)GC執(zhí)行過(guò)后,到底還要再執(zhí)行多少次full GC才會(huì)做壓縮玻淑。默認(rèn)是0嗽冒,也就是在默認(rèn)配置下每次CMS GC頂不住了而要轉(zhuǎn)入full GC的時(shí)候都會(huì)做壓縮。 如果把CMSFullGCsBeforeCompaction配置為10补履,就會(huì)讓上面說(shuō)的第一個(gè)條件變成每隔10次真正的full GC才做一次壓縮添坊。

16、有幾種情況會(huì)觸發(fā)老年代執(zhí)行GC箫锤?-------0429

-1贬蛙、老年代可用空間小于新生代全部對(duì)象的大小,如果沒(méi)有開(kāi)啟空間擔(dān)保策略會(huì)執(zhí)行FullGC谚攒,一般默認(rèn)擔(dān)保策略是打開(kāi)的阳准。
-2、歷次新生代GC后進(jìn)入老年代的平均大小大于老年代可用空間馏臭。
-3野蝇、老年代使用空間大于-XX:CMSInitiatingOccupancyFraction設(shè)置的閥值。

17括儒、什么是分配擔(dān)保绕沈?默認(rèn)開(kāi)啟嘛?可以去掉分配擔(dān)保機(jī)制嗎帮寻?為什么需要的是連續(xù)空間乍狐?-------0430
  • 1、在發(fā)生Minor GC之前固逗,虛擬機(jī)會(huì)檢查老年代最大可用的連續(xù)空間是否大于新生代所有對(duì)象的總空間浅蚪。
    • 如果大于,則此次Minor GC是安全的抒蚜。
    • 如果小于掘鄙,則虛擬機(jī)會(huì)查看HandlePromotionFailure設(shè)置分配擔(dān)保。
      • HandlePromotionFailure=true嗡髓,老年代最大可用連續(xù)空間是否大于歷次晉升到老年代的對(duì)象的平均大小操漠,如果大于,則嘗試進(jìn)行一次Minor GC饿这。
      • HandlePromotionFailure=false or 老年代最大可用連續(xù)空間小于歷次晉升到老年代的對(duì)象的平均大小浊伙,執(zhí)行FullGC。
  • 2长捧、1.6以后是默認(rèn)開(kāi)啟的嚣鄙。
  • 3、可以去掉串结,會(huì)加大FullGC發(fā)生的概率哑子。虛擬機(jī)短暫停止舅列,吞吐量、性能下降卧蜓。
  • 4帐要、新生代使用的是復(fù)制算法,復(fù)制算法決定需要連續(xù)空間弥奸。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末榨惠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子盛霎,更是在濱河造成了極大的恐慌赠橙,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愤炸,死亡現(xiàn)場(chǎng)離奇詭異期揪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)摇幻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門横侦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人绰姻,你說(shuō)我怎么就攤上這事枉侧。” “怎么了狂芋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵榨馁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我帜矾,道長(zhǎng)翼虫,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任屡萤,我火速辦了婚禮珍剑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘死陆。我一直安慰自己招拙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布措译。 她就那樣靜靜地躺著别凤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪领虹。 梳的紋絲不亂的頭發(fā)上规哪,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音塌衰,去河邊找鬼诉稍。 笑死蝠嘉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杯巨。 我是一名探鬼主播是晨,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼舔箭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蚊逢,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤层扶,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后烙荷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體镜会,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年终抽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了戳表。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昼伴,死狀恐怖匾旭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情圃郊,我是刑警寧澤价涝,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站持舆,受9級(jí)特大地震影響色瘩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逸寓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一居兆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竹伸,春花似錦泥栖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至生巡,卻和暖如春耙蔑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孤荣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工甸陌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留须揣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓钱豁,卻偏偏與公主長(zhǎng)得像耻卡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牲尺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 工作之余卵酪,想總結(jié)一下JVM相關(guān)知識(shí)。 Java運(yùn)行時(shí)數(shù)據(jù)區(qū): Java虛擬機(jī)在執(zhí)行Java程序的過(guò)程中會(huì)將其管理的...
    Huang遠(yuǎn)閱讀 634評(píng)論 0 2
  • 第二部分 自動(dòng)內(nèi)存管理機(jī)制 第二章 java內(nèi)存異常與內(nèi)存溢出異常 運(yùn)行數(shù)據(jù)區(qū)域 程序計(jì)數(shù)器:當(dāng)前線程所執(zhí)行的字節(jié)...
    小明oh閱讀 1,159評(píng)論 0 2
  • JVM面試題 來(lái)都來(lái)了,點(diǎn)個(gè)贊唄 文末領(lǐng)取博主為大家準(zhǔn)備的面試渡劫大禮包喔 1蜒简、內(nèi)存模型以及分區(qū)瘸羡,需要詳細(xì)到每個(gè)區(qū)...
    Python學(xué)習(xí)君閱讀 728評(píng)論 0 7
  • 十二月的天氣略微有些冷,南方的天氣總揮灑著細(xì)密的雨滴搓茬,如若真是南方犹赖,也是好的,不偏不倚的江南卷仑,給人一種怎樣的遐思峻村,...
    長(zhǎng)路M閱讀 371評(píng)論 1 2
  • 24 今天中午不知道怎么了,睡醒了之后整頭是汗锡凝,賊難受了雀哨,就連今天下午跑步也沒(méi)這么濕。 今天體檢了私爷,比之前重了...
    YTiua閱讀 139評(píng)論 0 0