前言
所謂JVM的調(diào)優(yōu),其實(shí)就是修改JVM的各項(xiàng)參數(shù),形成當(dāng)前業(yè)務(wù)場景下最優(yōu)配置。既然要調(diào)優(yōu),肯定要熟知JVM的各項(xiàng)參數(shù)代表的含義,本文主要是用來記錄JVM的各個(gè)參數(shù)含義,方便以后調(diào)優(yōu)時(shí)查閱。
JVM參數(shù)主要分為三類
1.標(biāo)準(zhǔn)參數(shù)
標(biāo)準(zhǔn)參數(shù)(-),所有的JVM實(shí)現(xiàn)都必須實(shí)現(xiàn)這些參數(shù)的功能,而且向后兼容, 通過命令 java即可查看。

image.png
用法: java [-options] class [args...]
(執(zhí)行類)
或 java [-options] -jar jarfile [args...]
(執(zhí)行 jar 文件)
其中選項(xiàng)包括:
-d32 使用 32 位數(shù)據(jù)模型 (如果可用)
-d64 使用 64 位數(shù)據(jù)模型 (如果可用)
-server 選擇 "server" VM
默認(rèn) VM 是 server.
-cp <目錄和 zip/jar 文件的類搜索路徑>
-classpath <目錄和 zip/jar 文件的類搜索路徑>
用 ; 分隔的目錄, JAR 檔案
和 ZIP 檔案列表, 用于搜索類文件。
-D<名稱>=<值>
設(shè)置系統(tǒng)屬性
-verbose:[class|gc|jni]
啟用詳細(xì)輸出
-version 輸出產(chǎn)品版本并退出
-version:<值>
警告: 此功能已過時(shí), 將在
未來發(fā)行版中刪除。
需要指定的版本才能運(yùn)行
-showversion 輸出產(chǎn)品版本并繼續(xù)
-jre-restrict-search | -no-jre-restrict-search
警告: 此功能已過時(shí), 將在
未來發(fā)行版中刪除。
在版本搜索中包括/排除用戶專用 JRE
-? -help 輸出此幫助消息
-X 輸出非標(biāo)準(zhǔn)選項(xiàng)的幫助
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
按指定的粒度啟用斷言
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
禁用具有指定粒度的斷言
-esa | -enablesystemassertions
啟用系統(tǒng)斷言
-dsa | -disablesystemassertions
禁用系統(tǒng)斷言
-agentlib:<libname>[=<選項(xiàng)>]
加載本機(jī)代理庫 <libname>, 例如 -agentlib:hprof
另請參閱 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:<pathname>[=<選項(xiàng)>]
按完整路徑名加載本機(jī)代理庫
-javaagent:<jarpath>[=<選項(xiàng)>]
加載 Java 編程語言代理, 請參閱 java.lang.instrument
-splash:<imagepath>
使用指定的圖像顯示啟動屏幕
有關(guān)詳細(xì)信息, 請參閱 http://www.oracle.com/technetwork/java/javase/documentation/index.html。
2 非標(biāo)準(zhǔn)參數(shù)(-X)
默認(rèn)jvm實(shí)現(xiàn)要實(shí)現(xiàn)這些參數(shù)的功能,但是并不保證所有jvm實(shí)現(xiàn)都滿足這些參數(shù)功能,且不保證向后兼容, 通過命令 java -X可查看

