JVM——垃圾收集算法及垃圾回收器

一、垃圾回收算法

1、標記—清除算法

1)工作流程

算法分爲“標記”和“清除”階段:首先標記出所有需要回收的對象(標記階段),在標記完成後統一回收所有被標記的對象(回收階段)。

2)缺點

a. 效率問題:標記和清除這兩個過程的效率都不高。

b. 空間問題:會產生大量的不連續碎片。


2、複製算法(新生代垃圾回收算法)

1)工作流程

    將內存劃分爲大小相等的兩塊,每塊只使用其中的一塊,另外一塊作爲保留區域,當進行垃圾回收時,將使用區域的存活對象一次性進行賦值到保留區域,而後一次性清空使用區域。

2)使用場景

     新生代垃圾回收,新生代對象具有朝生夕滅的特性(新生代對象存活率低)。

3)優點:實現簡單,運行效率高,無空間碎片問題。

4)JVM採用的複製算法:

   將內存劃分(新生代內存)爲一塊較大的Eden區域和兩塊大小相等、空間較小的Survivor區域(EdenSurvivor = 8:1)。

   每次使用Eden和其中的一塊Survivor區域(第一塊Survivor區域爲from區域,另外一塊爲to區域)。

   在進行垃圾回收時(Eden區域快滿時,系統自動觸發垃圾回收)

A. 第一次進行GC時,將Eden區中的對象移動到from區域。

B. 第二次再進行GC時,將Eden區和from區中存活的對象移動到to區域,然後一次性清除掉Edenfrom區,以此循環。

C. 對象在from區域和to區域來回移動15次(默認),將對象移動到老年代。

D. 特殊情況:當Survivor區域放不下存活對象時,會從老年代進行分配擔保。


3、標記整理算法(老年代回收算法)

複製算法在對象存活率比較高的情況下,會有大量對象複製操作,效率很低,因此,老年代不採用複製算法。

1)工作流程:

       標記階段和標記清除階段的標記類似,標記出無用對象。

       整理階段:將存活對象向一端移動,而後一次性將存活對象邊界以外的空間清除掉。

 

4、分代回收算法

   Java採用分代回收算法,即新生代採用複製算法,而老年代採用標記整理算法。

   將內存劃分爲新生代(對象存活率低)和老年代(對象存活率高)。


面試考點:請問了解Minor GCMajor GC嗎?

Minor GC:新生代GC,指的是新生代垃圾回收,在新生代中,對象大多數朝生夕滅,因此採用複製算法,Major GC發生頻繁,效率較高,

Major GC (老年代GC/Full GC):指的是發生在老年代的垃圾回收,發生Full GC通常會至少發生一次Minor GC,但並非絕對,Full GC 速度比Minor G從速度慢10倍以上,發生頻率較低。

 

二、垃圾回收器

並行:指的是多條垃圾回收線程並行工作,而用戶線程等待。

併發:用戶線程與垃圾回收線程同時執行(不一定並行,可能交替執行),用戶線程繼續執行,垃圾回收線程運行在另外的內核中。

吞吐量:CPU運行用戶代碼時間/CPU總時間

        CPU總時間即用戶代碼時間+垃圾回收時間

新生代垃圾回收器:SerialParNewParallel scavenge

老年代垃圾回收器:SeralOldParallelOldCMS

全區域垃圾回收器:G1

1、Serial收集器(新生代垃圾回收,串行收集器)

(1)特性:Serial是一個單線程收集器,在Serial進行垃圾收集時,必須暫停其他所有的工作線程,直到Serial收集器手機結束(STW)。

(2)應用場景:Serial收集器是JVM運行在Client模式下默認的新生代收集器。

(3)優點:簡單而高效,對於單核CPUSerial收集器由於沒有線程交互開銷,可以獲得最高的單線程收集效率。

2、ParNew收集器(新生代收集器,並行GC

(1)特性:ParNew收集器是Serial收集器的多線程版本。

(2)應用場景:PerNew是許多運行在Serial模式下的JVM首選新生代收集器。

(3)優點:隨着可使用CPU數量的增加,對於GC時系統資源的利用有較大幫助。

3、Parallel Scavenge 收集器(吞吐量有限收集器,新生代收集器,並行GC

(1)特性:吞吐量

   兩個參數控制吞吐量:

   a. .-xx:MaxGCPauseMillis:控制最大垃圾收集器停頓時間。

   b. .-xx:GCRatio:直接設置吞吐量大小

(2)應用場景:高吞吐量場景,適合需要與用戶交互的程序(B/S架構),良好的響應速度提升用戶體驗。

(3)優點:與ParNew收集器比較:高吞吐量。

      GC自調節策略(-xx+UseAdaptiveSizePolicy

4、Serial Old收集器(老年代收集器,並行GC

(1)特性:Serial OldSerial老年代版本,單線程收集器,實用標記整理算法。

(2)應用場景:

     1)Client模式下:Serial Old主要也在於給Client模式下的虛擬機使用。

     2)Server模式下:作爲CMS收集器的後備預案,當CMS發生併發失敗問題時使用。

5、Parallel Old收集器(老年代收集器,並行GC

(1)特性:Parallel OldParallel Scavenge老年代版本。

(2)應用場景:注重吞吐量以及CPU資源敏感場合。

6、CMS(老年代垃圾收集器,並行GC):採用標記清除算法

(1)特性:CMS收集器是以獲得最短系統停頓時間爲目標的垃圾回收器。

(2)應用場景:B/S系統:服務端。B/S系統重視服務器的響應速度,希望系統停頓時間儘可能短,CMS收集器非常符合此類應用需求。

(3)優點:併發收集,低停頓。

(4)缺點:對CPU資源敏感,產生大量空間碎片。

7、G1(全區域垃圾回收器)

應用場景:應用於低停頓場景。


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