java命令啟動應用所使用的參數,基本是用於JVM的,某種程度上也叫做JVM參數。總的來說,java啟動參數共分為三大類,分別是:
標准參數(-):相對穩定的參數,每個版本的JVM都可用。
非標准X參數(-X):默認jvm實現這些參數的功能,但是並不保證所有jvm實現都滿足,且不保證向后兼容。
XX參數(-XX):此類參數各個jvm實現會有所不同,將來可能會隨時取消。
1、常用標准參數
-cp或-classpath <目錄和 zip/jar 文件的類搜索路徑>。
使用-classpath后jvm將不再使用CLASSPATH中的類搜索路徑,如果-classpath和CLASSPATH都沒有設置,則jvm使用當前路徑(.)作為類搜索路徑。
注意:linux用":",windows用";"來分隔目錄, JAR 檔案和 ZIP 檔案列表, 用於搜索類文件。
-D<名稱>=<值> 設置系統屬性,運行在此jvm之上的應用程序可用System.getProperty(“property”)得到value的值。
如果value中有空格,則需要用雙引號將該值括起來,如-Dfoo=”foo bar”。該參數通常用於設置系統級全局變量值,如配置文件路徑,以便該屬性在程序中任何地方都可訪問。如:
maven跳過單元測試,使用
java -Dmaven.test.skip=true
-verbose:[class|gc|jni] 啟用詳細輸出,一般在調試和診斷時,都會把gc的詳細信息輸出
-version 輸出產品版本並退出
-? -help 輸出此幫助消息
-X 輸出非標准選項的幫助
-agentlib:<libname>[=<選項>] 加載本機代理庫 <libname>, 例如 -agentlib:hprof
另請參閱 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:<pathname>[=<選項>] 按完整路徑名加載本機代理庫
-javaagent:<jarpath>[=<選項>] 加載Java編程語言代理, 請參閱 java.lang.instrument
2、常用X參數
-Xbootclasspath: 設置搜索路徑以引導類和資源,讓jvm從指定路徑(可以是分號分隔的目錄、jar、或者zip)中加載bootclass,用來替換jdk的rt.jar
-Xms 指定jvm堆的初始大小,默認為物理內存的1/64,最小為1M;可以指定單位,比如k、m,若不指定,則默認為字節。
-Xmx 指定jvm堆的最大值,默認為物理內存的1/4或者1G,最小為2M;單位與-Xms一致。
-Xss 設置單個線程棧的大小,一般默認為512k。
-Xmn 設置堆(heap)的年輕代的初始值及最大值,單位與-Xms一致,年輕代是存儲新對象的地址,也是GC發生得最頻繁的地方,若設置過小,則會容易觸發年輕代垃圾回收(minor gc),若設置過大,只觸發full gc,則占用時間會很長,oracle建議是把年輕代設置在堆大小的四份之一到一半的。這命令同時設置了初始值和最大值,可以使用-XX:NewSize和-XX:MaxNewSiz來分別設置。
3、常用XX參數
-XX:+PrintHeapAtGC
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-XX:+PrintTenuringDistribution
-XX:+PrintGCApplicationStoppedTime
-XX:+HeapDumpOnOutOfMemoryError
-XX:+PrintFlagsFinal 輸出參數的最終值
-XX:+PrintFlagsInitial 輸出參數的默認值
-XX:-TraceClassLoading 跟蹤類的加載信息
-XX:-TraceClassLoadingPreorder 跟蹤被引用到的所有類的加載信息
-XX:-TraceClassResolution 跟蹤常量池
-XX:-TraceClassUnloading 跟蹤類的卸載信息
-XX:HeapDumpPath=logs/heapdump.hprof,發生OOM時,dump出快照到文件heapdump.hprof中。
-XX:ErrorFile=logs/java_error_%p.log,發生JVM錯誤時,把日志輸出到java_error_%p.log中。