image.png
-Xmixed 混合模式執(zhí)行 (默認(rèn))
-Xint 僅解釋模式執(zhí)行
-Xbootclasspath:<用 ; 分隔的目錄和 zip/jar 文件>
設(shè)置搜索路徑以引導(dǎo)類和資源
-Xbootclasspath/a:<用 ; 分隔的目錄和 zip/jar 文件>
附加在引導(dǎo)類路徑末尾
-Xbootclasspath/p:<用 ; 分隔的目錄和 zip/jar 文件>
置于引導(dǎo)類路徑之前
-Xdiag 顯示附加診斷消息
-Xnoclassgc 禁用類垃圾收集
-Xincgc 啟用增量垃圾收集
-Xloggc:<file> 將 GC 狀態(tài)記錄在文件中 (帶時(shí)間戳)
-Xbatch 禁用后臺編譯
-Xms<size> 設(shè)置初始 Java 堆大小
-Xmx<size> 設(shè)置最大 Java 堆大小
-Xss<size> 設(shè)置 Java 線程堆棧大小
-Xprof 輸出 cpu 配置文件數(shù)據(jù)
-Xfuture 啟用最嚴(yán)格的檢查, 預(yù)期將來的默認(rèn)值
-Xrs 減少 Java/VM 對操作系統(tǒng)信號的使用 (請參閱文檔)
-Xcheck:jni 對 JNI 函數(shù)執(zhí)行其他檢查
-Xshare:off 不嘗試使用共享類數(shù)據(jù)
-Xshare:auto 在可能的情況下使用共享類數(shù)據(jù) (默認(rèn))
-Xshare:on 要求使用共享類數(shù)據(jù), 否則將失敗。
-XshowSettings 顯示所有設(shè)置并繼續(xù)
-XshowSettings:all
顯示所有設(shè)置并繼續(xù)
-XshowSettings:vm 顯示所有與 vm 相關(guān)的設(shè)置并繼續(xù)
-XshowSettings:properties
顯示所有屬性設(shè)置并繼續(xù)
-XshowSettings:locale
顯示所有與區(qū)域設(shè)置相關(guān)的設(shè)置并繼續(xù)
-X 選項(xiàng)是非標(biāo)準(zhǔn)選項(xiàng), 如有更改, 恕不另行通知。
3.非穩(wěn)定參數(shù)(-XX)
這些參數(shù)各個(gè)jvm實(shí)現(xiàn)會有所不同,并且可能會隨時(shí)取消,需要慎重使用(注意:這些參數(shù)也是JVM調(diào)優(yōu)的重要參數(shù)).
3.1)java -XX:+PrintFlagsInitial --查看出廠默認(rèn)值
3.2)java -XX:+PrintFlagsFinal --查看修改更新 (= 沒有修改過 := 人為修改過)

image.png
打印的結(jié)果就不在文章中展示了(700多項(xiàng)參數(shù) x_x),下面會以JDK1.8為例慢慢更新-XX常用的調(diào)優(yōu)參數(shù),歡迎大家收藏使用。
-XX參數(shù)分為兩大類,設(shè)置方式分別為:
1). Boolean類型:-XX:+/- (+代表開啟,-代表關(guān)閉) 例如 -XX:+PrintGCDetails
2).數(shù)值型: -XX:[key]=[val] 例如–XX:NewRatio=2
-XX:SurvivorRatio=8 新生代Eden區(qū)和Survivor區(qū)的比例,默認(rèn)8
–XX:NewRatio=2 老年代與新生代的比例,默認(rèn)2
-XX:InitialHeapSize=134217728 設(shè)置初始堆大小
-XX:MaxHeapSize=2147483648 設(shè)置最大堆大小
-XX:MetaspaceSize=21807104 設(shè)置元空間大小
-XX:MaxMetaspaceSize=21807104 設(shè)置最大元空間大小
-XX:+PrintGCDetails 開啟打印 GC 收集細(xì)節(jié),一般跟 -Xloggc:<file> 配合使用(默認(rèn)不開啟)
-XX:+HeapDumpOnOutOfMemoryError 內(nèi)存溢出時(shí)生成dump文件(默認(rèn)不開啟)
-XX:HeapDumpPath=/pathA/pathB.. 內(nèi)存溢出時(shí)生成的文件路徑
-XX:+UseParNewGC 使用ParNew作為新生代垃圾回收器
-XX:+UseConcMarkSweepGC 使用CMS作為老年代垃圾回收器
-XX:+UseCMSCompactAtFullCollection CMS發(fā)生FullGC時(shí)是否整理碎片 默認(rèn)開啟
-XX:+UseParallelGC 使用Parallel Scavenge作為新生代垃圾回收器
-XX:+UseParallelOldGC 使用Parallel Old作為老年代垃圾回收器
-XX:MaxTenuringThreshold=15 最大分代年齡 默認(rèn)15(注意分代年齡占4字節(jié),最大只能設(shè)置15)
-XX:+UseTLAB 優(yōu)先在ThreadLocalAllocBuffer分配對象 默認(rèn)開啟
-XX:+UseBiasedLocking 開啟偏向鎖 默認(rèn)開啟
-XX:BiasedLockingStartupDelay=4000 延遲4秒開啟 默認(rèn)值
======未完待續(xù)=======