3.垃圾收集器及內(nèi)存分配策略

垃圾收集器

Serial收集器(新生代):?jiǎn)尉€程黄娘,工作時(shí)必須暫停其他線程(stop the world)伶贰,單線程效率最高迅脐,適用于client模式下的虛擬機(jī)愁溜。
ParNew即Parallel New收集器(新生代):Serial收集器的多線程版本疾嗅,唯一能與CMS收集器結(jié)合使用的收集器,默認(rèn)GC線程數(shù)與CPU數(shù)量相同冕象,可通過(guò)-XX:ParallelGCThreads參數(shù)來(lái)限制垃圾回收的線程數(shù)代承。
Parallel Scavenge收集器(新生代):注重可控制的吞吐量。(運(yùn)行用戶代碼時(shí)間/(運(yùn)行用戶代碼時(shí)間+垃圾收集時(shí)間))渐扮,適合少交互的后臺(tái)運(yùn)算论悴。-XX:MaxGCPauseMillis設(shè)置最大垃圾收集停頓時(shí)間(代價(jià):犧牲吞吐量與新生代空間掖棉,新生代調(diào)小會(huì)導(dǎo)致GC頻繁)、XX:GCTimeRatio設(shè)置吞吐量大小膀估、-XX:+UseAdaptiveSizePolicy(系統(tǒng)根據(jù)性能監(jiān)控信息幔亥,動(dòng)態(tài)調(diào)整參數(shù))。自適應(yīng)調(diào)節(jié)策略是Parallel Scavenge和ParNew的重要區(qū)別玖像。
Serial Old收集器(老年代):Serail收集器的老年代版本紫谷。使用標(biāo)記-整理算法。用途:在JDK1.5之前與Parallel Scavenge搭配使用捐寥、作為CMS收集器后備預(yù)案(發(fā)生Concurent Mode Failure)笤昨。
Parallel Old收集器(老年代):Parallel Scavenge收集器的老年代版本,使用“標(biāo)記-整理”算法握恳,用于注重吞吐量以及CPU資源敏感的場(chǎng)合
CMS收集器(老年代):分為初始標(biāo)記(STW)瞒窒、并發(fā)標(biāo)記、重新標(biāo)記(STW)乡洼、并發(fā)清除崇裁。
詳情參考,巨巨說(shuō)的很明白了束昵。CMS收集器詳解
G1收集器G1收集器拔稳,還沒(méi)看懂,還要反回去看锹雏。

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

1.對(duì)象優(yōu)先在eden分配
當(dāng)eden空間不足以分配的時(shí)候巴比,則發(fā)生mirror gc。當(dāng)Mirror gc發(fā)現(xiàn)已有的對(duì)象無(wú)法放入survivor區(qū)時(shí)礁遵,通過(guò)擔(dān)保機(jī)制將已有對(duì)象轉(zhuǎn)移到老年區(qū)轻绞。(SerialGC、ParNewGC)

-XX:+PrintGCDetails -XX:+UseSerialGC -Xms20m -Xmx20m -Xmn10m -XX:SurvivorRatio=8

2.大對(duì)象直接在老年代分配
-XX:+PretenureSizeThreshold佣耐,當(dāng)大于這個(gè)設(shè)置值的對(duì)象政勃,直接在老年代分配(SerialGC、ParNewGC)兼砖。

-XX:+PrintGCDetails -XX:+UseSerialGC -Xms20m -Xmx20m -Xmn10m -XX:SurvivorRatio=8 -XX:PretenureSizeThreshold=3145728

3.長(zhǎng)期存活的對(duì)象將進(jìn)入老年代
若對(duì)象在eden出生奸远,經(jīng)過(guò)第一次GC能進(jìn)入survivor區(qū),仍然存活掖鱼,則歲數(shù)為1然走。每一次存活,則歲數(shù)+1戏挡。MaxTenuringThreshold該參數(shù)指定了歲數(shù)到多少的新生代對(duì)象將進(jìn)入老年代。

-verbose:gc -XX:+UseSerialGC -Xms20m -Xmx20m -Xmn10m -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=1 -XX:+PrintTenuringDistribution

    public static void testTenuringThreshold(){
        byte[] a1,a2,a3;
        a1= new byte[oneMB/4];
        a2=new byte[oneMB*4];
        a3=new byte[oneMB*4];
        a3=null;
        a3=new byte[oneMB*4];
    }
