天天看點

64.7款經典的垃圾收集器以及它們之間的組合關系、如何檢視預設的垃圾回收器1.七款經典的垃圾收集器2.垃圾收集器之間組合關系3.檢視預設的垃圾收集器

目錄

  • 1.七款經典的垃圾收集器
  • 2.垃圾收集器之間組合關系
  • 3.檢視預設的垃圾收集器

1.七款經典的垃圾收集器

經典的垃圾回收器又如下

7

種:

64.7款經典的垃圾收集器以及它們之間的組合關系、如何檢視預設的垃圾回收器1.七款經典的垃圾收集器2.垃圾收集器之間組合關系3.檢視預設的垃圾收集器

如下圖所示,是經典的垃圾回收器和垃圾分代之間的關系。

Serial GC

Parallel Scavenger GC

以及

ParNew GC

隻能收集年輕代。

Serial Old GC

Parallel Old GC

以及

CMS GC

隻能收集老年代。

G1 GC

既能收集年輕代又能收集老年代。

64.7款經典的垃圾收集器以及它們之間的組合關系、如何檢視預設的垃圾回收器1.七款經典的垃圾收集器2.垃圾收集器之間組合關系3.檢視預設的垃圾收集器

2.垃圾收集器之間組合關系

一款年輕代的垃圾收集器總是對應着一款老年代的垃圾收集器。

下面的圖更新到了

JDK14

  1. 先将虛線看成是實線,一款年輕代的垃圾收集器對應着兩款老年代的垃圾收集器。比如說新生代使用

    Serial GC

    ,老年代可以使用

    CMS GC

    或者

    Serial Old GC

  2. 在老年代,圖中的

    CMS GC

    還對應着

    Serial Old GC

    Serial Old GC

    CMS GC

    的後備方案,因為

    CMS GC

    是并發的垃圾收集器,在進行垃圾回收的時候,使用者線程還在工作,使用者線程可能還在制造垃圾,如果

    CMS GC

    垃圾回收的速度比使用者線程制造垃圾的速度慢,就會回收失敗;如果

    CMS GC

    失敗會使用

    Serial Old GC

    作為後備方案,進行一次

    Full GC

  3. 紅色的虛線,表示的是在

    JDK8

    中這種組合被廢棄,但是還可以使用;在

    JDK9

    中就被移除了,完全不能使用這兩種組合了。綠色虛線表示的是,

    JDK14

    中,這種組合被廢棄了。
  4. CMS GC

    在JDK14中被移除了。
    64.7款經典的垃圾收集器以及它們之間的組合關系、如何檢視預設的垃圾回收器1.七款經典的垃圾收集器2.垃圾收集器之間組合關系3.檢視預設的垃圾收集器
    64.7款經典的垃圾收集器以及它們之間的組合關系、如何檢視預設的垃圾回收器1.七款經典的垃圾收集器2.垃圾收集器之間組合關系3.檢視預設的垃圾收集器

    JDK8

    中預設的組合是

    Parallel Scavenger GC

    Parallel Old GC

    JDK9

    以後預設的垃圾回收器是

    G1 GC

    沒有哪一種垃圾回收器可以絕對的說是最好的,不同的場景選擇不同的垃圾回收器會更好。

3.檢視預設的垃圾收集器

64.7款經典的垃圾收集器以及它們之間的組合關系、如何檢視預設的垃圾回收器1.七款經典的垃圾收集器2.垃圾收集器之間組合關系3.檢視預設的垃圾收集器

兩種方式:

  1. 執行程式的時候,在

    eclipse

    JVM

    參數中加入

    -XX:+PrintCommandLineFlags

  2. 通過指令行的方式:

    jinfo -flag 相關垃圾回收器 java程式程序ID

    64.7款經典的垃圾收集器以及它們之間的組合關系、如何檢視預設的垃圾回收器1.七款經典的垃圾收集器2.垃圾收集器之間組合關系3.檢視預設的垃圾收集器
    輸出的結果為

    -XX:+UseParallelGC

    ,+号表示的是使用了

    ParallelGC

    。如果是減号,就表示的是沒有使用。

更多JVM文章請通路我的JVM專欄:

https://blog.csdn.net/u011069294/category_10113093.html