java啟動(dòng)命令
- 執(zhí)行類:
java [-options] class [args…]
- 執(zhí)行jar文件:
java [-options] -jar jarfile [args…]
[-options] 配置 Java 系統(tǒng)參數(shù)
[args…] 配置 Java 運(yùn)行參數(shù) 即main方法中的參數(shù)數(shù)組args遮晚,可以通過(guò)修改啟動(dòng)配置進(jìn)行設(shè)置,多個(gè)參數(shù)之間用空格分隔,如果參數(shù)自身帶有空格拦止,則需要用引號(hào)包裹县遣。
java啟動(dòng)參數(shù)共分為三類
其一是標(biāo)準(zhǔn)參數(shù)(-)糜颠,顧名思義,標(biāo)準(zhǔn)參數(shù)中包括功能以及輸出的結(jié)果都是很穩(wěn)定的萧求,基本上不會(huì)隨著JVM版本的變化而變化其兴。我們可以通過(guò)
-help
命令來(lái)檢索出所有標(biāo)準(zhǔn)參數(shù)。所有的JVM實(shí)現(xiàn)都必須實(shí)現(xiàn)這些參數(shù)的功能夸政,而且向后兼容元旬;該參數(shù)在程序中任何位置都可以訪問(wèn)到,優(yōu)先級(jí)最高守问。覆蓋程序中同名配置匀归;預(yù)定義的標(biāo)準(zhǔn)參數(shù)(非-D開(kāi)頭的選項(xiàng))的個(gè)數(shù)是有限的。但是我們還可以自定義設(shè)置系統(tǒng)屬性耗帕,系統(tǒng)參數(shù)的標(biāo)準(zhǔn)格式為:-Dargname=argvalue
穆端,多個(gè)參數(shù)之間用空格隔開(kāi),如果參數(shù)值中間有空格仿便,則用引號(hào)括起來(lái)体啰。其中,參數(shù)名可以是 Java 默認(rèn)的嗽仪,此類參數(shù)由 JVM 虛擬機(jī)自動(dòng)識(shí)別并生效狡赐,例如,-Dfile.encoding=UTF-8 用于指定文件編碼格式钦幔;也可以是用戶自定義的枕屉,例如,-Dmy=user
鲤氢,程序中可以讀取該參數(shù)值搀擂,執(zhí)行相關(guān)邏輯。虛擬機(jī)系統(tǒng)參數(shù)中設(shè)置的參數(shù)鍵值對(duì)(只有-D定義的系統(tǒng)屬性是鍵值對(duì)形式)卷玉,在程序中可以用System.getProperty("propertyName")
獲取對(duì)應(yīng)參數(shù)值哨颂。其二是非標(biāo)準(zhǔn)參數(shù)(-X),默認(rèn)jvm實(shí)現(xiàn)這些參數(shù)的功能相种,但是并不保證所有jvm實(shí)現(xiàn)都滿足威恼,且不保證向后兼容;
其三是非Stable參數(shù)(-XX)寝并,此類參數(shù)各個(gè)jvm實(shí)現(xiàn)會(huì)有所不同箫措,將來(lái)可能會(huì)隨時(shí)取消,需要慎重使用衬潦;
提示:2斤蔓、3為非標(biāo)準(zhǔn)系統(tǒng)參數(shù)形式,一般與 JVM 虛擬機(jī)設(shè)置有關(guān)镀岛,參數(shù)名和值都由 JVM 規(guī)范規(guī)定弦牡。例如:
-Xms
:初始堆大小友驮、-Xmx
:最大堆大小。主要用于JVM調(diào)優(yōu)和debug驾锰。
該參數(shù)的書寫形式又分為兩大類:
⌒读簟①、Boolean類型
格式:-XX:[±] 表示啟用或者禁用name屬性椭豫。例子:-XX:+UseG1GC(表示啟用G1垃圾收集器)
〕苌②、Key-Value類型
格式:-XX:= 表示name的屬性值為value捻悯。例子:-XX:MaxGCPauseMillis=500(表示設(shè)置GC的最大停頓時(shí)間是500ms)
JVM調(diào)優(yōu)參數(shù)
參數(shù)及其默認(rèn)值 | 描述 | 用例/所屬 |
---|---|---|
-verbose:[class|gc|jni] |
-verbose:class 輸出jvm載入類的相關(guān)信息匆赃,當(dāng)jvm報(bào)告說(shuō)找不到類或者類沖突時(shí)可此進(jìn)行診斷。-verbose:gc 輸出每次GC的相關(guān)情況今缚。-verbose:jni 輸出native方法調(diào)用的相關(guān)情況算柳,一般用于診斷jni調(diào)用錯(cuò)誤信息。 |
|
-Xms<size> | 設(shè)置JVM初始java堆內(nèi)存為512m姓言。此值可以設(shè)置與-Xmx相同瞬项,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。 | -Xms512m |
-Xmx<size> | 設(shè)置JVM最大可用java堆內(nèi)存為512M | -Xmx512m |
-Xmn<size> | 設(shè)置年輕代大小為200M何荚。整個(gè)堆大小=年輕代大小 + 年老代大小 + 持久代大小囱淋。持久代一般固定大小為64m,所以增大年輕代后餐塘,將會(huì)減小年老代大小妥衣。此值對(duì)系統(tǒng)性能影響較大,Sun官方推薦配置為整個(gè)堆的3/8戒傻。 | -Xmn200m |
-Xss<size> | 設(shè)置每個(gè) Java 線程堆棧大小税手。JDK5.0以后每個(gè)線程堆棧大小為1M,以前每個(gè)線程堆棧大小為256K需纳。更具應(yīng)用的線程所需內(nèi)存大小進(jìn)行調(diào)整芦倒。在相同物理內(nèi)存下,減小這個(gè)值能生成更多的線程不翩。但是操作系統(tǒng)對(duì)一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的兵扬,不能無(wú)限生成,經(jīng)驗(yàn)值在3000~5000左右口蝠。 | -Xss128k |
-Xloggc:file | 與-verbose:gc功能類似器钟,只是將每次GC事件的相關(guān)情況記錄到一個(gè)文件中,文件的位置最好在本地亚皂,以避免網(wǎng)絡(luò)的潛在問(wèn)題俱箱。若與verbose命令同時(shí)出現(xiàn)在命令行中,則以-Xloggc為準(zhǔn)灭必。 | |
-Xprof | 跟蹤正運(yùn)行的程序狞谱,并將跟蹤數(shù)據(jù)在標(biāo)準(zhǔn)輸出輸出;適合于開(kāi)發(fā)環(huán)境調(diào)試禁漓。 | |
-XX:-DisableExplicitGC | 禁止調(diào)用System.gc()跟衅;但jvm的gc仍然有效 | 行為參數(shù) |
-XX:+MaxFDLimit | 最大化文件描述符的數(shù)量限制 | 行為參數(shù) |
-XX:+ScavengeBeforeFullGC | 新生代GC優(yōu)先于Full GC執(zhí)行 | 行為參數(shù) |
-XX:+UseGCOverheadLimit | 在拋出OOM之前限制jvm耗費(fèi)在GC上的時(shí)間比例 | 行為參數(shù) |
-XX:-UseConcMarkSweepGC | 對(duì)老生代采用并發(fā)標(biāo)記交換算法進(jìn)行GC。jvm中GC執(zhí)行的一種方式播歼,并發(fā)(ConcMarkSweepGC)是指多個(gè)線程并發(fā)執(zhí)行GC伶跷,一般適用于多處理器系統(tǒng)中,可以提高GC的效率秘狞,但算法復(fù)雜叭莫,系統(tǒng)消耗較大; | 行為參數(shù) |
-XX:-UseParallelGC | 啟用并行GC烁试。jvm中GC執(zhí)行的一種方式雇初,并行(ParallelGC)是指GC運(yùn)行時(shí),對(duì)應(yīng)用程序運(yùn)行沒(méi)有影響减响,GC和app兩者的線程在并發(fā)執(zhí)行靖诗,這樣可以最大限度不影響app的運(yùn)行; | 行為參數(shù) |
-XX:-UseParallelOldGC | 對(duì)Full GC啟用并行支示,當(dāng)-XX:-UseParallelGC啟用時(shí)該項(xiàng)自動(dòng)啟用 | 行為參數(shù) |
-XX:-UseSerialGC | 啟用串行GC刊橘。jvm中GC執(zhí)行的一種方式,串行(SerialGC)是jvm的默認(rèn)GC方式颂鸿,一般適用于小型應(yīng)用和單處理器促绵,算法比較簡(jiǎn)單,GC效率也較高嘴纺,但可能會(huì)給應(yīng)用帶來(lái)停頓败晴; | 行為參數(shù) |
-XX:+UseThreadPriorities | 啟用本地線程優(yōu)先級(jí) | 行為參數(shù) |
-XX:LargePageSizeInBytes=4m | 設(shè)置用于Java堆的大頁(yè)面尺寸 | 性能調(diào)優(yōu) |
-XX:MaxHeapFreeRatio=70 | GC后java堆中空閑量占的最大比例 | 性能調(diào)優(yōu) |
-XX:MaxNewSize=size | 新生成對(duì)象能占用內(nèi)存的最大值 | 性能調(diào)優(yōu) |
-XX:MaxPermSize=64m | 老生代對(duì)象能占用內(nèi)存的最大值 | 性能調(diào)優(yōu) |
-XX:MinHeapFreeRatio=40 | GC后java堆中空閑量占的最小比例 | 性能調(diào)優(yōu) |
-XX:NewRatio=2 | 新生代內(nèi)存容量與老生代內(nèi)存容量的比例 | 性能調(diào)優(yōu) |
-XX:NewSize=2.125m | 新生代對(duì)象生成時(shí)占用內(nèi)存的默認(rèn)值 | 性能調(diào)優(yōu) |
-XX:ReservedCodeCacheSize=32m | 保留代碼占用的內(nèi)存容量 | 性能調(diào)優(yōu) |
-XX:ThreadStackSize=512 | 設(shè)置線程棧大小,若為0則使用系統(tǒng)默認(rèn)值 | 性能調(diào)優(yōu) |
-XX:+UseLargePages | 使用大頁(yè)面內(nèi)存 | |
-XX:-CITime | 打印消耗在JIT編譯的時(shí)間 | 調(diào)試參數(shù) |
-XX:ErrorFile=./hs_err_pid<pid>.log | 保存錯(cuò)誤日志或者數(shù)據(jù)到文件中 | 調(diào)試參數(shù) |
-XX:-ExtendedDTraceProbes | 開(kāi)啟solaris特有的dtrace探針 | 調(diào)試參數(shù) |
-XX:HeapDumpPath=./java_pid<pid>.hprof | 指定導(dǎo)出堆信息時(shí)的路徑或文件名 | 調(diào)試參數(shù) |
-XX:-HeapDumpOnOutOfMemoryError | 當(dāng)首次遭遇OOM時(shí)導(dǎo)出此時(shí)堆中相關(guān)信息 | 調(diào)試參數(shù) |
-XX:OnError="<cmd args>;<cmd args>" | 出現(xiàn)致命ERROR之后運(yùn)行自定義命令 | 調(diào)試參數(shù) |
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>" | 當(dāng)首次遭遇OOM時(shí)執(zhí)行自定義命令 | 調(diào)試參數(shù) |
-XX:-PrintClassHistogram | 遇到Ctrl-Break后打印類實(shí)例的柱狀信息颖医,與jmap -histo功能相同 | 調(diào)試參數(shù) |
-XX:-PrintConcurrentLocks | 遇到Ctrl-Break后打印并發(fā)鎖的相關(guān)信息位衩,與jstack -l功能相同 | 調(diào)試參數(shù) |
-XX:-PrintCommandLineFlags | 打印在命令行中出現(xiàn)過(guò)的標(biāo)記 | 調(diào)試參數(shù) |
-XX:-PrintCompilation | 當(dāng)一個(gè)方法被編譯時(shí)打印相關(guān)信息 | 調(diào)試參數(shù) |
-XX:-PrintGC | 每次GC時(shí)打印相關(guān)信息 | 調(diào)試參數(shù) |
-XX:-PrintGC Details | 每次GC時(shí)打印詳細(xì)信息 | 調(diào)試參數(shù) |
-XX:-PrintGCTimeStamps | 打印每次GC的時(shí)間戳 | 調(diào)試參數(shù) |
-XX:-TraceClassLoading | 跟蹤類的加載信息 | 調(diào)試參數(shù) |
-XX:-TraceClassLoadingPreorder | 跟蹤被引用到的所有類的加載信息 | 調(diào)試參數(shù) |
-XX:-TraceClassResolution | 跟蹤常量池 | 調(diào)試參數(shù) |
-XX:-TraceClassUnloading | 跟蹤類的卸載信息 | 調(diào)試參數(shù) |
-XX:-TraceLoaderConstraints | 跟蹤類加載器約束的相關(guān)信息 | 調(diào)試參數(shù) |