1. 程式人生 > >JVM系列【6】GC與調優2.md

JVM系列【6】GC與調優2.md

### JVM系列筆記目錄 > - 虛擬機器的基礎概念 > - class檔案結構 > - class檔案載入過程 > - jvm記憶體模型 > - JVM常用指令 > - GC與調優 #### 瞭解HotSpot常用命令列引數 JVM的命令列引數參考: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html > -標準 所有版本支援 > -X 非標準 特定版本支援 > -XX 不穩定 下個版本可能會取消 常見和本文中可能用到的引數記錄一下,具體垃圾回收器的引數後續調優的詳細說明。 | 引數 | 說明 | | ------------------------------------------------------------ | ----------------------------------------------------- | | -Xmx | 最大可用記憶體 | | -Xms | 初始記憶體,一般和-Xmx相同,避免重新分配 | | -Xmn | 年輕代大小,JVM記憶體=年輕代+老年代大小+永久代(一般64M) | | -XX:+PrintFlagsInitial | 列印預設引數值 | | -XX:+PrintFlagsFinal | 列印最終引數值 | | -XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps | 列印GC情況、GC詳細日誌、GC日誌時間戳 | #### 常見垃圾回收器組合引數設定:(1.8) 如何檢視JVM預設的垃圾回收器? 1. `java -XX:+PrintCommandLineFlags -version` ![file](https://img2020.cnblogs.com/other/1295651/202010/1295651-20201017184100082-1820918827.png) 2. 通過GC日誌來辨別是何種垃圾回收器 常見垃圾回收器組合引數設定:(1.8版本的) >1. ​ -XX:+UseSerialGC = Serial New (DefNew) + Serial Old 小型程式使用,預設情況下不會是這種選項,HotSpot會根據計算及配置和JDK版本自動選擇收集器 >2. ​ -XX:+UseParNewGC = ParNew + SerialOld 這個組合已經很少用(在某些版本中已經廢棄) >3. ​ -XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old >4. ​ -XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8預設) 【PS + SerialOld】 >5. ​ -XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old >6. ​ -XX:+UseG1GC = G1 #### PS的GC日誌詳解 每一種垃圾回收器的日誌是不一樣。這裡提供一個樣例來詳細解釋PS的GC日誌。 ```java public class HelloGC{ public static void main(String[] args){ System.out.println("HelloGC!"); List list = new ArrayList(); for(;;){ // 死迴圈中每次分配1M大小的陣列,存放在list中,JVM記憶體不足的時候會產生GC byte[] b = new byte[1024*1024]; list.add(b); } } } ``` 編譯後啟動命令:`java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC -XX:+UseParallelGC HelloGC` 這裡設定了最大記憶體為60M,初始記憶體為40M,新生代的記憶體為10M,使用PS垃圾回收器,並列印GC的回收情況。程式執行很快就會產生GC日誌。 回收的日誌情況: ![file](https://img2020.cnblogs.com/other/1295651/202010/1295651-20201017184100812-1377199473.png) HeapDump情況,0x000xxxx記憶體地址指的是:起始地址、使用空間結束地址、整體空間結束地址; ![file](https://img2020.cnblogs.com/other/1295651/202010/1295651-20201017184101254-354618093.png) > 知識分享,轉載請註明出處。學無先後,達者