對象的產(chǎn)生流程:
new 一個(gè)對象淹办,編譯通過印荔,從新生代eden(見復(fù)制算法)分配內(nèi)存攻询,沒被回收進(jìn)入Survivor,年齡+1从撼,默認(rèn)經(jīng)過15次進(jìn)入老年代,或者survivor中同年齡的對象超過一半钧栖,就將這一半及其以上年齡的對象加入老年代低零。如果新生代存活對象超過survivor容量,則通過擔(dān)保直接進(jìn)入老年代拯杠,老年代空間足夠掏婶,否則進(jìn)行Full回收(速度慢)
什么對象需要回收:不與gc root關(guān)聯(lián)的對象
怎么查找:oopmap(通過hashcode檢索)
什么時(shí)候執(zhí)行:在安全點(diǎn)和安全區(qū)域執(zhí)行
為什么在這些時(shí)間執(zhí)行?
因?yàn)閳?zhí)行g(shù)c時(shí)所有線程要停止潭陪,在運(yùn)行的線程發(fā)現(xiàn)gc開始進(jìn)入安全點(diǎn)雄妥,在等待的線程進(jìn)入安全區(qū)域,出安全區(qū)域時(shí)依溯,先查看jvm是否在gc狀態(tài)老厌,不在gc狀態(tài)時(shí)正常運(yùn)行;否則繼續(xù)等待
怎么回收對象:根據(jù)活動(dòng)周期將對象分為新生代和老年代黎炉,用收集器回收
7種收集器
1Serial收集器 默認(rèn)收集器(相對簡單高效)
用戶線程->安全點(diǎn)(暫停其它線程)->判斷新生代->復(fù)制算法(gc單線程)->用戶線程->安全點(diǎn)(暫停其它線程)->判斷老年代->標(biāo)記整理算法(gc單線程)->用戶線程
2ParNew收集器 Serial收集器的多線程版本
用戶線程->安全點(diǎn)(暫停其它線程)->判斷新生代->復(fù)制算法(gc多線程)->用戶線程->安全點(diǎn)(暫停其它線程)->判斷老年代->標(biāo)記整理算法(gc單線程)->用戶線程
3Parallel Scavenge收集器
新生代收集器枝秤,基本和ParNew一樣
適合后臺運(yùn)算不需要太多交互的任務(wù)
通過降低gc回收時(shí)間(犧牲吞吐量和新生代空間)提高效率,但是回收時(shí)間過短會導(dǎo)致回收次數(shù)增多
gc自適應(yīng)調(diào)節(jié):根據(jù)當(dāng)前系統(tǒng)的運(yùn)行狀況慷嗜,動(dòng)態(tài)調(diào)整gc回收時(shí)間和最大吞吐量
吞吐量:程序運(yùn)行時(shí)間/(程序運(yùn)行時(shí)間+gc時(shí)間)
4Serial Old收集器 老年代收集器
作用:
1與Parallel Scavenge收集器搭配使用(jdk1.5及之前)
2Cms收集器的備選方案
5Parallel Old收集器
Parallel Scavenge收集器的老年代版本淀弹,在該收集器出現(xiàn)之前選擇Parallel Scavenge收集器只能選擇Serial Old收集器收集老年代so,性能很低。
1.5以后采用該收集器收集老年代庆械,適合注重吞吐量及cpu資源的場合
新生代和老年代都采用多線程GC
6CMs 收集器
獲取最短回收停頓的收集器薇溃,適合b/s系統(tǒng),基于標(biāo)記清除算法缭乘,共4個(gè)步驟:
初始標(biāo)記痊焊,并發(fā)標(biāo)記,重新標(biāo)記,并發(fā)清除
耗時(shí)操作只有初始標(biāo)記和重新標(biāo)記薄啥。
缺點(diǎn):
1并發(fā)占用線程辕羽,可能導(dǎo)致程序變慢,總吞吐量降低垄惧,當(dāng)cpu是4核以上速度該缺點(diǎn)弱化
2無法處理浮動(dòng)垃圾刁愿,由于清理是并發(fā)進(jìn)行,所以清理是也會產(chǎn)生垃圾到逊,所以需要預(yù)制一段內(nèi)存來讓存儲信息铣口,如果預(yù)制內(nèi)存不夠?qū)?dǎo)致回收失敗,同時(shí)啟動(dòng)預(yù)備的Serial Old收集器收集老年代觉壶,而這個(gè)耗時(shí)較久
3采用標(biāo)記清除算法脑题,產(chǎn)生內(nèi)存碎片多,而當(dāng)內(nèi)存碎片多到無法分配對象時(shí)铜靶,會進(jìn)行一次內(nèi)存整理叔遂,耗時(shí)較久
7G1收集器
技術(shù)最前沿;面向服務(wù)端應(yīng)用的垃圾收集器
特點(diǎn):并行并發(fā)縮短停頓争剿,分代收集:可獨(dú)立管理整個(gè)GC堆已艰,采用標(biāo)記整理算法,可預(yù)測停頓時(shí)間蚕苇,將整個(gè)堆劃分成多個(gè)獨(dú)立區(qū)域(Region)哩掺,不隔離新生代和老年代;對Region分配垃圾堆積價(jià)值涩笤,值越大嚼吞,越優(yōu)先回收
過程:初始標(biāo)記,并發(fā)標(biāo)記蹬碧,最終標(biāo)記舱禽,篩選回收
與cms不同的是最終標(biāo)記也是并發(fā)的