4. 垃圾回收- 4.3垃圾收集器
下面一張圖是HotSpot虛擬機(jī)包含的所有收集器,圖是借用過來滴:
- Serial收集器(復(fù)制算法)
新生代單線程收集器,標(biāo)記和清理都是單線程,優(yōu)點(diǎn)是簡單高效。是client級別默認(rèn)的GC方式,可以通過-XX:+UseSerialGC來強(qiáng)制指定。 - Serial Old收集器(標(biāo)記-整理算法)
老年代單線程收集器,Serial收集器的老年代版本。 - ParNew收集器(停止-復(fù)制算法)
新生代收集器,可以認(rèn)為是Serial收集器的多線程版本,在多核CPU環(huán)境下有著比Serial更好的表現(xiàn)。 - Parallel Scavenge收集器(停止-復(fù)制算法)
并行收集器,追求高吞吐量,高效利用CPU。吞吐量一般為99%, 吞吐量= 用戶線程時(shí)間/(用戶線程時(shí)間+GC線程時(shí)間)。適合后臺應(yīng)用等對交互相應(yīng)要求不高的場景。是server級別默認(rèn)采用的GC方式,可用-XX:+UseParallelGC來強(qiáng)制指定,用-XX:ParallelGCThreads=4來指定線程數(shù)。- Parallel Old收集器(停止-復(fù)制算法)
Parallel Scavenge收集器的老年代版本,并行收集器,吞吐量優(yōu)先。 - CMS(Concurrent Mark Sweep)收集器(標(biāo)記-清理算法)
高并發(fā)、低停頓,追求最短GC回收停頓時(shí)間,cpu占用比較高,響應(yīng)時(shí)間快,停頓時(shí)間短,多核cpu 追求高響應(yīng)時(shí)間的選擇。 - CMS 和G1的垃圾回收器的原理,阿里的面試官也問過,我專門做了專題:
- Parallel Old收集器(停止-復(fù)制算法)
圖解-CMS垃圾回收機(jī)制原理 --阿里面試題
CMS收集器和G1收集器優(yōu)缺點(diǎn)
G1垃圾收集器入門
GC是什么時(shí)候觸發(fā)的(面試最常見的問題之一)
??由于對象進(jìn)行了分代處理,因此垃圾回收區(qū)域、時(shí)間也不一樣。GC有兩種類型:Scavenge GC和Full GC。
Scavenge GC
??一般情況下,當(dāng)新對象生成,并且在Eden申請空間失敗時(shí),就會觸發(fā)Scavenge GC,對Eden區(qū)域進(jìn)行GC,清除非存活對象,并且把尚且存活的對象移動到Survivor區(qū)。然后整理Survivor的兩個(gè)區(qū)。這種方式的GC是對年輕代的Eden區(qū)進(jìn)行,不會影響到年老代。因?yàn)榇蟛糠謱ο蠖际菑腅den區(qū)開始的,同時(shí)Eden區(qū)不會分配的很大,所以Eden區(qū)的GC會頻繁進(jìn)行。因而,一般在這里需要使用速度快、效率高的算法,使Eden去能盡快空閑出來。
Full GC
對整個(gè)堆進(jìn)行整理,包括Young、Tenured和Perm。Full GC因?yàn)樾枰獙φ麄€(gè)堆進(jìn)行回收,所以比Scavenge GC要慢,因此應(yīng)該盡可能減少Full GC的次數(shù)。在對JVM調(diào)優(yōu)的過程中,很大一部分工作就是對于Full GC的調(diào)節(jié)。有如下原因可能導(dǎo)致Full GC:
a) 年老代(Tenured)被寫滿;
b) 持久代(Perm)被寫滿;
c) System.gc()被顯示調(diào)用;
d) 上一次GC之后Heap的各域分配策略動態(tài)變化;
?
下一篇:內(nèi)存分配
?
原文鏈接:https://www.cnblogs.com/aspirant/p/8662690.html
轉(zhuǎn)載于:https://www.cnblogs.com/wangfajun/p/9916339.html
總結(jié)
以上是生活随笔為你收集整理的4. 垃圾回收- 4.3垃圾收集器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#开启线程的四种方式
- 下一篇: [ ZooKeeper]ZooKeepe