垃圾回收算法簡介

我們知道垃圾回收主要是回收堆區的內存

1. 堆區我們分成eden區 s1 s0區  老年代

2.JVM對象的引用分爲了四種類型:

(1)強引用:默認情況下,對象採用的均爲強引用(這個對象的實例沒有其他對象引用,GC時纔會被回收)

(2)軟引用:軟引用是Java中提供的一種比較適合於緩存場景的應用(只有在內存不夠用的情況下才會被GC)

(3)弱引用:在GC時一定會被GC回收

(4)虛引用:由於虛引用只是用來得知對象是否被GC

3.算法簡介

       引用計數算法: 主要回收eden區  ,對象有15次機會,引用加1,沒有引用減1,直到爲0時,被清除。N次(大概15次)後放入s0或者s1區。

       複製算法: s0和s1區爲空間相同的兩塊區域,2塊區域互相拷貝被引用的對象,不引用對象則不被拷貝,拷貝完成後,清空被拷貝的s0或者s1區域。

       標記壓縮算法:主要回收老年代,老版本的標記清除算法首先標記處所需要回收的對象,在標記完成後統一回收所有被標記的對象。新版本優化使用,首先標記所需回收對象,可達標記1,不可達標記0,然後把不可達可達壓縮到一塊,把不可達區域清除。

(減少垃圾內存碎片)

       分代算法:不同堆區域用不同的算法回收垃圾。

新生代(eden s0 s1) 主要是minor Gc       老年代   System.gc()主要是Full Gc

 4. 根據垃圾回收機制JVM調優:

初始堆內存大,垃圾回收次數少,最大堆內存大可以提高吞吐量。

允許條件下儘量採用並行回收機制,可以擴大吞吐量以及提高回收效率。

5.JVM內存模型圖

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章