JVM引數學習筆記
阿新 • • 發佈:2018-11-16
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開發團隊的最優成果