1. 程式人生 > >JVM引數學習筆記

JVM引數學習筆記

JVM調優主要就是對垃圾回收器的調優

四種垃圾回收器

  • 序列 -XX:+UseSerialGC
  • 並行 -XX:+UseParallelGC -XX:+UseParalledlOldGC
  • 併發(CMS) -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
    • -XX:+CMSParallelRemarkEnabled 降低標記停頓
    • -XX:+UseCMSInitiatingOccupancyOnly 使用手動定義初始化定義開始CMS收集 禁止hostspot自行觸發CMS GC
    • -XX:CMSInitiatingOccupancyFraction=70 70%的時候進行回收
  • G1(Garbage first) -XX:+UseG1GC JDK1.7出現,將堆等大小分割槽,每一個區是一堆連續的虛擬記憶體地址,標記結束後決定回收最空置的堆區

最重要的引數

  • -Xms4096M -Xmx4096M: 初始堆大小,最大堆大小,最好設定一樣
  • -XX:PermSize=128M -XX:MaxPermSize=128M 持久代大小,128M足夠用了,設定一樣
  • -Xmn2048m 年輕代大小,官方推薦設為JVM記憶體的3/8, 年輕代和年老代一般為1:2
  • -XX:+UseStringDeduplication : jdk1.8中可以對重複字串優化
  • -XX:LargePageSizeInBytes=128m 設大一些可以更好的利用虛擬記憶體
  • -XX:MaxMetaspaceSize=256m java1.8開始Metaspace是沒有指定預設值,是動態增加的,為了保證穩定最好設定一個最大值
  • -XX:ParallelGCThreads=8 並行或併發回收的執行緒數,推薦CPU的核心數
  • -Xss256k 設定每個執行緒堆疊的大小

GC日誌

列印日誌會影響效能,建議不要在生產環境中使用
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=< number of log files >
-XX:GCLogFileSize=< file size >[ unit ]
-Xloggc:/path/to/gc.log

記憶體溢位日誌

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./java_pid.hprof
-XX:OnOutOfMemoryError=”< cmd args >;< cmd args >”
-XX:+UseGCOverheadLimit

字串優化

-XX:+UseStringDeduplication java1.8才有的
-XX:+UseStringCache
-XX:+UseCompressedStrings
-XX:+OptimizeStringConcat

一些預設啟動的引數

  • -server Server Hotspot VM, 在64位的jdk中預設啟用
  • -XX:+DisableExplicitGC 禁用System.gc(),有說法在netty的nio去掉該配置項
  • -XX:+AggressiveOpts 加快編譯,使用JVM開發團隊的最優成果