4.JVM

JVM知識

  1. 什么情況下會發(fā)生棧內(nèi)存溢出衷敌。
內(nèi)存溢出 out of memory勿侯,是指程序在申請內(nèi)存時,沒有足夠的內(nèi)存空間供其使用缴罗,出現(xiàn)out of memory助琐;比如申請了一個integer,但給它存了long才能存下的數(shù),那就是內(nèi)存溢出面氓。
內(nèi)存泄露 memory leak兵钮,是指程序在申請內(nèi)存后,無法釋放已申請的內(nèi)存空間舌界,一次內(nèi)存泄露危害可以忽略掘譬,但內(nèi)存泄露堆積后果很嚴(yán)重,無論多少內(nèi)存,遲早會被占光禀横。
memory leak會最終會導(dǎo)致out of memory
內(nèi)存溢出就是你要求分配的內(nèi)存超出了系統(tǒng)能給你的屁药,系統(tǒng)不能滿足需求,于是產(chǎn)生溢出柏锄。
內(nèi)存泄漏是指你向系統(tǒng)申請分配內(nèi)存進(jìn)行使用(new)酿箭,可是使用完了以后卻不歸還(delete),結(jié)果你申請到的那塊內(nèi)存你自己也不能再訪問(也許你把它的地址給弄丟了)趾娃,而系統(tǒng)也不能再次將它分配給需要的程序缭嫡。一個盤子用盡各種方法只能裝4個果子,你裝了5個抬闷,結(jié)果掉倒地上不能吃了妇蛀。這就是溢出耕突!比方說棧,棧滿時再做進(jìn)棧必定產(chǎn)生空間溢出评架,叫上溢眷茁,棧空時再做退棧也產(chǎn)生空間溢出纵诞,稱為下溢上祈。就是分配的內(nèi)存不足以放下數(shù)據(jù)項(xiàng)序列,稱為內(nèi)存溢出.
 解決:
1.少new 對象
2.調(diào)大xms,xmx參數(shù)
  1. JVM的內(nèi)存結(jié)構(gòu),Eden和Survivor比例浙芙。
HotSpot虛擬機(jī)GC算法采用分代收集算法:

1登刺、一個人(對象)出來(new 出來)后會在Eden Space(伊甸園)無憂無慮的生活,直到GC到來打破了他們平靜的生活嗡呼。GC會逐一問清楚每個對象的情況纸俭,有沒有錢(此對象的引用)啊,因?yàn)镚C想賺錢呀南窗,有錢的才可以敲詐嘛揍很。然后富人就會進(jìn)入Survivor Space(幸存者區(qū)),窮人的就直接kill掉矾瘾。

2女轿、并不是進(jìn)入Survivor Space(幸存者區(qū))后就保證人身是安全的箭启,但至少可以活段時間壕翩。GC會定期(可以自定義)會對這些人進(jìn)行敲詐,億萬富翁每次都給錢傅寡,GC很滿意放妈,就讓其進(jìn)入了Genured Gen(養(yǎng)老區(qū))。萬元戶經(jīng)不住幾次敲詐就沒錢了荐操,GC看沒有啥價值啦芜抒,就直接kill掉了。

3托启、進(jìn)入到養(yǎng)老區(qū)的人基本就可以保證人身安全啦宅倒,但是億萬富豪有的也會揮霍成窮光蛋,只要錢沒了屯耸,GC還是kill掉拐迁。

分區(qū)的目的:新生區(qū)由于對象產(chǎn)生的比較多并且大都是朝生夕滅的,所以直接采用標(biāo)記-清理算法疗绣。而養(yǎng)老區(qū)生命力很強(qiáng)线召,則采用復(fù)制算法,針對不同情況使用不同算法多矮。
  1. JVM內(nèi)存為什么要分成新生代缓淹,老年代,持久代。新生代中為什么要分為Eden和Survivor讯壶。

  2. JVM中一次完整的GC流程是怎樣的料仗,對象如何晉升到老年代,說說你知道的幾種主要的JVM參

數(shù)伏蚊。

  1. 你知道哪幾種垃圾收集器罢维,各自的優(yōu)缺點(diǎn),重點(diǎn)講下cms和G1丙挽,包括原理肺孵,流程,優(yōu)缺點(diǎn)颜阐。
