1.串行垃圾回收器
從標(biāo)題我們就可以知道他嚷,所謂的串行就是指我們的這個(gè)垃圾回收器是單線程的
所謂的單線程就是指當(dāng)用戶到達(dá)安全點(diǎn)后,垃圾回收進(jìn)程進(jìn)行,此時(shí)用戶進(jìn)程會(huì)被阻塞丹允,只有垃圾回收線程會(huì)運(yùn)行。
因此串行垃圾回收適用于內(nèi)存較小袋倔,cpu數(shù)目較小的雕蔽,如個(gè)人電腦
下面是相關(guān)的運(yùn)行簡圖
### 吞吐量優(yōu)先垃圾回收器
特點(diǎn):
多線程
適用場景:堆內(nèi)存較大,多核
***注重單位時(shí)間內(nèi)宾娜,STW的時(shí)間最短***
打個(gè)比方就是吞吐量要求我們?cè)?分鐘內(nèi)STW次數(shù)少批狐,這樣數(shù)據(jù)的吞吐量就占用的比例就會(huì)比較大
-XX:+UseParallelGC ~ -XX:+UseParallelOldGC?
并行垃圾回收(只要開啟其中一個(gè),另外一個(gè)也會(huì)開啟)
-XX:+UseAdaptiveSizePolicy? ?
采用自適應(yīng)的調(diào)整新生代的大小
-XX:GCTimeRatio=ratio
吞吐量的目標(biāo) 調(diào)整垃圾回收的時(shí)間和總時(shí)間的占比 1/1+ratio 垃圾回收的時(shí)間(暫停時(shí)間) 不能超過此值
-XX:MaxGCPauseMillis=ms 默認(rèn)值為200ms
-XX:ParallelGCThreads=n? 控制cpu的數(shù)目
### 響應(yīng)時(shí)間優(yōu)先(老年代的垃圾回收器)
**特點(diǎn):**
**多線程**
**使用場景:堆內(nèi)存較大碳默,多核cpu贾陷,盡可能讓單次STW的時(shí)間最短**
我們可以這樣理解吞吐量垃圾回收器于響應(yīng)時(shí)間優(yōu)先回收器的側(cè)重點(diǎn):
打個(gè)比方,吞吐量就是你一天內(nèi)用來玩的次數(shù)比較少嘱根,但是你每次玩的時(shí)間比較多(我就喜歡這種)
而響應(yīng)時(shí)間優(yōu)先可以認(rèn)為你每天玩的次數(shù)比較多髓废,但是你每次玩的時(shí)間比較少。
在這里我們先解釋一下并發(fā)與并行的區(qū)別:
**并發(fā):垃圾回收線程和用戶的其他的線程同時(shí)進(jìn)行
并行:垃圾回收線程是同時(shí)進(jìn)行的该抒,但是不允許用戶的其他線程進(jìn)行**
我們?cè)诶夏甏\(yùn)用的垃圾清理算法是:標(biāo)記清除或整理算法
從運(yùn)行圖中我們可以發(fā)現(xiàn)幾個(gè)問題:
1. 在并發(fā)清理的過程中慌洪,其他的用戶線程仍然在運(yùn)行,則會(huì)導(dǎo)致產(chǎn)生新的垃圾凑保,我們將此記為浮動(dòng)垃圾冈爹,那么我們?cè)撊绾吻宄@些浮動(dòng)垃圾呢?當(dāng)然你也可以選擇等下一次垃圾回收的時(shí)候再清除欧引,就像你洗碗的時(shí)候频伤,又有人給你一個(gè)碗(或者你當(dāng)助教作業(yè)快改完了,又有人交作業(yè)芝此,你可以選擇下次再改)那么憋肖,作為負(fù)責(zé)任的助教(像我一樣)因痛,我們?cè)撊绾翁幚砟兀?/p>
? ? ? -XX:CMSInitiatingOccupancyFraction=percent? 為那些浮動(dòng)垃圾設(shè)置的CMS的觸發(fā)時(shí)機(jī),這個(gè)是我們自己設(shè)置的岸更。就相當(dāng)于一個(gè)人交了作業(yè)我下次再改鸵膏,但是我想要是再有10個(gè)人交,我就不等下次了怎炊。
2. **減小重新標(biāo)記的壓力**
-XX:+CMSScavengeBeforeRemark//用于在重新標(biāo)記之前將新生代的垃圾回收 減輕我們重新標(biāo)記的壓力
存在的問題:若內(nèi)存碎片過多谭企,會(huì)導(dǎo)致CMS變化為SerialOld,這時(shí)垃圾回收的時(shí)間會(huì)大大增加
轉(zhuǎn)自我的csdn--https://blog.csdn.net/tongmengww