Java啟動命令大全(匯總)
Java啟動命令是所有java應(yīng)用程序的入口,通過它來啟動Java運行時環(huán)境,并加載相關(guān)的class。不過由于IDE的盛行,我們Java程序員中的大多數(shù)并不是非常的了解Java啟動命令。本文希望做一個Java啟動命令的匯總,和各位同道分享,也便于日后作為自己的參考。
Java啟動命令語法
Java啟動命令有兩個, java
以及 javaw
,它們的唯一區(qū)別是 javaw
不會啟動一個控制臺窗口(啟動失敗的時候會彈出附有錯誤信息的窗口),而 java
會。不希望有控制臺的時候用 javaw
,其它時候用 java
。它們的語法結(jié)構(gòu)都一樣,只需要記住其中一個即可。調(diào)用程序有兩種方式,指定Class以及指定jar文件,具體的語法如下:
- java [options] class [arguments]
- java [options] -jar file.jar [arguments]
- javaw [options] class [arguments]
- javaw [options] -jar file.jar [arguments]
其中[options]表示Java運行環(huán)境的可選配置信息,會影響java運行環(huán)境,是性能調(diào)優(yōu)的關(guān)鍵所在,可以傳多個選擇項。class表示的是包含main函數(shù)的class名稱(含包名)。-jar和file.jar配對使用,-jar指示用jar方式啟動,而file.jar表示的時jar文件的名稱,替換為自己的jar文件名字即可。[arguments]表示的是程序自身的參數(shù),會被傳到main函數(shù)的參數(shù)數(shù)組里面,為程序自己所使用。
Java啟動命令可選項(options)
Java啟動命令可選項(options)大致可分為標準和非標準兩種,非標準的可選項不保證在所有平臺上都實現(xiàn),并且未來的版本中可能會被修改且不告知,總之就是不穩(wěn)定(Unstable)。不過有的非標準可選項還是非常有用的,后面我們會談到。
標準可選項(Standard options)
- -client 與 -server
以clien或者server模式啟動,二選一,Java運行時環(huán)境會依場景來優(yōu)化自己的配置策略。值得指出的是64位的Java不支持client模式,默認就是server。不同平臺的默認配置可以參考Server-Class Machine Detection
- -cp 和 -classpath
最重要的可選項之一,指定Java運行時環(huán)境搜索class的路徑。-cp只是-classpath的簡寫,做相同的事情,用其中之一即可。多個路徑用英文里面的分號分隔。如果-cp和-classpath都沒有使用,CLASSPATH環(huán)境變量也沒用設(shè)定,那么就是當前路徑(.)。
- -Dproperty=value
設(shè)定系統(tǒng)屬性值,比如編碼-Dfile.encoding=UTF-8??梢栽O(shè)定一些系統(tǒng)使用的屬性,也可以用來向程序傳遞值,比如程序的根目錄。 可以通過 System.getProperty("keyname")
來獲取屬性。
- -help與-?
都是要求顯示幫助信息
- disableassertions[:packagename...|:classname]與da[:packagename...|:classname]
禁用斷言,可以指定包名(注意包后面的三個點)或者class的名稱。默認就是禁用的。da只是disableassertions的縮寫,使用方法完全一樣。 禁用包: da:org.slf4j...
禁用類: da:org.slf4j.LoggerFactory
- enableassertions[:packagename...|:classname]與ea[:packagename...|:classname]
啟用斷言,可以指定包名(注意包后面的三個點)或者class的名稱。ea只是enableassertions的縮寫,使用方法完全一樣。 啟用包: ea:org.slf4j...
啟用類: ea:org.slf4j.LoggerFactory
- disablesystemassertions與dsa
禁用系統(tǒng)類(syetem class)斷言
- enablesystemassertions與esa
啟用系統(tǒng)類(syetem class)斷言
- -version 與 -showversion
這兩個都顯示Java的版本信息,不過后者會把help的信息也顯示出來。
- verbose:class, verbose:gc, "verbose:jni"
verbose:class顯示class加載信息,verbose:gc顯示Java垃圾回收的信息。verbose:jni顯示JNI(Java Native Interface)信息。
- -agentlib:agentlibname[=options]與-agentpath:pathtoagent[=options]
都是加載本地代理庫(Native Agent Library),-agentlib只需要library的名稱,且會根據(jù)不同的操作系統(tǒng)轉(zhuǎn)為對應(yīng)的文件(Windows為DLL)。 -agentpath指定library的絕對路徑。
非標準可選項(Nonstandard Options)
非標準的可選項都以-X開始,其中的部分選項如下:
-X顯示所有非標準選項的信息??纯炊加行┦裁捶菢藴蔬x項吧。 java -X
。
- -Xms<size>
設(shè)置Java堆的初始化大小。例如 -Xms1024m,Java堆的初始化大小就設(shè)置為1G。
- -Xmx<size>
設(shè)置Java堆的最大值。例如 -Xmx3072m,Java堆的最大值就設(shè)置為3G。
- -Xss<size>
設(shè)置Java線程棧的值。例如 -Xss128m,Java線程棧的值就設(shè)置為128兆。
- -Xnoclassgc
禁用Java垃圾回收器。
- -Xincgc
啟用Java增量式垃圾回收器。
- -Xmixed
解釋模式和編譯模式混合執(zhí)行
- -Xint
僅解釋模式執(zhí)行
- -Xshare:on,-Xshare:off,-Xshare:auto
設(shè)定類數(shù)據(jù)共享CDS(Class data sharing)是否開啟。-Xshare:on要求一定要用共享的類數(shù)據(jù);-Xshare:auto表示讓系統(tǒng)自己判斷 是否有類共享數(shù)據(jù),有就用,沒有不用;-Xshare:off禁用共享類數(shù)據(jù)。
- -Xcheck:jni
針對JNI函數(shù)做額外的檢查
不穩(wěn)定(Unstable)的選項
不穩(wěn)定的選項當然是非標準的,都以-XX開頭。這一類參數(shù)有很多,暫時只列其中的幾個:
-XX:PermSize<=size>和-XX:MaxPermSize<=size>設(shè)置Java永久保存區(qū)域(Permanent Generation Space)的大小。PermSize設(shè)置初始值,MaxPermSize設(shè)置最大值。 該區(qū)域主要存儲class的信息,且不會被 垃圾回收器回收,如果加載的class過多,就會報錯:java.lang.OutOfMemoryError: PermGen space。 -XX:PermSize=64m -XX:MaxPermSize=128m,表示Java永久保存區(qū)域大小初始化問為64兆,最大為128兆。
-XX:+UseParallelGC開啟并行Java回收器
-XX:+PrintGCDetails顯示比 -verbose:gc
更多更準確的垃圾回收信息
-XX:+TraceClassLoading顯示類加載以及卸載的信息
程序參數(shù)(arguments)
class或者jar文件之后的字符串會傳給main函數(shù)的 String[] args
參數(shù),多個參數(shù)用空格隔開。如果某一個參數(shù)包含多個單詞,那么需要用引號包起來。當有很多程序參數(shù),且有的必填,有的可選的時候,如果不設(shè)計好,順序是很頭疼的問題。一種解法是傳鍵值對(key=value),完全不用在意參數(shù)的順序。在main函數(shù)里面把鍵值對解析成Map,然后再校驗以及使用。簡單的示例代碼如下:
public static void main(String[] args) { Map<String, String> arguments = getArguments(args); for (String key : arguments.keySet()) { System.out.println(key + "=" + arguments.get(key)); } } public static Map<String, String> getArguments(String[] args) { Map<String, String> arguments = new HashMap<String, String>(); if (args == null || args.length == 0) { return arguments; } for (String arg : args) { int index = arg.indexOf("="); // 沒有=,或者=是第一個,都出錯。 if (index < 1) { throw new RuntimeException("param must be key value pair"); } String key = arg.substring(0, index); String value = arg.substring(index + 1); arguments.put(key, value); } return arguments; }
參考鏈接
到此這篇關(guān)于Java啟動命令大全的文章就介紹到這了,更多相關(guān)Java啟動命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot中使用攔截器攔截跳轉(zhuǎn)登錄的兩種實現(xiàn)方法
攔截器(Interceptor)是Spring框架提供的一種機制,用于在請求的生命周期中插入自定義邏輯,如身份驗證、日志記錄等,本文將詳細介紹兩種在SpringBoot中使用攔截器來控制用戶登錄并跳轉(zhuǎn)到指定頁面的方法,需要的朋友可以參考下2024-11-11在Spring Boot中使用swagger-bootstrap-ui的方法
這篇文章主要介紹了在Spring Boot中使用swagger-bootstrap-ui的方法,需要的朋友可以參考下2018-01-01