jvm參數設置

編譯器

編譯屬性

  • 打印動態編譯詳情 -xx: +PrintCompilation
  • 關閉分層編譯 -XX:-TieredCompilation
  • 解釋執行 '-XINT'
  • 編譯執行 '-XCOM'
  • 禁止後臺編譯 -XX:-BackgroundCompilation
  • 打印方法內聯 -XX:+PrintInlining
  • 打開虛擬機診斷模式 -XX:+UnlockDiagnosticVMOptions
  • 打印編譯詳情 -XX:+LogCompilation -XX:LogFile=<your_file_path>
  • 調整jit工做線程數量 '-XX:CIComplilerCount=N'

調整codeCache區域大小

  • 設置初始區域大小 -XX:InitialCodeCaheSize=<SIZE>
  • 設置其最大限制 -XX:ReservedCodeCacheSize=<SIZE>

熱點閥門設置

  • 設置方法計數器門閥值 -XX:CompileThreshold=10000;java

  • 關閉方法計算器的熱度衰減 -XX:-UseCounterDecay緩存

  • 設置半衰週期,單位是秒 -XX:CounterHalfLifeTime=20安全

  • 可間接調整回邊計數器的閾值 -XX:OnStackReplacePercentage=100 併發

逃逸分析相關查看

  • 逃逸分析默認是關閉的,開啓逃逸分析 -XX:+DoEscapeAnalysis
  • 查看分析結果 -XX:+PrintEscapeAnalysis
  • 開啓標量替換 XX:+EliminateAllocations
  • 開啓同步消除 -XX:+EliminateLocks
  • 查看標量的同步替換狀況 -XX:+PrintEliminateAllocations

其餘設置

安全點相關操做

  • 打印安全點 -XX:+PrintSafepointStatistics -XX:+PrintGCApplicationStoppedTime
  • jdk9之後打印安全點 -XX:+PrintSafepointStatistics -Xlog:safepoint

軟引用的相關

-XX:SoftRefLRUPolicyMSPerMB=3000jvm

  • 若是設置,單位爲毫秒;
  • 不設置,64位則爲-Xmx的值爲基準的剩餘空間的M值爲單位進行設置,即還剩1500M,值就爲1500毫秒

字符串相關優化

  • 字符串緩存統計 -XX:+PrintStringTableStatistics
  • 設置字符串緩存大小 -XX:StringTableSize=N jdk 8的默認大小是756760

字符串重排

jdk8使用g1 gc後,加上以上參數,能夠開啓字符串重排 -XX:+UseStringDeduplication高併發

-XX:+UseStringDeduplication優化

拆裝箱

-XX:AutoBoxCacheMax=N 自動拆裝箱緩存值大小設置 ,默認是-128到127spa

-XX:AutoBoxCacheMax=20000 改成最大值2萬線程

併發相關參數

  • 禁用偏斜鎖,在高併發環境下,偏斜鎖沒法提升效率 -XX:-UseBiasedLocking

jVM內存設置

堆設置

  • 最大堆體積 -Xmx Value ,如-Xmx3000m
  • 初始堆大小 -Xms Value,如-Xms200m
  • 設置新生代和老年代大小比例,默認是2 -XX:newRatio=Value 如 -XX:newRatio=2
  • 設置新生代的值 -XX:NewSize=Value 如-XX:NewSize=800m
  • Survivor和eden的大小比例關係,默認是8:1; -XX:SurviorRatio=value 如 -XX:SurvivorRatio=8

堆外內存

direct memory,堆外內存是jvm內存的組成部分日誌

  • 設置對外內存大小

-XX:MaxDirectMemorySize=512M

  • 是否開啓本地內存跟蹤;native method tracking NMT

-XX:NativeMemoryTracking=summary

jcmd <pid> VM.native_memory detail 

// 進行 baseline,以對比分配內存變化
jcmd <pid> VM.native_memory baseline

// 進行 baseline,以對比分配內存變化
jcmd <pid> VM.native_memory detail.diff

code參數設置

  • 設置初始code值 -XX:InitialCodeCacheSize=4095

  • 設置code最大值 -XX:ReservedCodeCacheSize=18M

元數據區設置

  • 最大元數據區空間大小 -XX:MaxMetaspaceSize=23m
  • 初始元數據區大小 -XX:MetaspaceSize=10M

棧大小

  • -Xss2M 棧初始大小

GC 設置

打印gc日誌

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintReferenceGC

-XX:+PrintGCDetails

  • 打印gc詳情

-XX:+PrintGCTimeStamps

  • 打印GC時間戳

  • -XX:PrintReferenceGC 打印引用gc日誌

垃圾收集器

Serial GC

-XX:+UseSerialGC

ParNewGC和CMS GC

-XX:UseParNewGC -XX:UseConcMarkSweepGC

Parallel GC

  • 開啓 -XX:UserParallelGC
  • 配置
-XX:MaxGCPauseMillis=value   //停頓value毫秒
-XX:GCTimeRatio=N   //GC時間和用戶時間比例=1/(N+1),如設置49, 則爲1/(1+49)既2%的時間

G1GC

  • 開啓G1GC -XX:UseG1GC

  • 設置region區域大小; -XX:G1HeapRegionSzie=<N>, 例如 n=16

  • 設置在mixedGc中老年代regin的比例 -XX:G1MixedGCLiveThresholdPercent 默認是85

  • 混合垃圾收集期間,每次進入CSet的oldRegion的最大閾值;默認是java堆的10% -XX:G1OldCSetRegionThresholdPercent

  • 自適應老年代併發標誌閥門值 -XX:+G1UseAdaptiveIHOP

  • 每次old併發標記完,mixedGc執行的次數,默認是8 -XX:G1MixedGCCountTarget=8

相關文章
相關標籤/搜索