JVM參數解析與Java虛擬機性能調優

堆空間
    -Xms32m
        初始堆空間
    -Xmx32m
        最大可用堆空間
     -Xmn1m
        新生代的大小
    -XX:NewRatio=2
        老年代/新生代
    -Xss128K
        線程的最大棧空間
    -XX:TargetSurvivorRatio=15
        survivor區的目標使用率


    堆溢出處理
        -XX:+HeapDumpOnOutOfMemoryError
            導出內存溢出時整個堆信息
        -XX:HeapDumpPath=d:/a.dump
            導出堆dump文件的存放路徑 
        -XX:-UseGCOverheadLimit
            禁止GC效率低下引起的OOM
    設置相等
        減少程序運行時進行垃圾回收次數,從而提高程序的性能
    基本策略
        儘可能將對象預留在新生代,減少老年代GC的次數

JVM優化
    -XX:+UseCompressedOops
        開啓壓縮(默認)
            允許在64位JVM中內存引用地址爲32位
    -XX:+DoEscapeAnalysis
        開啓逃逸分析 (默認)
    -XX:+EliminateAllocations
        標題替換(默認)
    TLAB
        -XX:+UseTLAB
            開啓TLAB(l默認)
                TLAB
                    Thread Local Allocation Buffer
                    線程本地分配緩存
        -XX:+PrintTLAB
            打開跟蹤TLAB參數
         -XX:TLABSize=102400
            手工指定TLAB的大小
        -XX:-ResizeTLAB
            禁用自動調整TLAB的大小
        -XX:TLABRefillWasteFraction=100
            TLAB中允許產生浪費的比例(默認值爲64)
                約爲1/64的TLAB空間大小作爲 refill_waste

垃圾回收
    垃圾回收器
        -XX:+UseParallelGC
            新生代使用ParallelGC回收器,老年代使用串行收集器
        -XX:+UseConcMarkSweepGC
            新生代使用ParNew回收器,老年代使用CMS
        串行回收器
            -XX:+UseSerialGC
                新生代、老年代都使用串行垃圾回收器
            -XX:SurvivorRatio=2
                新生代中 eden空間和from/to空間的比例關係 
            -XX:PretenureSizeThreshold=1000 
                對象直接晉升到老年代的閾值
            -XX:MaxTenuringThreshold=15
                新生代對象的最大年齡(默認15)
        並行GC
            -XX:+UseParNewGC
                新生代使用ParNew回收器,老年代使用串行收集器
            -XX:+UseParallelOldGC
                新生代使用ParallelGC回收器,老年代使用ParallelOldGC回收器
            -XX:ParallelGCThreads
                ParNew回收器線程數量
                    CPU數量
                        CPU數量大於8時
                            CPU_Count*5/8+3
            -XX:MaxGCPauseMillis
                設置最大垃圾收集停頓時間
                    使用較小的堆
            -XX:GCTimeRatio
                設置吞吐量大小
                    系統將花費不超過1/(1+n)的時間用於垃圾收集
                        默認情況下 1/(1+99)
            -XX:UseAdaptiveSizePolicy
                打開自適應的GC策略
                    自動調整:新生代的大小、eden和survivior的比例、晉升老年代的對象年齡等
        CMS
            -XX:+UseConcMarkSweepGC
                啓用CMS回收器
            -XX:-CMSPrecleaningEnabled
                CMS 不進行預清理
            -XX:ParallelCMSThreads
                併發線程數量
                    如果不配置此項目,默認併發線程數是(ParallelGCThreads+3)/4
                        ParallelGCThreads
                            GC並行時使用的線程數量
            -XX:CMSInitiatingOccupancyFraction
                指定當老年代空間使用率真達到多少時,進行一次CMS垃圾回收
                    默認是68
                        大
                            降低CMS的觸發頻率
                                內存不足導致CMS回收失敗,啓動老年代串行收集器
                        小
                            避免頻繁觸發老年代串行收集器
            +XX:+UseCMSCompactAtFullCollection
                設定進行多少次CMS回收後,進行一次內存壓縮
                    非併發
            +XX:CMSClassUnloadingEnabled
                如果條件允許,系統會用CMS的機制回收Perm區Class數據
        G1
            -XX:UseG!GC
                打開G1收集器開關
            -XX:MaxGCPauseMillis
                指定目標最大停頓時間
                    G1調整新生代和老年代的比例、調整堆大小、調整晉升年齡等手段,試圖達到預設目標
                        縮短 
                            增加新生代GC的次數 
                            老年代區域,在混合GC收集時,一次收集的區域數量會變少 
                                增加進行FullGC的可能性
                核心
            -XX:ParallelGCThreads
                設置並行回收時,GC的工作線程數量
                核心
            -XX:InitiatingHeapOccupancyPercent
                指定當整個堆使用率達到多少時,觸發併發標記週期的執行
                    默認值 45
                        爲滿足MaxGCPauseMillis
                            偏大
                                會導致併發週期遲遲得不到啓動
                                    Full GC可能性增加
                            偏小
                                併發週期非常頻繁
                                    大量GC線程搶佔CPU
                                        應用程序的性能有所下降
    跟蹤垃圾回收
        -XX:+printGC
            打印GC的簡要信息
        -XX:+PrintGCDetails
            打印GC的詳細信息,包括當前堆的各個區間的使用情況,下界,當前上界和上界
        -XX:+PrintHeapAtGC
            打印全面的堆信息
        -XX:+PrintGCTimeStamps
            GC發生的時間
        -XX:+PrintGCApplicationConcurrentTime
            應用程序的執行時間
        -XX:+PrintGCApplicationStoppedTime
            由於GC而產生的停頓時間
        +XX:PrintReferenceGC
            系統內的軟引用、弱引用、虛引用和Finalize隊列
        -Xloggc:log/gc.log
            將GC日誌以文件的形式輸出

類加載/卸載的跟蹤
    -XX:+TraceClassLoading
        跟蹤類的加載
    -XX:TraceClassUnloading
        跟蹤類的卸載
    -XX:+PrintClassHistogram
        系統中類的分佈情況

系統參數
    -XX:+PrintCommandLineFlags
        傳遞給虛擬機的顯式和隱式參數
    -XX:+PrintVMOptions
        打印虛擬機接受到的命令行顯式參數
    -XX:+PrintFlagsFinal
        打印所有的系統參數的值

方法區
    JDK6
        -XX:PermSize
            永久區大小,默認64MB
        -XX:MaxPermSize
            最大永久區大小
    JDK8
        -XX:MaxMetaspaceSize
            最大元數據區大小

直接內存
    -XX:MaxDirectMemorySizee    
        最大可用直接內存

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