JVM內(nèi)存管理—內(nèi)存回收—對象在不同分區(qū)上分配

以下為對象在內(nèi)存中分配的規(guī)則,這些規(guī)則并不是百分之百固定的,其細(xì)節(jié)取決于正在使用的垃圾收集策略,當(dāng)然還有與虛擬機的內(nèi)存相關(guān)參數(shù)設(shè)置有關(guān)道盏。

1. 對象優(yōu)先在Eden分配

一般,對象在新生代Eden區(qū)中分配文捶,當(dāng)Eden區(qū)沒有足夠空間進(jìn)行分配時(一般不會將新生對象直接放入Survivor中荷逞,它只保存上一次GC還存活的對象),虛擬機將發(fā)生一次Minor GC(當(dāng)Eden空間不足粹排,就會發(fā)生對新生代的GC)种远。

2. 大對象直接進(jìn)入老年代

所謂的大對象是指,需要大量連續(xù)內(nèi)存空間的Java對象顽耳,最經(jīng)典的大對象就是那種很長的字符串以及數(shù)組坠敷。經(jīng)常出現(xiàn)大對象容易導(dǎo)致內(nèi)存還有不少空間時就提前出發(fā)垃圾收集。所以應(yīng)當(dāng)盡量避免短命大對象的使用射富。

3. 長期存活的對象將進(jìn)入老年代

對象的年齡:虛擬機給每個對象定義了一個對象年齡計數(shù)器膝迎,如果對象在Eden出生并經(jīng)過第一次的MinorGC后仍然存活,并且能被Survivor區(qū)中每“熬過”一次Minor GC胰耗,年齡就增加一歲限次,當(dāng)它的年齡增加到一定程度(默認(rèn)為15歲),就會被晉升到老年代中柴灯。

4. 動態(tài)對象年齡判定

為了更好的適應(yīng)不同程度的內(nèi)存狀況卖漫,虛擬機并不是永遠(yuǎn)地要求對象的年齡必須達(dá)到閥值才能晉升老年代费尽,如果Survivor空間中相同年齡所有對象大小的總和大于Survivor空間的一半,年齡大于或等于該年齡的對象就可以直接進(jìn)入老年代懊亡,無須等到閥值中要求的年齡依啰。

5. 空間分配擔(dān)保

  1. 在發(fā)生MinorGC之前乎串,虛擬機會先檢查老年代最大可用的連續(xù)空間是否大于新生代所有對象的總空間店枣,如果這個條件成立,那么Minor GC 可以確保是安全的叹誉。
  2. 如果不成立鸯两,則虛擬機會查看HandlePromotionFailure設(shè)置值是否允許擔(dān)保失敗。如果允許长豁,那么會繼續(xù)查找老年代最大可用的連續(xù)空間是否大于歷次晉升到老年代對象的平均大小钧唐,如果大于,將嘗試著進(jìn)行一次Minor GC匠襟,盡管這次MinorGC是有風(fēng)險的
  3. 如果小于钝侠,或者HandlePromotionFailure設(shè)置不允許冒險,那這時也要改為進(jìn)行一次Full GC酸舍。

觸發(fā)Full GC的五種情況

  1. 直接調(diào)用System.gc()
  2. 老年代空間不足
  3. 永久代空間滿

Java 8 中已經(jīng)移除了永久代帅韧,改用元空間。元空間的本質(zhì)和永久代類似啃勉,都是對JVM規(guī)范中方法區(qū)的實現(xiàn)忽舟。不過元空間與永久代之間最大的區(qū)別在于:元空間并不在虛擬機中,而是使用本地內(nèi)存淮阐。因此叮阅,默認(rèn)情況下,元空間的大小僅受本地內(nèi)存限制泣特。
Minor GC 會清理新生代(滿或者無法分配大對象)浩姥,Major GC是清理永久代。Full GC是清理整個堆空間——包括新生代和老年代状您。

  1. 在使用CMS策略對老年代進(jìn)行垃圾回收時
  • promotion failed: 進(jìn)行Minor GC時及刻,Survivor 放不下上一次存活的對象,對象只能放入老年代竞阐,而此時老年代也放不下造成的缴饭。
  • concurrent mode failure:在執(zhí)行CMS GC的過程中同時有對象要放入老年代,而此時老年代空間不足造成的骆莹。
  1. 統(tǒng)計得到的Minor GC 晉升到老年代的平均大小大于老年代的剩余空間

HotSpot 為了避免由于新生代對象晉升到老年代導(dǎo)致老年代空間不足的現(xiàn)象颗搂,在進(jìn)行Minor GC時,做了有一個判斷幕垦,如果之前統(tǒng)計所得的MInor GC 晉升到老年代的平均大小大于老年代的剩余空間丢氢,那么就直接觸發(fā) Full GC傅联。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疚察,隨后出現(xiàn)的幾起案子蒸走,更是在濱河造成了極大的恐慌,老刑警劉巖貌嫡,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件比驻,死亡現(xiàn)場離奇詭異,居然都是意外死亡岛抄,警方通過查閱死者的電腦和手機别惦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夫椭,“玉大人掸掸,你說我怎么就攤上這事〔淝铮” “怎么了扰付?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長仁讨。 經(jīng)常有香客問我羽莺,道長,這世上最難降的妖魔是什么陪竿? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任禽翼,我火速辦了婚禮,結(jié)果婚禮上族跛,老公的妹妹穿的比我還像新娘闰挡。我一直安慰自己,他們只是感情好礁哄,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布长酗。 她就那樣靜靜地躺著,像睡著了一般桐绒。 火紅的嫁衣襯著肌膚如雪夺脾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天茉继,我揣著相機與錄音咧叭,去河邊找鬼。 笑死烁竭,一個胖子當(dāng)著我的面吹牛菲茬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼婉弹,長吁一口氣:“原來是場噩夢啊……” “哼睬魂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起镀赌,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤氯哮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后商佛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喉钢,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年威彰,在試婚紗的時候發(fā)現(xiàn)自己被綠了出牧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穴肘。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡歇盼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出评抚,到底是詐尸還是另有隱情豹缀,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布慨代,位于F島的核電站邢笙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏侍匙。R本人自食惡果不足惜氮惯,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望想暗。 院中可真熱鬧妇汗,春花似錦、人聲如沸说莫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽储狭。三九已至互婿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辽狈,已是汗流浹背慈参。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刮萌,地道東北人驮配。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親僧凤。 傳聞我的和親對象是個殘疾皇子畜侦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

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