Java 命令行參數彙總

最近調試一些關於Java內存的東西,把以前一直沒能整理,只是大概有個概念的東西翻出來了一下。
 
Java的命令行參數,在此前作web開發的時候,不是很經常使用到,若是徹底沒有用到過也能理解,畢竟沒搞炸過,沒gc過,jvm(sun jdk)的一些默認參數已經足夠,web的東西只要環境相差不是太厲害,都不必用到遠程調試。
 
作過Java命令行工具開發的可能會使用一些,例如java -cp example.jar -option_a value_a 這樣的技巧,或者封裝一下成爲一個工具包。用來給一些屬性賦值,更新手的操做(也有多是爲了省事兒)會按一些例如,java -cp example.jar a b c 按順序分別入參。對於一些框架,Apache MapReduce或是Spring Cloud這樣的,就會看到-Dexample.options=xx這樣的入參。
 
那這時候就會有一個問題,即框架、你本身的代碼(程序入參)、jvm參數三方混一塊兒的狀況。也就是爲何要把它們區分開來,這樣,咱們本身設計一些參數的時候可以更加合理,有的權衡。
 
下面列出了一些目前我所知道的狀況。
 
1.Java 命令行工具參數
    例如:-verbose -jar -cp 之類的一些參數,這部分參數是Java可執行文件自己接受的參數。
具體能夠參考sun官方給出的參數列表: https://docs.oracle.com/javase/10/tools/java.htm#JSWOR624
 
2.系統參數(不要和環境變量混掉)
    例如: -Djava.compiler=NONE  -Djava.security.auth.login.config  (例如kafka認證) ,這些以-D參數開頭的,能夠經過System.getProperty("key")取得,注意環境變量是System.getenv(),不要把它們搞混 
這部分很難找到確切的參考,取決於你使用的框架,可使用的系統變量截然不同。關於Java 自身可使用的,則能夠在sun官方的指南中看到,具體放這邊(失效能夠搜索Java oracle tutorial,慢慢找)
關於上文也提到的 -Djava.security.auth.login.config 這個選項呢,則是JAAS標準的一部分,能夠在這邊找到參考,
 
3.JVM參數
    例如-X,以及-XX參數,這部分的參考就不少了,stackoverflow上面有個回答貼心的將它們分紅4大類,固然也不必定要分類強迫症,大概理下思路能夠
  •     Non-Standard Options (prefixed with -X)
These options are general purpose options that are specific to the Java HotSpot Virtual Machine.
For example : -Xmssize, -Xmxsize
  • Advanced Runtime Options (prefixed with -XX) 運行時
These options control the runtime behavior of the Java HotSpot VM.
  • Advanced JIT Compiler Options (prefixed with -XX) JIT選項
    These options control the dynamic just-in-time (JIT) compilation performed by the Java HotSpot VM.
  • Advanced Serviceability Options (prefixed with -XX) 服務指標(暫翻)
    These options provide the ability to gather system information and perform extensive debugging.
  • Advanced Garbage Collection Options (prefixed with -XX) 垃圾回收
    These options control how garbage collection (GC) is performed by the Java HotSpot VM.
 
 
問題的本質:
入參問題的本質,在於java命令行工具按照約定(這部分我找不到規範,對openjdk沒有研究,只知道兼容性各類報錯)
將參數解析,而後發送往不一樣的部分,一部分是Java虛擬機要的,一部分是用戶的主類要的,還有一部分是告訴工具自身如何尋址。當Java自身把本身須要的部分徹底取走以後,剩下的就是用戶主類的入參了,有點相似保留字,奈何沒有規範,只能看到目前的參考去避讓這部分。那難道咱們本身的入參只能剩下依序嗎?
 
因而回到咱們最開始的問題,咱們本身設計參數的時候,若是文明禮讓地去避讓上面的幾大類,好比爲避免和Java 參數類似,不用-; --;開頭,同時爲了避免和框架混一塊兒,不使用-D參數,天然也用不了-X -XX參數。真就按序解析?個人答案,學他們, 加前綴!或者你自身要開發一個框架,那不介意-D參數也能夠,畢竟有系統API參數能夠調用,何樂不爲
 
就先寫到這裏,這麼說吧,編程的東西,你不知道源頭,很大程度上等於,你什麼都不知道
 
PS,遠程調試?check here_
相關文章
相關標籤/搜索