CMS(并發(fā)GC)收集器
        CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間為目標(biāo)的收集器平窘,適用于集中在互聯(lián)網(wǎng)站或者B/S系統(tǒng)的服務(wù)端的Java應(yīng)用。CMS收集器是基于“標(biāo)記-清除”算法實(shí)現(xiàn)的凳怨,整個收集過程大致分為4個步驟:
①.初始標(biāo)記(CMS initial mark)
②.并發(fā)標(biāo)記(CMS concurrenr mark)
③.重新標(biāo)記(CMS remark)
④.并發(fā)清除(CMS concurrent sweep)
     其中初始標(biāo)記瑰艘、重新標(biāo)記這兩個步驟任然需要停頓其他用戶線程。初始標(biāo)記僅僅只是標(biāo)記出GC ROOTS能直接關(guān)聯(lián)到的對象肤舞,速度很快紫新,并發(fā)標(biāo)記階段是進(jìn)行GC ROOTS 根搜索算法階段,會判定對象是否存活李剖。而重新標(biāo)記階段則是為了修正并發(fā)標(biāo)記期間芒率,因用戶程序繼續(xù)運(yùn)行而導(dǎo)致標(biāo)記產(chǎn)生變動的那一部分對象的標(biāo)記記錄,這個階段的停頓時間會被初始標(biāo)記階段稍長篙顺,但比并發(fā)標(biāo)記階段要短偶芍。
     由于整個過程中耗時最長的并發(fā)標(biāo)記和并發(fā)清除過程中,收集器線程都可以與用戶線程一起工作德玫,所以整體來說匪蟀,CMS收集器的內(nèi)存回收過程是與用戶線程一起并發(fā)執(zhí)行的。
CMS收集器的優(yōu)點(diǎn):并發(fā)收集宰僧、低停頓材彪,但是CMS還遠(yuǎn)遠(yuǎn)達(dá)不到完美,主要有三個顯著缺點(diǎn):cpu敏感琴儿,浮動垃圾段化,空間碎片
  CMS收集器對CPU資源非常敏感券躁。在并發(fā)階段隔躲,雖然不會導(dǎo)致用戶線程停頓,但是會占用CPU資源而導(dǎo)致引用程序變慢盗尸,總吞吐量下降谜疤。CMS默認(rèn)啟動的回收線程數(shù)是:(CPU數(shù)量+3) / 4佃延。
  CMS收集器無法處理浮動垃圾现诀,可能出現(xiàn)“Concurrent Mode Failure“,失敗后而導(dǎo)致另一次Full  GC的產(chǎn)生履肃。由于CMS并發(fā)清理階段用戶線程還在運(yùn)行仔沿,伴隨程序的運(yùn)行自熱會有新的垃圾不斷產(chǎn)生,這一部分垃圾出現(xiàn)在標(biāo)記過程之后尺棋,CMS無法在本次收集中處理它們封锉,只好留待下一次GC時將其清理掉。這一部分垃圾稱為“浮動垃圾”膘螟。也是由于在垃圾收集階段用戶線程還需要運(yùn)行成福,
即需要預(yù)留足夠的內(nèi)存空間給用戶線程使用,因此CMS收集器不能像其他收集器那樣等到老年代幾乎完全被填滿了再進(jìn)行收集荆残,需要預(yù)留一部分內(nèi)存空間提供并發(fā)收集時的程序運(yùn)作使用奴艾。在默認(rèn)設(shè)置下,CMS收集器在老年代使用了68%的空間時就會被激活内斯,也可以通過參數(shù)-XX:CMSInitiatingOccupancyFraction的值來提供觸發(fā)百分比蕴潦,以降低內(nèi)存回收次數(shù)提高性能。要是CMS運(yùn)行期間預(yù)留的內(nèi)存無法滿足程序其他線程需要俘闯,就會出現(xiàn)“Concurrent Mode Failure”失敗潭苞,這時候虛擬機(jī)將啟動后備預(yù)案:臨時啟用Serial Old收集器來重新進(jìn)行老年代的垃圾收集,這樣停頓時間就很長了真朗。所以說參數(shù)-XX:CMSInitiatingOccupancyFraction設(shè)置的過高將會很容易導(dǎo)致“Concurrent Mode Failure”失敗此疹,性能反而降低。
  最后一個缺點(diǎn)蜜猾,CMS是基于“標(biāo)記-清除”算法實(shí)現(xiàn)的收集器秀菱,使用“標(biāo)記-清除”算法收集后振诬,會產(chǎn)生大量碎片蹭睡。空間碎片太多時赶么,將會給對象分配帶來很多麻煩肩豁,比如說大對象,內(nèi)存空間找不到連續(xù)的空間來分配不得不提前觸發(fā)一次Full  GC辫呻。為了解決這個問題清钥,CMS收集器提供了一個-XX:UseCMSCompactAtFullCollection開關(guān)參數(shù),用于在Full  GC之后增加一個碎片整理過程放闺,還可通過-XX:CMSFullGCBeforeCompaction參數(shù)設(shè)置執(zhí)行多少次不壓縮的Full  GC之后祟昭,跟著來一次碎片整理過程。


