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

JVM系列筆記目錄

  • 虛擬機的基礎概念
  • class文件結構
  • class文件加載過程
  • jvm內存模型
  • JVM經常使用指令
  • GC與調優

瞭解HotSpot經常使用命令行參數

JVM的命令行參數參考: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.htmlhtml

-標準 全部版本支持
-X 非標準 特定版本支持
-XX 不穩定 下個版本可能會取消java

常見和本文中可能用到的參數記錄一下,具體垃圾回收器的參數後續調優的詳細說明。數組

參數 說明
-Xmx 最大可用內存
-Xms 初始內存,通常和-Xmx相同,避免從新分配
-Xmn 年輕代大小,JVM內存=年輕代+老年代大小+永久代(通常64M)
-XX:+PrintFlagsInitial 打印默認參數值
-XX:+PrintFlagsFinal 打印最終參數值
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
打印GC狀況、GC詳細日誌、GC日誌時間戳

常見垃圾回收器組合參數設定:(1.8)

如何查看JVM默認的垃圾回收器?oracle

  1. java -XX:+PrintCommandLineFlags -version

file

  1. 經過GC日誌來辨別是何種垃圾回收器

常見垃圾回收器組合參數設定:(1.8版本的)jvm

>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日誌。命令行

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 HelloGC3d

這裏設置了最大內存爲60M,初始內存爲40M,新生代的內存爲10M,使用PS垃圾回收器,並打印GC的回收狀況。程序運行很快就會產生GC日誌。unix

回收的日誌狀況:日誌

file

HeapDump狀況,0x000xxxx內存地址指的是:起始地址、使用空間結束地址、總體空間結束地址;
filecode

知識分享,轉載請註明出處。學無前後,達者爲先!

相關文章
相關標籤/搜索