常用 JVM 參數

1. verbose:gc

  • 作用: 啓動 jvm 時,輸出 jvm 中的 gc 信息
  • 格式: [Full GC 178K->99K(1984K), 0.0253877 secs]

    解讀 :

    • Full GC 表示執行了一次 Full GC 操作
    • 178K 和 99K 表示執行 GC 前內存容量和執行 GC 後的內存容量
    • 1984K 表示內存總容量
    • secs 表示執行本次 GC 所消耗的時間,單位:秒

2. -XX:+printGC

  • verbose:gc

3. -XX:+PrintGCDetails

  • 作用:打印 GC 的詳細信息
  • 格式:
    –Heap
    – def new generation   total 13824K, used 11223K [0x27e80000, 0x28d80000, 0x28d80000)
    – eden space 12288K,  91% used [0x27e80000, 0x28975f20, 0x28a80000)
    – from space 1536K,   0% used [0x28a80000, 0x28a80000, 0x28c00000)
    – to   space 1536K,   0% used [0x28c00000, 0x28c00000, 0x28d80000)
    – tenured generation   total 5120K, used 0K [0x28d80000, 0x29280000, 0x34680000)
    – the space 5120K,   0% used [0x28d80000, 0x28d80000, 0x28d80200, 0x29280000)
    – compacting perm gen  total 12288K, used 142K [0x34680000, 0x35280000, 0x38680000)
    – the space 12288K,   1% used [0x34680000, 0x346a3a90, 0x346a3c00, 0x35280000)
    – ro space 10240K,  44% used [0x38680000, 0x38af73f0, 0x38af7400, 0x39080000)
    – rw space 12288K,  52% used [0x39080000, 0x396cdd28, 0x396cde00, 0x39c80000)
    

    解讀:

    • new generation堆內存裏面的新生代
      • total: 總共,所以後面表示新生代總內存大小
      • used: 使用了多少內存大小,分別是底邊界,當前邊界,高邊界
        即:新生代這片內存的起始點,當前使用到的地方和最大的內存地點
    • eden space新生代空間,創建的對象都會先被放進這裏,後面參數同上
    • from spaceto space:Servivor 區(倖存區)
      • 新生代的 GC 採用複製算法,每次只會用到一個倖存區
      • 當一個倖存區滿時,把活的對象複製到另個倖存區,上一個清空,避免內存碎片
    • tenured generation:表示老年代
    • compacting perm: 表示永久代

4. -XX:+PrintGCTimeStamps

  • 作用: 打印 GC 發生的時間戳
  • 格式:
    289.556: [GC [PSYoungGen: 314113K->15937K(300928K)] 405513K->107901K(407680K), 0.0178568 secs] [Times: user=0.06 sys=0.00, real=0.01 secs]
    293.271: [GC [PSYoungGen: 300865K->6577K(310720K)] 392829K->108873K(417472K), 0.0176464 secs] [Times: user=0.06 sys=0.00, real=0.01 secs]
    

    解讀:

    • 289.556 表示從 jvm 啓動到發生垃圾回收所經歷的的時間
    • GC 表示新生代GC(Minor GC)
    • PSYoungGen 表示新生代使用多線程垃圾回收器 Parallel Scavenge
    • 314113K->15937K(300928K) 表示新生代的倖存者區
    • 405513K->107901K(407680K) 表示整個堆的大小,GC 前後情況
    • Times 代表 GC 的消耗時間,分別是用戶垃圾回收的時間、系統消耗的時間、最終真實的消耗時間

5. -X:loggc:log/gc.log

  • 作用: 指定輸出 gc.log 的文件位置

6. -XX:+PrintHeapAtGC

  • 作用: 表示每次 GC 後,都打印堆的信息
  • 格式: 同 verbose:gc

7. -XX:+TraceClassLoading

  • 作用: 監控類的加載
  • 格式:
    [Loaded java.lang.Object from shared objects file][Loaded java.io.Serializable from shared objects file][Loaded java.lang.Comparable from shared objects file][Loaded java.lang.CharSequence from shared objects file][Loaded java.lang.String from shared objects file][Loaded java.lang.reflect.GenericDeclaration from shared objects file][Loaded java.lang.reflect.Type from shared objects file]
    

8. -XX:+PrintClassHistogram

  • 作用: 跟蹤參數,按下 Ctrl+Break 後,就會打印以下信息
    num(序號)  instances(實例數量)   bytes(總大小)  class name(類型)
    ----------------------------------------------
    
    1:           890617             470266000         [B (byte)
    
    2:           890643             21375432    java.util.HashMap$Node
    
    3:           890608             14249728      java.lang.Long
    
    4:             13               8389712    [Ljava.util.HashMap$Node;
    
    5:            2062              371680           [C (char)
    
    6:            463               41904        java.lang.Class
    

9. -Xmx -Xms

  • 作用: 表示設置堆內存的最大值和最小值
  • 注意:
    • jvm 啓動後,並不會直接讓堆內存擴大到指定的最大數值
    • 而是會先開闢指定的最小堆內存,如果經過數次GC後,還不能,滿足程序的運行,纔會逐漸的擴容堆的大小

10. -Xmn

  • 作用: 設置新生代的內存大小

11. -XX:NewRatio

  • 作用: 新生代和老年代的比例

    比如:1:4,就是新生代佔五分之一

12. -XX:SurvivorRatio

  • 作用: 設置兩個Survivor區和eden區的比例

    比如:2:8 ,就是一個Survivor區佔十分之一

13. -XX:+HeapDumpOnOutMemoryError

  • 作用: 發生 OOM 時,導出堆的信息到文件

14. -XX:+HeapDumpPath

  • 作用: 表示導出堆信息的文件路徑

15. -XX:OnOutOfMemoryError

  • 作用: 當系統產生 OOM 時,執行一個指定的腳本

16. -XX:PermSize -XX:MaxPermSize

  • 作用: 設置永久區的內存大小和最大值
  • 注意: 永久區內存用光也會導致 OOM 的發生

17. -Xss

  • 作用: 設置棧的大小
發佈了197 篇原創文章 · 獲贊 86 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章