G1收集器
        G1(Garbage First)收集器是JDK1.7提供的一個新收集器怖侦,是當(dāng)今收集器技術(shù)發(fā)展的最前沿成果之一篡悟。G1是一款面向服務(wù)端應(yīng)用的垃圾收集器谜叹。HotSpot開發(fā)團(tuán)隊(duì)賦予它的使命是(在比較長期的)未來可以替換掉JDK1.5中發(fā)布的CMS收集器。
與其他GC收集器相比搬葬,G1具備如下特點(diǎn):
1荷腊、并行與并發(fā):G1能充分利用多CPU、多核環(huán)境下的硬件優(yōu)勢急凰,使用多個CPU(CPU或CPU核心)來縮短Stop-The-World停頓的時間女仰,部分其他收集器原本需要停頓Java線程執(zhí)行的GC動作,G1收集器仍然可以通過并發(fā)的方式讓Java程序繼續(xù)執(zhí)行抡锈。
2疾忍、分代收集:與其他收集器一樣,分代概念在G1中依然得以保留床三。雖然G1可以不需要其他收集器配合就能單獨(dú)管理整個GC堆锭碳,但它能夠采用不同的方式去處理新創(chuàng)建的對象和已經(jīng)存活了一段時間、熬過多次GC的舊對象已獲得更好的收集效果勿璃。
3擒抛、空間整合:與CMS的“標(biāo)記-清除”算法不同,G1收集器從整體上看是基于“標(biāo)記-整理”算法實(shí)現(xiàn)的补疑,從局部(兩個Region之間)上看是基于“復(fù)制”算法實(shí)現(xiàn)的歧沪,但無論如何,這兩種算法都意味著G1運(yùn)行期間不會產(chǎn)生內(nèi)存空間碎片莲组,收集后能提供規(guī)整的可用內(nèi)存诊胞。這種特性有利于程序的長時間運(yùn)行,分配大對象時不會因?yàn)闊o法找到連續(xù)內(nèi)存空間而提前觸發(fā)下一次GC锹杈。
4撵孤、可預(yù)測的停頓:這是G1相對于CMS的另一大優(yōu)勢,降低停頓時間是G1和CMS共同的關(guān)注點(diǎn)竭望,但G1除了追求低停頓外邪码,還能建立可預(yù)測的停頓時間模型,能讓使用者明確指定在一個長度為M毫秒的時間片段內(nèi)咬清,消耗在垃圾收集上的時間不得超過N毫秒闭专,這幾乎已經(jīng)是實(shí)時Java(RTSJ)的垃圾收集器的特征了。
 
  1. 垃圾回收算法的實(shí)現(xiàn)原理旧烧。
    look
1.引用計數(shù)法
2.標(biāo)記清除法
3.標(biāo)記壓縮
4.復(fù)制算法(高效影钉,新生代,老年代...)
  1. 當(dāng)出現(xiàn)了內(nèi)存溢出掘剪,你怎么排錯平委。

  2. JVM內(nèi)存模型的相關(guān)知識了解多少,比如重排序夺谁,內(nèi)存屏障廉赔,happen-before愚墓,主內(nèi)存,工作

