搞定常见垃圾收集器【Java】
(1)JVM的運(yùn)行模式
Server
Client
Client的啟動(dòng)比Server模式快,但是長(zhǎng)期運(yùn)行進(jìn)入穩(wěn)定期后Server模式的程序運(yùn)行速度會(huì)比Client快,這是因?yàn)镾erver模式啟動(dòng)的是重量級(jí)的JVM,對(duì)程序進(jìn)行了更多了優(yōu)化。
命令行執(zhí)行java -version即可查詢自己電腦上的JVM運(yùn)行模式:
(2)垃圾收集器之間的聯(lián)系
不同的垃圾收集器可能針對(duì)不同的年代,有連線代表可以兼容。
(3)常見的年輕代垃圾收集器
Serial收集器
采用復(fù)制算法,采用單線程進(jìn)行垃圾收集,在進(jìn)行垃圾收集時(shí),必須暫停所有工作線程("Stop-The-World",導(dǎo)致系統(tǒng)全局停頓),簡(jiǎn)單高效,Client模式下默認(rèn)的年輕代收集器。
Par New收集器
采用復(fù)制算法,采用多線程進(jìn)行垃圾收集,在進(jìn)行垃圾收集時(shí),必須暫停所有工作線程,在多核下執(zhí)行有優(yōu)勢(shì)。
Parallel Scavenge收集器
采用復(fù)制算法,采用多線程進(jìn)行垃圾收集,在進(jìn)行垃圾收集時(shí),必須暫停所有工作線程,在多核下執(zhí)行有優(yōu)勢(shì),Server模式下默認(rèn)的年輕代收集器。
?
(4)常見的老年代垃圾收集器
Serial Old收集器
采用標(biāo)記-整理算法,采用單線程進(jìn)行垃圾收集,在進(jìn)行垃圾收集時(shí),必須暫停所有工作線程,簡(jiǎn)單高效,Client和Server模式下默認(rèn)的老年代收集器。
Parallel??Old收集器
采用標(biāo)記-整理算法算法,采用多線程進(jìn)行垃圾收集,在進(jìn)行垃圾收集時(shí),必須暫停所有工作線程,在多核下執(zhí)行有優(yōu)勢(shì)。
CMS收集器
采用標(biāo)記-清除算法,比較明顯的問題就是容易產(chǎn)生大量的內(nèi)存碎片,優(yōu)點(diǎn)是并發(fā)清理低停頓,因?yàn)樵谡麄€(gè)過程和中最耗時(shí)的并發(fā)標(biāo)記和并發(fā)清除過程收集器程序都可以和用戶線程一起工作,所以總體來說,Cms收集器的內(nèi)存回收過程是與用戶線程一起并發(fā)執(zhí)行的。
1. 初始標(biāo)記:僅僅是標(biāo)記一下GC roots 能直接關(guān)聯(lián)的對(duì)象,速度很快 ?
2. 并發(fā)標(biāo)記:就是進(jìn)行可達(dá)對(duì)象標(biāo)記過程?
3. 重新標(biāo)記:重新標(biāo)記階段就是為了修正并發(fā)標(biāo)記期間因?yàn)橛脩舫绦蚶^續(xù)運(yùn)行而導(dǎo)致標(biāo)記產(chǎn)生變動(dòng)的那一部分對(duì)象的標(biāo)記記錄,這個(gè)階段的停頓時(shí)間一般會(huì)比初始標(biāo)記階段的時(shí)間稍長(zhǎng),遠(yuǎn)遠(yuǎn)比并發(fā)標(biāo)記階段時(shí)間短
4. 并發(fā)清理:并發(fā)進(jìn)行垃圾清理
(5)同時(shí)用于年輕代和老年代的垃圾收集器
- G1收集器
采用復(fù)制+標(biāo)記-整理算法,可以同時(shí)對(duì)年輕代和老年代進(jìn)行管理,同時(shí)解決了內(nèi)存碎片的問題。
總結(jié)
以上是生活随笔為你收集整理的搞定常见垃圾收集器【Java】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java计算一段程序的运行时间
- 下一篇: Java死锁、活锁,悲观锁、乐观锁