JVM參數(shù)一覽

前言

所謂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ù)=======

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容