GC

對象被斷定爲垃圾的標準
沒有被其餘對象引用算法

斷定對象是否爲垃圾的算法
1.引用計數算法優化

clipboard.png

優缺點:
解釋:循環引用就是父類調用子類,子類再調用父類,這樣循環調用,計數永遠不可能爲0,,最後致使內存泄露,程序變慢,嚴重還可能系統崩潰。
clipboard.pngspa

2.可達性分析算法3d

clipboard.png

可做爲GCRoots的對象對象

clipboard.png

垃圾回收算法blog

第一種垃圾回收算法:標記-清除算法
clipboard.png排序

缺點:
clipboard.pngip

第二種垃圾回收算法:複製算法內存

clipboard.png
好處和應用場景
適用於對象存活率比較低的狀況,由於從對象面複製到空閒面開銷比較小
clipboard.pngit

第三種:標記-整理算法

clipboard.png
標記整理算法適用於對象存活率比較高的狀況下,和複製算法相比,標記整理算法是排序存活對象,開銷要比複製算法中的複製對象到空閒面要低得多
clipboard.png

第四種:分代垃圾回收算法

clipboard.png
jdk8及其之後的版本堆內存分爲年輕代和老年代
年輕代存活率低,採用複製算法,老年代存活 率高採用標記-整理算法
clipboard.png

分代收集的算法分爲兩種

clipboard.png

clipboard.png

年輕代垃圾回收的過程演示
年輕代有大量的對象的建立,因此MinorGC也比較頻繁。
假如說Eden能裝4個對象,from survivor和to survivor能裝3個對象
第一次Eden滿了進行一次MinorGC,有一個對象生存下來,而後放在from survivor中,而且年齡加1。
第二次Eden滿了,而後有兩個對象生存下來,而後把from survivor和Eden中存活的對象都放進to survivor中,而且年齡加1。
第三次Eden滿了,而後有一個對象生存下來,而且to survivor中有一個對象須要被清理,而後把to survivor和Eden中存活的對象都放進from survivor中,年齡加1。
因此from survivor和to survivor是相對的
survivor的對象達到15歲則進入老年代,還有若是一個對象過大,在Eden和survivor中沒有這麼大的連續空間來存放這個對象時,該對象能夠直接進入老年代
第一次MinorGC
clipboard.png
第二次MinorGC
clipboard.png

clipboard.png

第三次MinorGC
clipboard.png

clipboard.png

對象如何晉升到老年代

能夠設置大對象的值,一旦超過這個值就進入老年代
clipboard.png

經常使用的調優參數

clipboard.png

老年代

clipboard.png

clipboard.png

觸發Full GC的條件

clipboard.png

幾個名詞的解釋:
Stop-the-World

clipboard.png

Safepoint

clipboard.png

JVM有兩種運行模式:1.Server模式2.Client模式
Client模式啓動速度比Server模式要快,而Server模式對JVM進行了優化,啓動慢,可是當Server運行穩定以後,速度是快於Client的

垃圾收集器之間的聯繫

clipboard.png

年輕代垃圾收集器
1.Serial收集器 (Client模式,注重用戶的停頓時間)
clipboard.png
2.ParNew收集器 (Server模式,注重用戶的停頓時間)

clipboard.png

3.Parallel Scavenge收集器(Server模式,且多核CPU纔有優點,注重吞吐量)
用戶停頓時間體現了用戶的實時性是否足夠好,高吞吐量能夠高效利用cup

clipboard.png

clipboard.png

老年代垃圾收集器
1.Serial Old收集器

clipboard.png

2.Parallel Old垃圾收集器(以吞吐量優先)

clipboard.png

3.CMS垃圾收集器
紅色標記才stop-the-world
clipboard.png

clipboard.png
缺點:CMS採用的是標記-清除算法,會產生大量的空間碎片,下一次分配內存的時候,若是內存過大,就分配不了,就只有再一次GC操做

既用於年輕代也用於老年代的收集器 G1收集器

相關文章
相關標籤/搜索