【JVM】自動內存管理機制《六》---面試官問JDK中默認的垃圾收集器?

目錄

導讀

查看JDK1.8.0_25的默認垃圾收集器

 其他JDK版本的默認垃圾回收器呢?

 默認的收集器詳解

 小結


導讀

 在上篇博客中:【JVM】自動內存管理機制《五》---垃圾收集器(索命黑白無常回收垃圾對象),我們瞭解了各種垃圾收集器,那麼大家有沒有想過,我們的JDK中默認用的哪種垃圾收集器?

查看JDK1.8.0_25的默認垃圾收集器

打開控制檯,在控制檯中輸入一下命令: 

java -XX:+PrintCommandLineFlags -version

64位windows可以看到下面的輸出

-XX:InitialHeapSize=199345920 -XX:MaxHeapSize=3189534720 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

上面所有輸出的關鍵的參數是:

 -XX:+UseParallelGC

該參數的說明:

UseParallelGC 虛擬機運行在Server模式下的默認值,打開此開關後,使用Parallel Scavenge+Serial Old(PS MarkSweep)的收集器組合進行內存回收                                                                     

      可以到官方網站看下對應的說明:https://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html


打開控制檯,在控制檯中輸入一下命令:java -XX:+PrintGCDetails -version ,打印出GC的詳細信息

java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
Heap
 PSYoungGen      total 57344K, used 2949K [0x0000000780a00000, 0x0000000784a00000, 0x00000007c0000000)
  eden space 49152K, 6% used [0x0000000780a00000,0x0000000780ce16a8,0x0000000783a00000)
  from space 8192K, 0% used [0x0000000784200000,0x0000000784200000,0x0000000784a00000)
  to   space 8192K, 0% used [0x0000000783a00000,0x0000000783a00000,0x0000000784200000)
 ParOldGen       total 131072K, used 0K [0x0000000701e00000, 0x0000000709e00000, 0x0000000780a00000)
  object space 131072K, 0% used [0x0000000701e00000,0x0000000701e00000,0x0000000709e00000)
 Metaspace       used 2257K, capacity 4480K, committed 4480K, reserved 1056768K
  class space    used 244K, capacity 384K, committed 384K, reserved 1048576K

 其他JDK版本的默認垃圾回收器呢?

建議大家實操: 可以用命令查看

對應下表:垃圾收集相關的常用參數

參數 描述
UseSerialGC 虛擬機運行在Client模式下的默認值,打開此開關後,使用Serial + Serial Old的收集器組合進行內存回收
UseParNewGC 打開此開關後,使用ParNew + Serial Old的收集器組合進行內存回收
UseConcMarkSweepGC 打開此開關後,使用ParNew + CMS + Serial Old的收集器組合進行內存回收。Serial Old收集器將作爲CMS收集器出現Concurrent Mode Failure失敗後的後備收集器使用
UseParallelGC 虛擬機運行在Server模式下的默認值,打開此開關後,使用Parallel Scavenge + Serial Old(PS MarkSweep)的收集器組合進行內存回收
UseParallelOldGC 打開此開關後,使用Parallel Scavenge + Parallel Old 的收集器組合進行內存回收
SurvivorRatio 新生代中Eden區域與Survivor區域的容量比值,默認爲8,代表Eden : Survivor=8:1
PretenureSizeThreshold 直接晉升到老年代的對象大小,設置這個參數後,大於這個參數的對象將直接在老年代分配
MaxTenuringThreshold 晉升到老年代的對象年齡。每個對象在堅持過一次Minor GC之後,年齡就增加1,當超過這個參數值時就進入老年代
UseAdaptiveSizePolicy 動態調整Java堆中各個區域的大小以及進入老年代的年齡
HandlePromotionFailure 是否允許分配擔保失敗,即老年代的剩餘空間不足以應付新生代的整個Eden和Survivor區的所有對象都存活的極端情況
ParallelGCThreads 設置並行GC時進行內存回收的線程數
GCTimeRatio GC時間佔總時間的比率,默認值爲99,即允許1%的GC時間。僅使用Parallel Scavenge收集器時生效
MaxGCPauseMillis 設置GC的最大停頓時間。僅在使用Parallel Scavenge收集器生效
CMSInitiatingOccupancyFraction 設置CMS收集器在老年代空間被使用多少後觸發垃圾收集,默認值爲68%,僅使用CMS收集器時生效
UseCMSCompactAtFullCollection 設置CMS收集器在完成垃圾收集後是否要進行一次內存碎片整理。僅在使用CMS收集器時生效
CMSFullGCsBeforeCompaction 設置CMS收集器在進行若干次垃圾收集後再啓動一次內存碎片整理。僅在使用CMS收集器時生效

 默認的收集器詳解

 之前講過,就不再贅述了:【JVM】自動內存管理機制《五》---垃圾收集器(索命黑白無常回收垃圾對象)

 小結

 到目前爲止,講完了內存區域劃分,和回收分配給對象的內存,接下來講如何給對象分配內存:【JVM】自動內存管理機制《七》---內存分配與回收策略

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