[GC (Allocation Failure) [DefNew
Desired survivor size 524288 bytes, new threshold 1 (max 1)
- age   1:     981656 bytes,     981656 total
: 6505K->958K(9216K), 0.0038322 secs] 6505K->5054K(19456K), 0.0038761 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]   
//第一次GC晨仑,Allocation Failure表明是因?yàn)闊o(wú)法分配eden內(nèi)存產(chǎn)生的GC褐墅,即無(wú)法給a3在eden空間分配內(nèi)存拆檬,此時(shí),由于a1<survivor1妥凳,則a1進(jìn)入survivor竟贯,a2由于擔(dān)保機(jī)制進(jìn)入老年代
[GC (Allocation Failure) [DefNew
Desired survivor size 524288 bytes, new threshold 1 (max 1)
- age   1:       2136 bytes,       2136 total
: 5138K->2K(9216K), 0.0020616 secs] 9234K->5052K(19456K), 0.0020883 secs] [Times: user=0.02 sys=0.00, real=0.00 secs] 
Heap
 def new generation   total 9216K, used 4317K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
  eden space 8192K,  52% used [0x00000000fec00000, 0x00000000ff036bb0, 0x00000000ff400000)
  from space 1024K,   0% used [0x00000000ff400000, 0x00000000ff400858, 0x00000000ff500000)
  to   space 1024K,   0% used [0x00000000ff500000, 0x00000000ff500000, 0x00000000ff600000)
 tenured generation   total 10240K, used 5050K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
   the space 10240K,  49% used [0x00000000ff600000, 0x00000000ffaeeab8, 0x00000000ffaeec00, 0x0000000100000000)
 Metaspace       used 3366K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 369K, capacity 388K, committed 512K, reserved 1048576K
//第二次GC,a1由于年齡到了1歲逝钥,則進(jìn)入老年代屑那,則survivor used 0%(From Survivor區(qū)域與To Survivor區(qū)域是交替切換空間,在同一時(shí)間內(nèi)兩者中只有一個(gè)不為空)艘款,a3old被gc持际,a3new則在eden區(qū)生成

4.動(dòng)態(tài)對(duì)象年齡判定
若survivor區(qū)中,size[o1]+size[o2]+……+size[on]>=survivor/2哗咆,且age[o1]==age[o2]==……==age[on]蜘欲,則o1,o2,o3……on一起進(jìn)入老年區(qū)。此時(shí)并不需要o1.age>=MaxTenuringThreshold

-verbose:gc -XX:+UseSerialGC -Xms20m -Xmx20m -Xmn10m -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=15 -XX:+PrintTenuringDistribution

 public static void testTenuringThreshold2() {
        byte[] a1, a2, a3, a4;
        a1 = new byte[oneMB / 4];
        a2 = new byte[oneMB / 4];
        a3 = new byte[oneMB * 4];
        a4 = new byte[oneMB * 4];
        a4 = null;
        a4 = new byte[oneMB * 4];
    }

5.空間分配擔(dān)保
用于minorGC前的檢查策略晌柬。-XX:HandlePromotionFailure=true

minorGC前檢查.png

在JDK6 update24后姥份,廢棄HandlePromotionFailur,即老年代連續(xù)最大空間>新生代所有對(duì)象總大小年碘,或大于歷次晉升對(duì)象平均大小澈歉,則進(jìn)行minorGC,否則進(jìn)行fullGC

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屿衅,一起剝皮案震驚了整個(gè)濱河市埃难,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌傲诵,老刑警劉巖凯砍,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異拴竹,居然都是意外死亡悟衩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門栓拜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)座泳,“玉大人,你說(shuō)我怎么就攤上這事幕与√羰疲” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵啦鸣,是天一觀的道長(zhǎng)潮饱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)诫给,這世上最難降的妖魔是什么香拉? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任啦扬,我火速辦了婚禮,結(jié)果婚禮上凫碌,老公的妹妹穿的比我還像新娘扑毡。我一直安慰自己,他們只是感情好盛险,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布瞄摊。 她就那樣靜靜地躺著,像睡著了一般苦掘。 火紅的嫁衣襯著肌膚如雪换帜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天鸟蜡,我揣著相機(jī)與錄音膜赃,去河邊找鬼。 笑死揉忘,一個(gè)胖子當(dāng)著我的面吹牛跳座,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泣矛,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疲眷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了您朽?” 一聲冷哼從身側(cè)響起狂丝,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哗总,沒(méi)想到半個(gè)月后几颜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讯屈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年蛋哭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涮母。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谆趾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叛本,到底是詐尸還是另有隱情沪蓬,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布来候,位于F島的核電站跷叉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜性芬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一峡眶、第九天 我趴在偏房一處隱蔽的房頂上張望剧防。 院中可真熱鬧植锉,春花似錦、人聲如沸峭拘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸡挠。三九已至辉饱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拣展,已是汗流浹背彭沼。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工智什, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祥绞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓配乱,卻偏偏與公主長(zhǎng)得像按脚,于是被迫代替她去往敵國(guó)和親于毙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353