Java命令行運行參數說明大全

http://xinklabi.iteye.com/blog/837435java

Java在運行已編譯完成的類時,是經過java虛擬機來裝載和執行的,java虛擬機經過操做系統命令JAVA_HOME"bin"java –option 來啓動,-option爲虛擬機參數,JAVA_HOME爲JDK安裝路徑,經過這些參數可對虛擬機的運行狀態進行調整,掌握參數的含義可對虛擬機的運行模式有更深刻理解。web

1、         查看參數列表:
虛擬機參數分爲基本和擴展兩類,在命令行中輸入JAVA_HOME"bin"java 就可獲得基本參數列表,在命令行輸入JAVA_HOME"bin"java –X 就可獲得擴展參數列表。
2、         基本參數說明:
1.     -client,-server
這兩個參數用於設置虛擬機使用何種運行模式,client模式啓動比較快,但運行時性能和內存管理效率不如server模式,一般用於客戶端應用程序。相反,server模式啓動比client慢,但可得到更高的運行性能。
在 windows上,缺省的虛擬機類型爲client模式,若是要使用 server模式,就須要在啓動虛擬機時加-server參數,以得到更高性能,對服務器端應用,推薦採用server模式,尤爲是多個CPU的系統。在 Linux,Solaris上缺省採用server模式。
2.     -hotspot
含義與client相同,jdk1.4之前使用的參數,jdk1.4開始再也不使用,代之以client。
3.     -classpath,-cp
虛擬機在運行一個類時,須要將其裝入內存,虛擬機搜索類的方式和順序以下:
Bootstrap classes,Extension classes,User classes。
Bootstrap 中的路徑是虛擬機自帶的jar或zip文件,虛擬機首先搜索這些包文件,用System.getProperty("sun.boot.class.path")可獲得虛擬機搜索的包名。
Extension是位於jre"lib"ext目錄下的jar文件,虛擬機在搜索完Bootstrap後就搜索該目錄下的jar文件。用System. getProperty("java.ext.dirs」)可獲得虛擬機使用Extension搜索路徑。
User classes搜索順序爲當前目錄、環境變量 CLASSPATH、-classpath。
4.     -classpath
告知虛擬機搜索目錄名、jar文檔名、zip文檔名,之間用分號;分隔。
例如當你本身開發了公共類幷包裝成一個common.jar包,在使用 common.jar中的類時,就須要用-classpath common.jar 告訴虛擬機從common.jar中查找該類,不然虛擬機就會拋出java.lang.NoClassDefFoundError異常,代表未找到類定義。
在運行時可用System.getProperty(「java.class.path」)獲得虛擬機查找類的路徑。
bootstrap

使用-classpath後虛擬機將再也不使用CLASSPATH中的類搜索路徑,若是-classpath和CLASSPATH都沒有設置,則虛擬機使用當前路徑(.)做爲類搜索路徑。
推薦使用-classpath來定義虛擬機要搜索的類路徑,而不要使用環境變量 CLASSPATH的搜索路徑,以減小多個項目同時使用CLASSPATH時存在的潛在衝突。例如應用1要使用a1.0.jar中的類G,應用2要使用 a2.0.jar中的類G,a2.0.jar是a1.0.jar的升級包,當a1.0.jar,a2.0.jar都在CLASSPATH中,虛擬機搜索到第一個包中的類G時就中止搜索,若是應用1應用2的虛擬機都從CLASSPATH中搜索,就會有一個應用得不到正確版本的類G。
5.     -D<propertyName>=value
在虛擬機的系統屬性中設置屬性名/值對,運行在此虛擬機之上的應用程序可用System.getProperty(「propertyName」)獲得value的值。
若是value中有空格,則須要用雙引號將該值括起來,如-Dname=」space string」。
該參數一般用於設置系統級全局變量值,如配置文件路徑,應爲該屬性在程序中任何地方均可訪問。
windows

6.    -verbose[:class|gc|jni]
在輸出設備上顯示虛擬機運行信息。
verbose和verbose:class含義相同,輸出虛擬機裝入的類的信息,顯示的信息格式以下:
[Loaded java.io.FilePermission$1 from shared objects file]
當虛擬機報告類找不到或類衝突時可用此參數來診斷來查看虛擬機從裝入類的狀況。
7.     -verbose:gc
在虛擬機發生內存回收時在輸出設備顯示信息,格式以下:
[Full GC 268K->168K(1984K), 0.0187390 secs]
該參數用來監視虛擬機內存回收的狀況。
8.     -verbose:jni
在虛擬機調用native方法時輸出設備顯示信息,格式以下:
[Dynamic-linking native method HelloNative.sum ... JNI]
該參數用來監視虛擬機調用本地方法的狀況,在發生jni錯誤時可爲診斷提供便利。
9.     -version
顯示可運行的虛擬機版本信息而後退出。一臺機器上裝有不一樣版本的JDK時
10.-showversion
顯示版本信息以及幫助信息。 內容來自dedecms
11.-ea[:<packagename>...|:<classname>]
12.-enableassertions[:<packagename>...|:<classname>]
從JDK1.4開始,java可支持斷言機制,用於診斷運行時問題。一般在測試階段使斷言有效,在正式運行時不須要運行斷言。斷言後的表達式的值是一個邏輯值,爲true時斷言不運行,爲false時斷言運行,拋出java.lang.AssertionError錯誤。
上述參數就用來設置虛擬機是否啓動斷言機制,缺省時虛擬機關閉斷言機制,用-ea 可打開斷言機制,不加<packagename>和classname時運行全部包和類中的斷言,若是但願只運行某些包或類中的斷言,可將包名或類名加到-ea以後。例如要啓動包com.foo.util中的斷言,可用命令 –ea:com.foo.util 。
13.-da[:<packagename>...|:<classname>]
14.-disableassertions[:<packagename>...|:<classname>]
用來設置虛擬機關閉斷言處理,packagename和classname的使用方法和-ea相同。
15.-esa | -enablesystemassertions
設置虛擬機顯示系統類的斷言。
16.-dsa | -disablesystemassertions
設置虛擬機關閉系統類的斷言。 dedecms.com
17.-agentlib:<libname>[=<options>]
該參數是JDK5新引入的,用於虛擬機裝載本地代理庫。
Libname 爲本地代理庫文件名,虛擬機的搜索路徑爲環境變量PATH中的路徑,options爲傳給本地庫啓動時的參數,多個參數之間用逗號分隔。在Windows 平臺上虛擬機搜索本地庫名爲libname.dll的文件,在Unix上虛擬機搜索本地庫名爲libname.so的文件,搜索路徑環境變量在不一樣系統上有所不一樣,Linux、SunOS、IRIX上爲LD_LIBRARY_PATH,AIX上爲LIBPATH,HP-UX上爲SHLIB_PATH。
例如可以使用-agentlib:hprof來獲取虛擬機的運行狀況,包括CPU、內存、線程等的運行數據,並可輸出到指定文件中,可用-agentlib:hprof=help來獲得使用幫助列表。在jre"bin目錄下可發現hprof.dll文件。
18. -agentpath:<pathname>[=<options>]
設置虛擬機按全路徑裝載本地庫,再也不搜索PATH中的路徑。其餘功能和agentlib相同。
19.-javaagent:<jarpath>[=<options>]
虛擬機啓動時裝入java語言設備代理。Jarpath文件中的mainfest 文件必須有Agent-Class屬性。代理類要實現public static void premain(String agentArgs, Instrumentation inst)方法。當虛擬機初始化時,將按代理類的說明順序調用premain方法。copyright dedecms
參見:java.lang.instrument
3、         擴展參數說明
1.     -Xmixed
設置-client模式虛擬機對使用頻率高的方式進行Just-In-Time編譯和執行,對其餘方法使用解釋方式執行。該方式是虛擬機缺省模式。
2.     -Xint
設置-client模式下運行的虛擬機以解釋方式執行類的字節碼,不將字節碼編譯爲本機碼。
3.     -Xbootclasspath:path
4.     -Xbootclasspath/a:path
5.     -Xbootclasspath/p:path
改變虛擬機裝載缺省系統運行包rt.jar而從-Xbootclasspath中設定的搜索路徑中裝載系統運行類。除非你本身能寫一個運行時,不然不會用到該參數。
/a:將在缺省搜索路徑後加上path 中的搜索路徑。
/p:在缺省搜索路徑前先搜索path中的搜索路徑。
6.     -Xnoclassgc
關閉虛擬機對class的垃圾回收功能。
7.     -Xincgc
啓動增量垃圾收集器,缺省是關閉的。增量垃圾收集器能減小偶然發生的長時間的垃圾回收形成的暫停時間。但增量垃圾收集器和應用程序併發執行,所以會佔用部分CPU在應用程序上的功能。
8.     -Xloggc:<file>
將虛擬機每次垃圾回收的信息寫到日誌文件中,文件名由file指定,文件格式是平文件,內容和-verbose:gc輸出內容相同。
9.     -Xbatch
虛擬機的缺省運行方式是在後臺編譯類代碼,而後在前臺執行代碼,使用-Xbatch參數將關閉虛擬機後臺編譯,在前臺編譯完成後再執行。
10.-Xms<size>
設置虛擬機可用內存堆的初始大小,缺省單位爲字節,該大小爲1024的整數倍而且要大於1MB,可用k(K)或m(M)爲單位來設置較大的內存數。初始堆大小爲2MB。
例如:-Xms6400K,-Xms256M
11.-Xmx<size>
設置虛擬機內存堆的最大可用大小,缺省單位爲字節。該值必須爲1024整數倍,而且要大於2MB。可用k(K)或m(M)爲單位來設置較大的內存數。缺省堆最大值爲64MB。
例如:-Xmx81920K,-Xmx80M
當應用程序申請了大內存運行時虛擬機拋出java.lang.OutOfMemoryError: Java heap space錯誤,就須要使用-Xmx設媒洗蟮目捎媚詿娑選?BR>
12.-Xss<size>
設置線程棧的大小,缺省單位爲字節。與-Xmx相似,也可用K或M來設置較大的值。一般操做系統分配給線程棧的缺省大小爲1MB。
另外也可在java中建立線程對象時設置棧的大小,構造函數原型爲Thread(ThreadGroup group, Runnable target, String name, long stackSize)。
13.-Xprof
輸出CPU運行時的診斷信息。
14.-Xfuture
對類文件進行嚴格格式檢查,以保證類代碼符合類代碼規範。爲保持向後兼容,虛擬機缺省不進行嚴格的格式檢查。
15.-Xrs
減小虛擬機中操做系統的信號(singals)的使用。該參數一般用在虛擬機之後臺服務方式運行時使用(如Servlet)。
16.-Xcheck:jni
1、運行class文件
執行帶main方法的class文件,命令行爲:
java <CLASS文件名>
注意:CLASS文件名不要帶文件後綴.class
例如:
java Test
若是執行的class文件是帶包的,即在類文件中使用了:
package <包名>
那應該在包的基路徑下執行,命令行爲:
java <包名>.CLASS文件名
例如:
PackageTest.java中,其包名爲:com.ee2ee.test,對應的語句爲:
package com.ee2ee.test;
PackageTest.java及編譯後的class文件PackageTest.class的存放目錄以下:
classes
  |__com
      |__ee2ee
           |__test
                |__PackageTest.java
                |__PackageTest.class

要運行PackageTest.class,應在classes目錄下執行:
java com.ee2ee.test.PackageTest 
2、運行jar文件中的class
原理和運行class文件同樣,只需加上參數-cp <jar文件名>便可。
例如:執行test.jar中的類com.ee2ee.test.PackageTest,命令行以下:
java -cp test.jar com.ee2ee.test.PackageTest 
3、顯示jdk版本信息
當一臺機器上有多個jdk版本時,須要知道當前使用的是那個版本的jdk,使用參數-version便可知道其版本,命令行爲:
java -version 
4、增長虛擬機可使用的最大內存
java虛擬機可以使用的最大內存是有限制的,缺省值一般爲64MB或128MB。
若是一個應用程序爲了提升性能而把數據加載內存中而佔用較大的內存,好比超過了默認的最大值128MB,須要加大java虛擬機可以使用的最大內存,不然會出現Out of Memory(系統內存不足)的異常。啓動java時,須要使用以下兩個參數:
-Xms java虛擬機初始化時使用的內存大小
-Xmx java虛擬機可使用的最大內存
以上兩個參數中設置的size,能夠帶單位,例如:256m表示256MB
舉例說明:
java -Xms128m -Xmx256m ...
表示java虛擬機初始化時使用的內存爲128MB,可以使用的最大內存爲256MB。
對於tomcat,能夠修改其腳本catalina.sh(unix平臺)或catalina.bat(windows平臺),設置變量JAVA_OPTS便可,例如:
JAVA_OPTS='-Xms128m -Xmx256m' 
在控制檯輸出信息中,有個-X(注意是大寫)的命令,這個正是查看JVM配置參數的命令。
其次,用java -X 命令查看JVM的配置說明:
運行後以下結果,這些就是配置JVM參數的祕密武器,這些信息都是英文的,爲了方便閱讀,我根據本身的理解翻譯成中文了(不許確的地方還請各位博友斧正)
-----------------------------------------------------------------------
D:\j2sdk15\bin>java -X
    -Xmixed           mixed mode execution (default)
    -Xint             interpreted mode execution only
    -Xbootclasspath:<directories and zip/jar files separated by ;>
                      set search path for bootstrap classes and resources
    -Xbootclasspath/a:<directories and zip/jar files separated by ;>
                      append to end of bootstrap class path
    -Xbootclasspath/p:<directories and zip/jar files separated by ;>
                      prepend in front of bootstrap class path
    -Xnoclassgc       disable class garbage collection
    -Xincgc           enable incremental garbage collection
    -Xloggc:<file>    log GC status to a file with time stamps
    -Xbatch           disable background compilation
    -Xms<size>        set initial Java heap size
    -Xmx<size>        set maximum Java heap size
    -Xss<size>        set java thread stack size
    -Xprof            output cpu profiling data
    -Xfuture          enable strictest checks, anticipating future default
    -Xrs              reduce use of OS signals by Java/VM (see documentation)
    -Xcheck:jni       perform. additional checks for JNI functions
    -Xshare:off       do not attempt to use shared class data
    -Xshare:auto      use shared class data if possible (default)
    -Xshare:on        require using shared class data, otherwise fail.
 
The -X options are non-standard and subject to change without notice.
-----------------------------------------------------------------------
 
JVM配置參數中文說明:
-----------------------------------------------------------------------
一、-Xmixed           mixed mode execution (default)
 混合模式執行
 
二、-Xint             interpreted mode execution only
 解釋模式執行
 
三、-Xbootclasspath:<directories and zip/jar files separated by ;>
      set search path for bootstrap classes and resources
 設置zip/jar資源或者類(.class文件)存放目錄路徑
 
三、-Xbootclasspath/a:<directories and zip/jar files separated by ;>
      append to end of bootstrap class path
 追加zip/jar資源或者類(.class文件)存放目錄路徑
 
四、-Xbootclasspath/p:<directories and zip/jar files separated by ;>
      prepend in front of bootstrap class path
 預先加載zip/jar資源或者類(.class文件)存放目錄路徑
 
五、-Xnoclassgc       disable class garbage collection
 關閉類垃圾回收功能
 
六、-Xincgc           enable incremental garbage collection
 開啓類的垃圾回收功能
 
七、-Xloggc:<file>    log GC status to a file with time stamps
 記錄垃圾回日誌到一個文件。
 
八、-Xbatch           disable background compilation
 關閉後臺編譯
 
九、-Xms<size>        set initial Java heap size
 設置JVM初始化堆內存大小
 
十、-Xmx<size>        set maximum Java heap size
 設置JVM最大的堆內存大小
 
十一、-Xss<size>        set java thread stack size
 設置JVM棧內存大小
 
十二、-Xprof            output cpu profiling data
 輸入CPU概要表數據
 
1三、-Xfuture          enable strictest checks, anticipating future default
 執行嚴格的代碼檢查,預測可能出現的狀況
 
1四、-Xrs              reduce use of OS signals by Java/VM (see documentation)
 經過JVM還原操做系統信號
 
1五、-Xcheck:jni       perform. additional checks for JNI functions
 對JNI函數執行檢查
 
1六、-Xshare:off       do not attempt to use shared class data
 儘量不去使用共享類的數據
 
1七、-Xshare:auto      use shared class data if possible (default)
 儘量的使用共享類的數據
 
1八、-Xshare:on       require using shared class data, otherwise fail.
 儘量的使用共享類的數據,不然運行失敗
 
The -X options are non-standard and subject to change without notice.
-----------------------------------------------------------------------
 
怎麼用這這些參數呢?其實全部的命令行都是這麼一用,下面我就給出一個最簡單的HelloWorl的例子來演示這個參數的用法,很是的簡單。
 
HelloWorld.java
-----------------------------------------------
public class  HelloWorld
{
 public static void main(String[] args)
 {
  System.out.println("Hello World!");
 }
}
 
編譯並運行:
D:\j2sdk15\bin>javac HelloWorld.java
 
D:\j2sdk15\bin>java -Xms256M -Xmx512M HelloWorld
Hello World!
 
呵呵,這下知足了吧!
 
實踐:在大型系統或者應用中配置JVM參數
好比你配置IDE工具的參數,常見的有IDEA、Eclipse,這個是在一個配置文件中指定便可。
若是你要在J2EE環境中配置這些參數,那麼你須要在J2EE應用服務器或者Servlet容器相關啓動參數設置處指定,其啓動文件中來配置,Tomcat是在catalina.bat中配置,weblogic和websphere是在其餘地方,具體我就說了,相信玩過的這些大型服務器的人都知道,沒玩過的看看這篇文章,玩玩就知道了,呵呵。
另外經常有人問到jdk的一些相關命令用法,其實,當你看到這裏的時候,你應該知道如何獲取這些命令的用法了。若是你還不會,那麼,建議你去學學DOS,我是沒轍了。若是你會這些,仍是沒有看明白,那麼你趕忙學學英語吧,這樣你就能看懂了。
相關文章
相關標籤/搜索