- 相關(guān)推薦
Java命令參數(shù)說明大全
為了提高性能,往往需要調(diào)整java命令參數(shù),以求系統(tǒng)達(dá)到最佳新能。另外這些參數(shù)的配置也是影響系統(tǒng)穩(wěn)定性的一個重要因素,相信大多數(shù)Java開發(fā)人員都見過“OutOfMemory”類型的錯誤。這其中很可能就是JVM參數(shù)配置不當(dāng)或者就沒有配置沒意識到配置引起的。那么java命令參數(shù)要怎么設(shè)置呢?下面跟yjbys小編一起來看看吧!
Java 在運行已編譯完成的類時,是通過 java 虛擬機來裝載和執(zhí)行的,java 虛擬機通過操作系統(tǒng)命令 JAVA_HOME\bin\java –option 來啟動,-option 為虛擬機參數(shù),JAVA_HOME 為JDK安裝路徑,通過這些參數(shù)可對虛擬機的運行狀態(tài)進(jìn)行調(diào)整,掌握參數(shù)的含義可對虛擬機的運行模式有更深入理解。
一、 查看參數(shù)列表:
虛擬機參數(shù)分為基本和擴展兩類,在命令行中輸入 JAVA_HOME\bin\java 就可得到基本參數(shù)列表,在命令行輸入 JAVA_HOME\bin\java –X 就可得到擴展參數(shù)列表。
二、 基本參數(shù)說明:
-----------------------------------------------------------------------
D:\j2sdk15\bin>java
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-client to select the "client" VM
-server to select the "server" VM
-hotspot is a synonym for the "client" VM [deprecated]
The default VM is client.
-cp
-classpath
A ; separated list of directories, JAR archives,
and ZIP archives to search for class files.
-D
set a system property
-verbose[:class|gc|jni]
enable verbose output
-version print product version and exit
-version:
require the specified version to run
-showversion print product version and continue
-jre-restrict-search | -jre-no-restrict-search
include/exclude user private JREs in the version search
-? -help print this help message
-X print help on non-standard options
-ea[:
-enableassertions[:
enable assertions
-da[:
-disableassertions[:
disable assertions
-esa | -enablesystemassertions
enable system assertions
-dsa | -disablesystemassertions
disable system assertions
-agentlib:
load native agent library
see also, -agentlib:jdwp=help and -agentlib:hprof=help
-agentpath:
load native agent library by full pathname
-javaagent:
load Java programming language agent, see java.lang.instrument
-----------------------------------------------------------------------
1. -client,-server
這兩個參數(shù)用于設(shè)置虛擬機使用何種運行模式,client 模式啟動比較快,但運行時性能和
內(nèi)存管理效率不如 server 模式,通常用于客戶端應(yīng)用程序。相反,server 模式啟動比 client
慢,但可獲得更高的運行性能。
在 windows上,缺省的虛擬機類型為 client 模式,如果要使用 server模式,就需要在啟動
虛擬機時加-server 參數(shù),以獲得更高性能,對服務(wù)器端應(yīng)用,推薦采用 server 模式,尤
其是多個 CPU 的系統(tǒng)。在 Linux,Solaris 上缺省采用 server模式。
2. -hotspot
含義與 client 相同,jdk1.4 以前使用的參數(shù),jdk1.4 開始不再使用,代之以 client。
3. -classpath,-cp
虛擬機在運行一個類時,需要將其裝入內(nèi)存,虛擬機搜索類的方式和順序如下:
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 搜索順序為當(dāng)前目錄、環(huán)境變量 CLASSPATH、-classpath。
4. -classpath
告知虛擬機搜索目錄名、jar 文檔名、zip 文檔名,之間用分號;分隔。
例如當(dāng)你自己開發(fā)了公共類并包裝成一個 common.jar 包,在使用 common.jar 中的類時,就
需要用-classpath common.jar 告訴虛擬機從 common.jar 中查找該類,否則虛擬機就會拋
出 java.lang.NoClassDefFoundError異常,表明未找到類定義。
在運行時可用 System.getProperty(“java.class.path”)得到虛擬機查找類的路徑。
使用-classpath 后虛擬機將不再使用 CLASSPATH 中的類搜索路徑,如果-classpath 和
CLASSPATH 都沒有設(shè)置,則虛擬機使用當(dāng)前路徑(.)作為類搜索路徑。
推薦使用-classpath 來定義虛擬機要搜索的類路徑,而不要使用環(huán)境變量 CLASSPATH 的搜
索路徑,以減少多個項目同時使用 CLASSPATH 時存在的潛在沖突。例如應(yīng)用 1 要使用
a1.0.jar 中的類 G,應(yīng)用 2 要使用 a2.0.jar 中的類 G,a2.0.jar 是 a1.0.jar 的升級包,當(dāng)
a1.0.jar,a2.0.jar 都在 CLASSPATH 中,虛擬機搜索到第一個包中的類 G 時就停止搜索,
如果應(yīng)用1應(yīng)用2的虛擬機都從CLASSPATH中搜索,就會有一個應(yīng)用得不到正確版本的類G。
5. -D
在虛擬機的系統(tǒng)屬性中設(shè)置屬性名/值對,運行在此虛擬機之上的應(yīng)用程序可用
當(dāng)虛擬機報告類找不到或類沖突時可用此參數(shù)來診斷來查看虛擬機從裝入類的情況。
7. -verbose:gc
在虛擬機發(fā)生內(nèi)存回收時在輸出設(shè)備顯示信息,格式如下:
[Full GC 268K->168K(1984K), 0.0187390 secs]
該參數(shù)用來監(jiān)視虛擬機內(nèi)存回收的情況。
8. -verbose:jni
在虛擬機調(diào)用 native 方法時輸出設(shè)備顯示信息,格式如下:
[Dynamic-linking native method HelloNative.sum ... JNI]
該參數(shù)用來監(jiān)視虛擬機調(diào)用本地方法的情況,在發(fā)生 jni錯誤時可為診斷提供便利。
9. -version
顯示可運行的虛擬機版本信息然后退出。一臺機器上裝有不同版本的 JDK 時
10. -showversion
顯示版本信息以及幫助信息。
11. -ea[:
12. -enableassertions[:
從 JDK1.4 開始,java 可支持?jǐn)嘌詸C制,用于診斷運行時問題。通常在測試階段使斷言有效,
在正式運行時不需要運行斷言。斷言后的表達(dá)式的值是一個邏輯值,為 true 時斷言不運行,
為 false 時斷言運行,拋出 java.lang.AssertionError 錯誤。
上述參數(shù)就用來設(shè)置虛擬機是否啟動斷言機制,缺省時虛擬機關(guān)閉斷言機制,用-ea 可打開
斷言機制,不加
某些包或類中的斷言,可將包名或類名加到-ea 之后。例如要啟動包 com.foo.util 中的斷
言,可用命令 –ea:com.foo.util 。
13. -da[:
14. -disableassertions[:
用來設(shè)置虛擬機關(guān)閉斷言處理,packagename和classname 的使用方法和-ea 相同。
15. -esa | -enablesystemassertions
設(shè)置虛擬機顯示系統(tǒng)類的斷言。
16. -dsa | -disablesystemassertions
設(shè)置虛擬機關(guān)閉系統(tǒng)類的斷言。
17. -agentlib:
該參數(shù)是 JDK5 新引入的,用于虛擬機裝載本地代理庫。
Libname 為本地代理庫文件名,虛擬機的搜索路徑為環(huán)境變量 PATH 中的路徑,options 為傳
給本地庫啟動時的參數(shù),多個參數(shù)之間用逗號分隔。在 Windows 平臺上虛擬機搜索本地庫名
為 libname.dll 的文件,在 Unix 上虛擬機搜索本地庫名為 libname.so 的文件,搜索路徑環(huán)
境變量在不同系統(tǒng)上有所不同,Linux、SunOS、IRIX上為LD_LIBRARY_PATH,AIX上為LIBPATH,
HP-UX 上為SHLIB_PATH。
例如可使用-agentlib:hprof 來獲取虛擬機的運行情況,包括 CPU、內(nèi)存、線程等的運行數(shù)
據(jù),并可輸出到指定文件中,可用-agentlib:hprof=help 來得到使用幫助列表。在 jre\bin
目錄下可發(fā)現(xiàn) hprof.dll 文件。
18. -agentpath:
設(shè)置虛擬機按全路徑裝載本地庫,不再搜索 PATH 中的路徑。其他功能和 agentlib 相同。
19. -javaagent:
虛擬機啟動時裝入java語言設(shè)備代理。Jarpath文件中的mainfest文件必須有Agent-Class
屬性。代理類要實現(xiàn) public static void premain(String agentArgs, Instrumentation
inst)方法。當(dāng)虛擬機初始化時,將按代理類的說明順序調(diào)用 premain方法。
參見:java.lang.instrument
-----------------------------------------------------------------------
在控制臺輸出信息中,有個-X(注意是大寫)的命令,這個正是查看JVM配置參數(shù)的命令。
其次,用java -X 命令查看JVM的配置說明:
運行后如下結(jié)果,這些就是配置JVM參數(shù)的秘密武器.
-----------------------------------------------------------------------
D:\j2sdk15\bin>java -X
-Xmixed mixed mode execution (default)
-Xint interpreted mode execution only
-Xbootclasspath:
set search path for bootstrap classes and resources
-Xbootclasspath/a:
append to end of bootstrap class path
-Xbootclasspath/p:
prepend in front of bootstrap class path
-Xnoclassgc disable class garbage collection
-Xincgc enable incremental garbage collection
-Xloggc:
-Xbatch disable background compilation
-Xms
-Xmx
-Xss
-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配置擴展參數(shù)說明:
-----------------------------------------------------------------------
1、-Xmixed mixed mode execution (default)
混合模式執(zhí)行
設(shè)置-client 模式虛擬機對使用頻率高的方式進(jìn)行 Just-In-Time 編譯和執(zhí)行,對其他方法
使用解釋方式執(zhí)行。該方式是虛擬機缺省模式。
2、-Xint interpreted mode execution only
解釋模式執(zhí)行
設(shè)置-client模式下運行的虛擬機以解釋方式執(zhí)行類的字節(jié)碼,不將字節(jié)碼編譯為本機碼。
3、-Xbootclasspath:
set search path for bootstrap classes and resources
設(shè)置zip/jar資源或者類(.class文件)存放目錄路徑
3、-Xbootclasspath/a:
append to end of bootstrap class path
追加zip/jar資源或者類(.class文件)存放目錄路徑
4、-Xbootclasspath/p:
prepend in front of bootstrap class path
預(yù)先加載zip/jar資源或者類(.class文件)存放目錄路徑
改變虛擬機裝載缺省系統(tǒng)運行包 rt.jar 而從-Xbootclasspath 中設(shè)定的搜索路徑中裝載系
統(tǒng)運行類。除非你自己能寫一個運行時,否則不會用到該參數(shù)。
/a:將在缺省搜索路徑后加上 path 中的搜索路徑。
/p:在缺省搜索路徑前先搜索 path 中的搜索路徑。
5、-Xnoclassgc disable class garbage collection
關(guān)閉類垃圾回收功能
關(guān)閉虛擬機對 class 的垃圾回收功能。
6、-Xincgc enable incremental garbage collection
開啟類的垃圾回收功能
啟動增量垃圾收集器,缺省是關(guān)閉的。增量垃圾收集器能減少偶然發(fā)生的長時間的垃圾回收
造成的暫停時間。但增量垃圾收集器和應(yīng)用程序并發(fā)執(zhí)行,因此會占用部分 CPU 在應(yīng)用程序
上的功能。
7、-Xloggc:
記錄垃圾回日志到一個文件。
將虛擬機每次垃圾回收的信息寫到日志文件中,文件名由 file 指定,文件格式是平文件,
內(nèi)容和-verbose:gc 輸出內(nèi)容相同。
8、-Xbatch disable background compilation
關(guān)閉后臺編譯
虛擬機的缺省運行方式是在后臺編譯類代碼,然后在前臺執(zhí)行代碼,使用-Xbatch參數(shù)將關(guān)
閉虛擬機后臺編譯,在前臺編譯完成后再執(zhí)行
9、-Xms
設(shè)置JVM初始化堆內(nèi)存大小
設(shè)置虛擬機可用內(nèi)存堆的初始大小,缺省單位為字節(jié),該大小為 1024 的整數(shù)倍并且要大于
1MB,可用 k(K)或m(M)為單位來設(shè)置較大的內(nèi)存數(shù)。初始堆大小為 2MB。
例如:-Xms6400K,-Xms256M
10、-Xmx
設(shè)置JVM最大的堆內(nèi)存大小
設(shè)置虛擬機內(nèi)存堆的最大可用大小,缺省單位為字節(jié)。該值必須為 1024 整數(shù)倍,并且要大
于 2MB。可用 k(K)或 m(M)為單位來設(shè)置較大的內(nèi)存數(shù)。缺省堆最大值為 64MB。
例如:-Xmx81920K,-Xmx80M
當(dāng)應(yīng)用程序申請了大內(nèi)存運行時虛擬機拋出 java.lang.OutOfMemoryError: Java heap
space 錯誤,就需要使用-Xmx 設(shè)媒洗蟮目捎媚詿娑選?BR>
11、-Xss
設(shè)置JVM棧內(nèi)存大小
設(shè)置線程棧的大小,缺省單位為字節(jié)。與-Xmx 類似,也可用 K 或 M 來設(shè)置較大的值。通常
操作系統(tǒng)分配給線程棧的缺省大小為 1MB。
另外也可在 java 中創(chuàng)建線程對象時設(shè)置棧的大小,構(gòu)造函數(shù)原型為 Thread(ThreadGroup
group, Runnable target, String name, long stackSize)。
12、-Xprof output cpu profiling data
輸入CPU概要表數(shù)據(jù)
輸出 CPU 運行時的診斷信息。
13、-Xfuture enable strictest checks, anticipating future default
執(zhí)行嚴(yán)格的代碼檢查,預(yù)測可能出現(xiàn)的情況
對類文件進(jìn)行嚴(yán)格格式檢查,以保證類代碼符合類代碼規(guī)范。為保持向后兼容,虛擬機缺省
不進(jìn)行嚴(yán)格的格式檢查。
14、-Xrs reduce use of OS signals by Java/VM (see documentation)
通過JVM還原操作系統(tǒng)信號
減少虛擬機中操作系統(tǒng)的信號(singals)的使用。該參數(shù)通常用在虛擬機以后臺服務(wù)方式
運行時使用(如 Servlet)。
15、-Xcheck:jni perform additional checks for JNI functions
調(diào)用 JNI 函數(shù)時進(jìn)行附加的檢查,特別地虛擬機將校驗傳遞給 JNI 函數(shù)參數(shù)的合法性,在本
地代碼中遇到非法數(shù)據(jù)時,虛擬機將報一個致命錯誤而終止。使用該參數(shù)后將造成性能下降。
16、-Xshare:off do not attempt to use shared class data
盡可能不去使用共享類的數(shù)據(jù)
17、-Xshare:auto use shared class data if possible (default)
盡可能的使用共享類的數(shù)據(jù)
18、-Xshare:on require using shared class data, otherwise fail.
盡可能的使用共享類的數(shù)據(jù),否則運行失敗
The -X options are non-standard and subject to change without notice.
-----------------------------------------------------------------------
怎么用這這些參數(shù)呢?其實所有的命令行都是這么一用,下面我就給出一個最簡單的HelloWorl的例子來演
示這個參數(shù)的用法,非常的簡單。
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!
呵呵,這下滿足了吧!
實踐:在大型系統(tǒng)或者應(yīng)用中配置JVM參數(shù)
比如你配置IDE工具的參數(shù),常見的有IDEA、Eclipse,這個是在一個配置文件中指定即可。
如果你要在J2EE環(huán)境中配置這些參數(shù),那么你需要在J2EE應(yīng)用服務(wù)器或者Servlet容器相關(guān)啟動參數(shù)設(shè)置處
指定,其啟動文件中來配置,Tomcat是在catalina.bat中配置,weblogic和websphere是在其他地方,具體
我就說了,相信玩過的這些大型服務(wù)器的人都知道,沒玩過的看看這篇文章,玩玩就知道了,呵呵。
另外常常有人問到j(luò)dk的一些相關(guān)命令用法,其實,當(dāng)你看到這里的時候,你應(yīng)該知道如何獲取這些命令的
用法了。如果你還不會,那么,建議你去學(xué)學(xué)DOS,我是沒轍了。如果你會這些,還是沒有看明白,那么你
趕緊學(xué)學(xué)英語吧,這樣你就能看懂了。
另外:我在最后給出常用的幾個Java命令行說明,以供參考:
(1)、javac
用法:javac <選項> <源文件>
其中,可能的選項包括:
-g 生成所有調(diào)試信息
-g:none 不生成任何調(diào)試信息
-g:{lines,vars,source} 只生成某些調(diào)試信息
-nowarn 不生成任何警告
-verbose 輸出有關(guān)編譯器正在執(zhí)行的操作的消息
-deprecation 輸出使用已過時的 API 的源位置
-classpath <路徑> 指定查找用戶類文件的位置
-cp <路徑> 指定查找用戶類文件的位置
-sourcepath <路徑> 指定查找輸入源文件的位置
-bootclasspath <路徑> 覆蓋引導(dǎo)類文件的位置
-extdirs <目錄> 覆蓋安裝的擴展目錄的位置
-endorseddirs <目錄> 覆蓋簽名的標(biāo)準(zhǔn)路徑的位置
-d <目錄> 指定存放生成的類文件的位置
-encoding <編碼> 指定源文件使用的字符編碼
-source <版本> 提供與指定版本的源兼容性
-target <版本> 生成特定 VM 版本的類文件
-version 版本信息
-help 輸出標(biāo)準(zhǔn)選項的提要
-X 輸出非標(biāo)準(zhǔn)選項的提要
-J<標(biāo)志> 直接將 <標(biāo)志> 傳遞給運行時系統(tǒng)
(2)、jar
用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...
選項:
-c 創(chuàng)建新的存檔
-t 列出存檔內(nèi)容的列表
-x 展開存檔中的命名的(或所有的〕文件
-u 更新已存在的存檔
-v 生成詳細(xì)輸出到標(biāo)準(zhǔn)輸出上
-f 指定存檔文件名
-m 包含來自標(biāo)明文件的標(biāo)明信息
-0 只存儲方式;未用ZIP壓縮格式
-M 不產(chǎn)生所有項的清單(manifest〕文件
-i 為指定的jar文件產(chǎn)生索引信息
-C 改變到指定的目錄,并且包含下列文件:
如果一個文件名是一個目錄,它將被遞歸處理。
清單(manifest〕文件名和存檔文件名都需要被指定,按'm' 和 'f'標(biāo)志指定的相同順序。
示例1:將兩個class文件存檔到一個名為 'classes.jar' 的存檔文件中:
jar cvf classes.jar Foo.class Bar.class
示例2:用一個存在的清單(manifest)文件 'mymanifest' 將 foo/ 目錄下的所有
文件存檔到一個名為 'classes.jar' 的存檔文件中:
jar cvfm classes.jar mymanifest -C foo/ .
(3)、javadoc
javadoc: 錯誤 - 未指定軟件包或類。
用法:javadoc [選項] [軟件包名稱] [源文件] [@file]
-overview <文件> 讀取 HTML 文件的概述文檔
-public 僅顯示公共類和成員
-protected 顯示受保護(hù)/公共類和成員(默認(rèn))
-package 顯示軟件包/受保護(hù)/公共類和成員
-private 顯示所有類和成員
-help 顯示命令行選項并退出
-doclet <類> 通過替代 doclet 生成輸出
-docletpath <路徑> 指定查找 doclet 類文件的位置
-sourcepath <路徑列表> 指定查找源文件的位置
-classpath <路徑列表> 指定查找用戶類文件的位置
-exclude <軟件包列表> 指定要排除的軟件包的列表
-subpackages <子軟件包列表> 指定要遞歸裝入的子軟件包
-breakiterator 使用 BreakIterator 計算第 1 句
-bootclasspath <路徑列表> 覆蓋引導(dǎo)類加載器所裝入的
類文件的位置
-source <版本> 提供與指定版本的源兼容性
-extdirs <目錄列表> 覆蓋安裝的擴展目錄的位置
-verbose 輸出有關(guān) Javadoc 正在執(zhí)行的操作的消息
-locale <名稱> 要使用的語言環(huán)境,例如 en_US 或 en_US_WIN
-encoding <名稱> 源文件編碼名稱
-quiet 不顯示狀態(tài)消息
-J<標(biāo)志> 直接將 <標(biāo)志> 傳遞給運行時系統(tǒng)
通過標(biāo)準(zhǔn) doclet 提供:
-d <目錄> 輸出文件的目標(biāo)目錄
-use 創(chuàng)建類和軟件包用法頁面
-version 包含 @version 段
-author 包含 @author 段
-docfilessubdirs 遞歸復(fù)制文檔文件子目錄
-splitindex 將索引分為每個字母對應(yīng)一個文件
-windowtitle <文本> 文檔的瀏覽器窗口標(biāo)題
-doctitle 包含概述頁面的標(biāo)題
-header 包含每個頁面的頁眉文本
-footer 包含每個頁面的頁腳文本
-bottom 包含每個頁面的底部文本
-link
-linkoffline
的文檔
-excludedocfilessubdir <名稱 1>:..排除帶有給定名稱的所有文檔文件子目錄。
-group <名稱>
-nocomment 抑止描述和標(biāo)記,只生成聲明。
-nodeprecated 不包含 @deprecated 信息
-noqualifier <名稱 1>:<名稱 2>:...從輸出中排除限定符的列表。
-nosince 不包含 @since 信息
-notimestamp 不包含隱藏時間戳
-nodeprecatedlist 不生成已過時的列表
-notree 不生成類分層結(jié)構(gòu)
-noindex 不生成索引
-nohelp 不生成幫助鏈接
-nonavbar 不生成導(dǎo)航欄
-serialwarn 生成有關(guān) @serial 標(biāo)記的警告
-tag <名稱>:<位置>:<標(biāo)題> 指定單個變量自定義標(biāo)記
-taglet 要注冊的 Taglet 的全限定名稱
-tagletpath Taglet 的路徑
-charset <字符集> 用于跨平臺查看生成的文檔的字符集。
-helpfile <文件> 包含幫助鏈接所鏈接到的文件
-linksource 以 HTML 格式生成源
-sourcetab <制表符長度> 指定源中每個制表符占據(jù)的空格數(shù)
-keywords 使軟件包、類和成員信息附帶 HTML 元標(biāo)記
-stylesheetfile <路徑> 用于更改生成文檔的樣式的文件
-docencoding <名稱> 輸出編碼名稱
(4)、rmid
rmid: 非法選項:-?
用法:rmid
其中,
-port
-log
-stop 停止當(dāng)前的 rmid 調(diào)用(對指定端口)
-C
-J
【Java命令參數(shù)說明】相關(guān)文章:
java jar 命令行參數(shù)06-04
java命令行參數(shù)解析201608-12
java調(diào)用cmd命令01-29
java開發(fā)必會的Linux命令10-07
CAD常用快捷鍵和命令說明07-06
dos命令之REN命令-文件改名命令07-04
dos命令之FC命令:文件比較命令08-07
dos命令之SCANDISK命令-檢測、修復(fù)磁盤命令09-01
電腦運行命令以及dos命令大全05-10