JVM內(nèi)存分配與回收策略

前言

對象的內(nèi)存分配,往大方向講,就是在堆上分配(但也可能經(jīng)過JIT編譯后被拆散為標量類型并間接地棧上分配)盲厌,對象主要分配在新生代的Eden區(qū)上馒过,如果啟動了本地線程分配緩沖臭脓,將按線程優(yōu)先在TLAB上分配。少數(shù)情況下也可能會直接分配在老年代中腹忽,分配的規(guī)則并不是百分之百固定的来累,其細節(jié)取決于當前使用的是哪一種垃圾收集器組合,還有虛擬機中與內(nèi)存相關(guān)的參數(shù)的設(shè)置窘奏。

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

大多數(shù)情況下嘹锁,對象在新生代Eden區(qū)中分配。分配對象時着裹,假如Eden區(qū)沒有足夠空間容納該對象時领猾,虛擬機將發(fā)起一次Minor GC,經(jīng)過這次GC骇扇,Eden區(qū)中仍然存活的對象將被轉(zhuǎn)移到Survivor區(qū)摔竿,并且年齡對象設(shè)置為1,如果Survivor區(qū)也無法容納從Eden區(qū)轉(zhuǎn)移過來的對象少孝,就會通過分配擔保機制提前轉(zhuǎn)移到老年代去继低。對象在Survivor區(qū)中每“熬過”一次Minor GC,年齡就增加1歲稍走,當它的年齡增加到一定程度(默認為15歲)袁翁,就將會被晉升到老年代中冷溃。對象晉升老年代的年齡閾值,可以通過參數(shù)-XX:MaxTenuringThreshold設(shè)置梦裂。

大對象直接進入老年代

虛擬機提供了一個-XX:PretenureSizeThreshold參數(shù)似枕,令大于這個設(shè)置值的對象直接在老年代分配。由于新生代采用復(fù)制算法收集內(nèi)存年柠,這樣做的目的是避免在Eden區(qū)及兩個Survivor區(qū)之間發(fā)生大量的內(nèi)存復(fù)制凿歼。

注意 PretenureSizeThreshold參數(shù)只對Serial和ParNew兩款收集器有效,Parallel Scavenge收集器不認識這個參數(shù)冗恨,Parallel Scavenge收集器一般并不需要設(shè)置答憔。如果遇到必須使用此參數(shù)的場合,可以考慮ParNew加CMS的收集器組合掀抹。

長期存活的對象將進入老年代

虛擬機給每個對象定義了一個對象年齡(Age)計數(shù)器虐拓。如果對象在Eden出生并經(jīng)過第一次Minor GC后仍然存活,并且能被Survivor容納的話傲武,將被移動到Survivor空間中蓉驹,并且對象年齡設(shè)為1。對象在Survivor區(qū)中每“熬過”一次Minor GC揪利,年齡就增加1歲态兴,當它的年齡增加到一定程度(默認為15歲),就將會被晉升到老年代中疟位。對象晉升老年代的年齡閾值瞻润,可以通過參數(shù)-XX:MaxTenuringThreshold設(shè)置

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

為了能更好地適應(yīng)不同程序的內(nèi)存狀況,虛擬機并不是永遠地要求對象的年齡必須達到了MaxTenuringThreshold才能晉升老年代甜刻,如果在Survivor空間中相同年齡所有對象大小的總和大于Survivor空間的一半绍撞,年齡大于或等于該年齡的對象就可以直接進入老年代,無須等到MaxTenuringThreshold中要求的年齡得院。

空間分配擔保

在發(fā)生Minor GC之前傻铣,虛擬機會先檢查老年代最大可用的連續(xù)空間是否大于新生代所有對象總空間,如果這個條件成立尿招,那么Minor GC可以確保是安全的矾柜。如果不成立,則虛擬機會查看HandlePromotionFailure設(shè)置值是否允許擔保失敗就谜。如果允許怪蔑,那么會繼續(xù)檢查老年代最大可用的連續(xù)空間是否大于歷次晉升到老年代對象的平均大小,如果大于丧荐,將嘗試著進行一次Minor GC缆瓣,盡管這次Minor GC是有風(fēng)險的;如果小于虹统,或者HandlePromotionFailure設(shè)置不允許冒險弓坞,那這時也要改為進行一次Full GC隧甚。

JDK 6 Update 24之后的規(guī)則變?yōu)橹灰夏甏倪B續(xù)空間大于新生代對象總大小或者歷次晉升的平均大小就會進行Minor GC,否則將進行Full GC渡冻。

Minor GC和Full GC

新生代GC(Minor GC):指發(fā)生在新生代的垃圾收集動作戚扳,因為Java對象大多都具備朝生夕滅的特性,所以Minor GC非常頻繁族吻,一般回收速度也比較快帽借。

老年代GC(Major GC/Full GC):指發(fā)生在老年代的GC,出現(xiàn)了Major GC超歌,經(jīng)常會伴隨至少一次的Minor GC(但非絕對的砍艾,在Parallel Scavenge收集器的收集策略里就有直接進行Major GC的策略選擇過程)。Major GC的速度一般會比Minor GC慢10倍以上巍举。

參考整理自:《深入理解Java虛擬機:JVM高級特性與最佳實踐》 — 周志明

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脆荷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子懊悯,更是在濱河造成了極大的恐慌蜓谋,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件定枷,死亡現(xiàn)場離奇詭異孤澎,居然都是意外死亡,警方通過查閱死者的電腦和手機欠窒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來退子,“玉大人岖妄,你說我怎么就攤上這事〖畔椋” “怎么了荐虐?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丸凭。 經(jīng)常有香客問我福扬,道長,這世上最難降的妖魔是什么惜犀? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任铛碑,我火速辦了婚禮,結(jié)果婚禮上虽界,老公的妹妹穿的比我還像新娘汽烦。我一直安慰自己,他們只是感情好莉御,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布撇吞。 她就那樣靜靜地躺著俗冻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牍颈。 梳的紋絲不亂的頭發(fā)上迄薄,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音煮岁,去河邊找鬼讥蔽。 笑死,一個胖子當著我的面吹牛人乓,可吹牛的內(nèi)容都是我干的勤篮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼色罚,長吁一口氣:“原來是場噩夢啊……” “哼碰缔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戳护,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤金抡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后腌且,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梗肝,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年铺董,在試婚紗的時候發(fā)現(xiàn)自己被綠了巫击。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡精续,死狀恐怖坝锰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情重付,我是刑警寧澤顷级,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站确垫,受9級特大地震影響弓颈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜删掀,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一翔冀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧爬迟,春花似錦橘蜜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跌捆。三九已至,卻和暖如春象颖,著一層夾襖步出監(jiān)牢的瞬間佩厚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工说订, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抄瓦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓陶冷,卻偏偏與公主長得像钙姊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子埂伦,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

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