內(nèi)存等昂勉。

  1. 簡單說說你了解的類加載器浪册,可以打破雙親委派么,怎么打破岗照。
    look

  2. 講講JAVA的反射機(jī)制村象。

  3. 你們線上應(yīng)用的JVM參數(shù)有哪些。
    look

  4. g1和cms區(qū)別,吞吐量優(yōu)先和響應(yīng)優(yōu)先的垃圾收集器選擇攒至。

  5. 怎么打出線程棧信息厚者。

  6. 請解釋如下jvm參數(shù)的含義:

-server -Xms512m -Xmx512m -Xss1024K

-XX:PermSize=256m -XX:MaxPermSize=512m -

XX:MaxTenuringThreshold=20XX:CMSInitiatingOccupancyFraction=80 -

XX:+UseCMSInitiatingOccupancyOnly。

Xms20M -Xmx20M:最小堆內(nèi)存和最大堆內(nèi)存設(shè)置為一樣是為了避免堆內(nèi)存的自動擴(kuò)展

-Xmn10M:新生代內(nèi)存分配10M迫吐,剩余的交給老年代

-XX:SurvivorRatio=8:新生代中Eden區(qū)和Survivor區(qū)的內(nèi)存比例為8:1

-XX:PermSize=32M:永久代最小內(nèi)存32M

-XX:MaxPermSize=64M:永久代最大擴(kuò)展內(nèi)存64M

-XX:+HeapDumpOnOutOfMemoryError:堆內(nèi)存溢出時Dump出當(dāng)前的內(nèi)存堆轉(zhuǎn)儲快照以便事后分析
 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末库菲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子志膀,更是在濱河造成了極大的恐慌熙宇,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溉浙,死亡現(xiàn)場離奇詭異烫止,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)戳稽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門馆蠕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惊奇,你說我怎么就攤上這事互躬。” “怎么了颂郎?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵吼渡,是天一觀的道長。 經(jīng)常有香客問我祖秒,道長诞吱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任竭缝,我火速辦了婚禮,結(jié)果婚禮上沼瘫,老公的妹妹穿的比我還像新娘抬纸。我一直安慰自己,他們只是感情好耿戚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布湿故。 她就那樣靜靜地躺著阿趁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坛猪。 梳的紋絲不亂的頭發(fā)上脖阵,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音墅茉,去河邊找鬼命黔。 笑死,一個胖子當(dāng)著我的面吹牛就斤,可吹牛的內(nèi)容都是我干的悍募。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼洋机,長吁一口氣:“原來是場噩夢啊……” “哼坠宴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绷旗,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤喜鼓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后衔肢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颠通,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年膀懈,在試婚紗的時候發(fā)現(xiàn)自己被綠了顿锰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡启搂,死狀恐怖硼控,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胳赌,我是刑警寧澤牢撼,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站疑苫,受9級特大地震影響熏版,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捍掺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一撼短、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挺勿,春花似錦曲横、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灾杰。三九已至,卻和暖如春熙参,著一層夾襖步出監(jiān)牢的瞬間艳吠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工孽椰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昭娩,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓弄屡,卻偏偏與公主長得像题禀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子膀捷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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

  • 內(nèi)存溢出和內(nèi)存泄漏的區(qū)別 內(nèi)存溢出:out of memory迈嘹,是指程序在申請內(nèi)存時,沒有足夠的內(nèi)存空間供其使用全庸,...
    Aimerwhy閱讀 741評論 0 1
  • 轉(zhuǎn)載blog.csdn.net/ning109314/article/details/10411495/ JVM工...
    forever_smile閱讀 5,366評論 1 56
  • Java 虛擬機(jī)有自己完善的硬件架構(gòu), 如處理器秀仲、堆棧、寄存器等壶笼,還具有相應(yīng)的指令系統(tǒng)神僵。JVM 屏蔽了與具體操作系...
    尹小凱閱讀 1,687評論 0 10
  • 目錄 一、背景 二覆劈、垃圾收集器比較 三保礼、常用JVM參數(shù) 四、垃圾收集器對比 五责语、關(guān)系圖 一炮障、背景 前面的章...
    愛吃糖果閱讀 864評論 0 0
  • http://www.cnblogs.com/angeldevil/p/3801189.html值得一看 Clas...
    snail_knight閱讀 1,423評論 1 0