天天看點

Java8相關的Jvm參數學習

最近學習了JVM知識,針對Jdk8的一些Jvm參數整理了一下。以備後用。

常用jvm參數清單

指數 說明
記憶體配置相關 -Xms 表示新生代初始記憶體的大小,應該小于-Xms的值;
-Xmx 表示新生代可被配置設定的記憶體的最大上限;當然這個值應該小于-Xmx的值;
-XX:NewSize=10m 新生代記憶體大小,表示新生代初始記憶體的大小,應該小于-Xms的值;
-XX:MaxNewSize=10m
-XX:MaxDirectMemorySize=10m 為NIO的direct-buffer配置設定時指定最大的記憶體大小。預設是0,意思是JVM自動選擇direct-buffer的大小。
-XX:MaxMetaspaceSize 指定中繼資料區大小
-XX:MetaspaceSize 中繼資料區會在達到指定大小時發生垃圾回收,預設20.8M左右(x86下開啟c2模式)
-XX:MinMetaspaceFreeRatio 當記憶體剩餘比例小于這個值時垃圾回收會頻繁一些, 預設40%。
-XX:MaxMetaspaceFreeRatio 當記憶體剩餘比例大于這個值時垃圾回收頻率會低一點,預設70%。
-XX:StringTableSize=N 指定常量池大小
-XX:+PrintStringTableStatistics JVM程序退出時會列印StringTable統計資訊
-Xsssize

設定thread stack大小同[-XX:ThreadStackSize],一般預設的幾個系統參數如下:

Linux/x64: 1024 KB

OS: 1024 KB

GC相關 -verbose:gc 展示每個GC事件的資訊
-XX:+PrintGC 展示每個GC事件的資訊,包含-verbose:gc
-XX:+PrintGCDetails 程式産生GC時,列印垃圾回收的詳細資訊,包含-XX:+PrintGC
-Xloggc:filename 設定gc日志檔案,gc相關資訊會重定向到該檔案。這個配置如果和-verbose:gc同時出現,會覆寫-verbose:gc參數。
-XX:+UseGCLogFileRotation 啟用GC日志檔案的自動轉儲
-XX:NumberOfGCLogFiles=1 GC日志檔案的循環數目
-XX:GCLogFileSize=1M 控制GC日志檔案的大小
-XX:+PrintGCDateStamps 輸出gc的觸發日期
-XX:+PrintGCTimeStamps 輸出gc的觸發時間
-verbose:jni 開啟展示JNI調用資訊。
-XX:+HeapDumpBeforeFullGC 發生fullGC前做heap dump
-XX:+HeapDumpAfterFullGC 發生fullGC後做heap dump
-XX:+HeapDumpOnOutOfMemoryError 參數表示當JVM發生OOM時,自動生成DUMP檔案
-XX:HeapDumpPath=heapdump.hprof ${目錄}參數表示生成DUMP檔案的路徑,也可以指定檔案名稱,例如:-XX:HeapDumpPath=${目錄}/java_heapdump.hprof。如果不指定檔案名,預設為:java_<pid>_<date>_<time>_heapDump.hprof。
-XX:ErrorFile=filename 當不可恢複的錯誤發生時,錯誤資訊記錄到哪個檔案。預設是在目前目錄的一個叫做hs_err_pid pid.log的檔案。如果指定的目錄沒有寫權限,這時候檔案會建立到/tmp目錄下。
-XX:ConcGCThreads=2 設定支援并發GC的線程數。預設值依賴于給JVM的CPU數目。
-XX:CMSTriggerRatio=50 設定一個在CMS開始前的記憶體的觸發百分比,針對的是由-XX:MinHeapFreeRatio配置設定的記憶體。預設是80。
-XX:ParallelGCThreads=threads 并行GC時的線程數。預設值是CPU數。
列印每次GC的消息,預設是關閉的。
-XX:+PrintGCApplicationConcurrentTime 列印上次GC暫停到目前的時間。預設不列印。
-XX:+PrintGCApplicationStoppedTime 列印GC暫停的時間長度。預設不列印。
-XX:+UseG1GC 設定使用G1作為GC收集器。G1比較推薦在大堆應用場景下使用(大于6GB)。
-XX:+UseSHM 在Linux環境下支援JVM使用共享記憶體來設定大頁。

推薦預設開啟的參數為:

java -Xms1024M -Xmx2048M XX:MetaspaceSize=125m -XX:MaxMetaspaceSize=256m -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=2 -XX:GCLogFileSize=1M -XX:+PrintGCDetails -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintStringTableStatistics -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof -jar xxx.jar