通用JVM參數
-server
如果不配置該參數,JVM會根據應用服務器硬件配置自動選擇不同模式,server模式啓動比較慢,但是運行期速度得到了優化,
適合於服務器端運行的JVM
-client
啓動比較快,但是運行期響應沒有server模式的優化,適合於個人PC的服務開發和測試
-Xmx
堆內存最大值,默認是機器物理內存的1/4
-Xms
堆內存最小值,默認情況是機器物理內存的1/64,(最大和最小最好相同)
-XX:PermSize
初始化永久內存區域大小(元空間)
-XX:MaxPermSize
設置元空間上限
-Xmn
新生代大小 默認是堆內存的1/3
-XX:SurvivorRatio
設置年輕代中Eden區與Survivor區的大小比值
-XX:MaxTenuringThreshold
設置垃圾的最大年齡,即經歷多少次新生代垃圾回收後依舊存活,進入老年代
-XX:GCTimeRatio
設置垃圾回收時間佔程序運行時間的百分比
該參數設置爲n的話,則垃圾回收時間佔程序運行時間百分比的公式爲1/(1+n)
-XX:TargetsurvivorRatio
控制允許使用的救助空間的比例,默認值是50
-Xss
設置每個線程的堆棧大小
-Xnoclassgc
取消系統對特定類的垃圾回收
串行收集器參數
-XX:+UseSerialGC
設置串行收集器
並行收集器參數
-XX:+UseParallelGC
選擇垃圾收集器爲並行收集器,此配置僅對年輕代有效
-XX:ParallelGCThreads
配置並行收集器的線程數
-XX:+UseParallelOldGC
採用對於老年代併發收集的策略
-XX:MaxGCPauseMillis
設置每次年輕代並行收集最大暫停時間,如果無法滿足此時間,JVM會自動調整年輕代大小以滿足此值
-XX:+UseAdaptiveSizePolicy
並行收集器會自動選擇年輕代區大小和相應的Survivor區比例,以達到目標系統規定的最低響應時間或者收集頻率
併發收集器參數
-XX:+UseConcMarkSweepGC
指定在老年代使用 concurrent cmark sweep gc
-XX:+UseParNewGC
指定在New Generation使用 parallel collector
-XX:+UseCMSCompactAtFullCollection
打開對老年代的壓縮
-XX:+CMSIncrementalMode
設置爲增量模式。適用於單CPU情況
-XX:CMSFullGCsBeforeCompaction
由於併發收集器不對內存空間進行壓縮、整理,所以運行一段時間以後會產生“碎片”,使得運行效率降低
-XX:+CMSClassUnloadingEnabled
使CMS收集持久代的類,而不是full gc
監控結果
jmap命令查看堆內存分配和使用情況
top命令監控結果
jstat -gcutil 進程號 命令監控結果
jstack 進程號 輸出日誌
系統的JVM設置
<jvm-options>-XX:+PrintGCApplicationConcurrentTime</jvm-options>
<jvm-options>-XX:+PrintGCApplicationStoppedTime</jvm-options>
<jvm-options>-XX:+PrintGCTimeStamps</jvm-options>
<jvm-options>-XX:+PrintGCDetails</jvm-options>
<jvm-options>-Xms2048m</jvm-options>
<jvm-options>-Xmx2048m</jvm-options>
<jvm-options>-server</jvm-options>
<jvm-options>-Djava.awt.headless=true</jvm-options>
<jvm-options>-XX:PermSize=256m</jvm-options>
<jvm-options>-XX:MaxPermSize=256m</jvm-options>
<jvm-options>-XX:+DisableExplicitGC</jvm-options>
<jvm-options>-Xmn768M</jvm-options>
<jvm-options>-XX:SurvivorRatio=3</jvm-options>
<jvm-options>-Xss128K</jvm-options>
<jvm-options>-XX:TargetSurvivorRatio=80</jvm-options>
<jvm-options>-XX:MaxTenuringThreshold=5</jvm-options>
<jvm-options>-XX:+UseConcMarkSweepGC</jvm-options>
<jvm-options>-XX:+CMSClassUnloadingEnabled</jvm-options>
<jvm-options>-XX:+UseCMSCompactAtFullCollection</jvm-options>
<jvm-options>-XX:-CMSParallelRemarkEnabled</jvm-options>
Gc相關參數
控制檯打印gc日誌
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintHeapAtGC(詳細的gc信息)
輸出gc日誌到指定文件
-Xloggc:
(例如: -Xloggc:D:\logs\gc.log)
Gc日誌分塊
-XX:-UseGCLogFileRotation
-XX:GCLogFileSize = 8M