Java命令參數說明大全

爲了提高性能,往往需要調整java命令參數,以求系統達到最佳新能。另外這些參數的配置也是影響系統穩定性的一個重要因素,相信大多數Java開發人員都見過“OutOfMemory”類型的錯誤。這其中很可能就是JVM參數配置不當或者就沒有配置沒意識到配置引起的。那麼java命令參數要怎麼設置呢?下面跟yjbys小編一起來看看吧!

Java命令參數說明大全

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

  一、 查看參數列表:

虛擬機參數分爲基本和擴展兩類,在命令行中輸入 JAVA_HOMEbinjava 就可得到基本參數列表,在命令行輸入 JAVA_HOMEbinjava –X 就可得到擴展參數列表。

  二、 基本參數說明:

-----------------------------------------------------------------------

D:j2sdk15bin>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 , e.g. -agentlib:hprof

see also, -agentlib:jdwp=help and -agentlib:hprof=help

-agentpath:[=]

load native agent library by full pathname

-javaagent:[=]

load Java programming language agent, see rument

-----------------------------------------------------------------------

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 文件,虛擬機首先搜索這些包文件,用

roperty("")可得到虛擬機搜索的包名。

Extension 是位於 jrelibext 目錄下的 jar 文件,虛擬機在搜索完 Bootstrap 後就搜索該

目錄下的 jar 文件。用 System. getProperty("”)可得到虛擬機使用

Extension 搜索路徑。

User classes 搜索順序爲當前目錄、環境變量 CLASSPATH、-classpath。

4. -classpath

告知虛擬機搜索目錄名、jar 文檔名、zip 文檔名,之間用分號;分隔。

例如當你自己開發了公共類幷包裝成一個 包,在使用 中的類時,就

需要用-classpath 告訴虛擬機從 中查找該類,否則虛擬機就會拋

出 assDefFoundError異常,表明未找到類定義。

在運行時可用 roperty(“”)得到虛擬機查找類的路徑。

使用-classpath 後虛擬機將不再使用 CLASSPATH 中的類搜索路徑,如果-classpath 和

CLASSPATH 都沒有設置,則虛擬機使用當前路徑(.)作爲類搜索路徑。

推薦使用-classpath 來定義虛擬機要搜索的類路徑,而不要使用環境變量 CLASSPATH 的搜

索路徑,以減少多個項目同時使用 CLASSPATH 時存在的潛在衝突。例如應用 1 要使用

中的類 G,應用 2 要使用 中的類 G, 是 的升級包,當

, 都在 CLASSPATH 中,虛擬機搜索到第一個包中的類 G 時就停止搜索,

如果應用1應用2的虛擬機都從CLASSPATH中搜索,就會有一個應用得不到正確版本的類G。

5. -D=value

在虛擬機的系統屬性中設置屬性名/值對,運行在此虛擬機之上的應用程序可用

當虛擬機報告類找不到或類衝突時可用此參數來診斷來查看虛擬機從裝入類的情況。

7. -verbose:gc

在虛擬機發生內存回收時在輸出設備顯示信息,格式如下:

[Full GC 268K->168K(1984K), 0.0187390 secs]

該參數用來監視虛擬機內存回收的情況。

8. -verbose:jni

在虛擬機調用 native 方法時輸出設備顯示信息,格式如下:

[Dynamic-linking native method ... JNI]

該參數用來監視虛擬機調用本地方法的情況,在發生 jni錯誤時可爲診斷提供便利。

9. -version

顯示可運行的虛擬機版本信息然後退出。一臺機器上裝有不同版本的 JDK 時

10. -showversion

顯示版本信息以及幫助信息。

11. -ea[:...|:]

12. -enableassertions[:...|:]

從 JDK1.4 開始,java 可支持斷言機制,用於診斷運行時問題。通常在測試階段使斷言有效,

在正式運行時不需要運行斷言。斷言後的表達式的值是一個邏輯值,爲 true 時斷言不運行,

爲 false 時斷言運行,拋出 rtionError 錯誤。

上述參數就用來設置虛擬機是否啓動斷言機制,缺省時虛擬機關閉斷言機制,用-ea 可打開

斷言機制,不加和 classname 時運行所有包和類中的斷言,如果希望只運行

某些包或類中的斷言,可將包名或類名加到-ea 之後。例如要啓動包 中的斷

言,可用命令 –ea: 。

13. -da[:...|:]

14. -disableassertions[:...|:]

用來設置虛擬機關閉斷言處理,packagename和classname 的使用方法和-ea 相同。

15. -esa | -enablesystemassertions

設置虛擬機顯示系統類的斷言。

16. -dsa | -disablesystemassertions

設置虛擬機關閉系統類的斷言。

17. -agentlib:[=]

該參數是 JDK5 新引入的,用於虛擬機裝載本地代理庫。

Libname 爲本地代理庫文件名,虛擬機的搜索路徑爲環境變量 PATH 中的路徑,options 爲傳

給本地庫啓動時的.參數,多個參數之間用逗號分隔。在 Windows 平臺上虛擬機搜索本地庫名

爲 的文件,在 Unix 上虛擬機搜索本地庫名爲 的文件,搜索路徑環

境變量在不同系統上有所不同,Linux、SunOS、IRIX上爲LD_LIBRARY_PATH,AIX上爲LIBPATH,

HP-UX 上爲SHLIB_PATH。

例如可使用-agentlib:hprof 來獲取虛擬機的運行情況,包括 CPU、內存、線程等的運行數

據,並可輸出到指定文件中,可用-agentlib:hprof=help 來得到使用幫助列表。在 jrebin

目錄下可發現 文件。

18. -agentpath:[=]

設置虛擬機按全路徑裝載本地庫,不再搜索 PATH 中的路徑。其他功能和 agentlib 相同。

19. -javaagent:[=]

虛擬機啓動時裝入java語言設備代理。Jarpath文件中的mainfest文件必須有Agent-Class

屬性。代理類要實現 public static void premain(String agentArgs, Instrumentation

inst)方法。當虛擬機初始化時,將按代理類的說明順序調用 premain方法。

參見:rument

-----------------------------------------------------------------------

在控制檯輸出信息中,有個-X(注意是大寫)的命令,這個正是查看JVM配置參數的命令。

其次,用java -X 命令查看JVM的配置說明:

運行後如下結果,這些就是配置JVM參數的祕密武器.

-----------------------------------------------------------------------

D:j2sdk15bin>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: log GC status to a file with time stamps

-Xbatch disable background compilation

-Xms set initial Java heap size

-Xmx set maximum Java heap size

-Xss 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配置擴展參數說明:

-----------------------------------------------------------------------

1、-Xmixed mixed mode execution (default)

混合模式執行

設置-client 模式虛擬機對使用頻率高的方式進行 Just-In-Time 編譯和執行,對其他方法

使用解釋方式執行。該方式是虛擬機缺省模式。

2、-Xint interpreted mode execution only

解釋模式執行

設置-client模式下運行的虛擬機以解釋方式執行類的字節碼,不將字節碼編譯爲本機碼。

3、-Xbootclasspath:

set search path for bootstrap classes and resources

設置zip/jar資源或者類(s文件)存放目錄路徑

3、-Xbootclasspath/a:

append to end of bootstrap class path

追加zip/jar資源或者類(s文件)存放目錄路徑

4、-Xbootclasspath/p:

prepend in front of bootstrap class path

預先加載zip/jar資源或者類(s文件)存放目錄路徑

改變虛擬機裝載缺省系統運行包 而從-Xbootclasspath 中設定的搜索路徑中裝載系

統運行類。除非你自己能寫一個運行時,否則不會用到該參數。

/a:將在缺省搜索路徑後加上 path 中的搜索路徑。

/p:在缺省搜索路徑前先搜索 path 中的搜索路徑。

5、-Xnoclassgc disable class garbage collection

關閉類垃圾回收功能

關閉虛擬機對 class 的垃圾回收功能。

6、-Xincgc enable incremental garbage collection

開啓類的垃圾回收功能

啓動增量垃圾收集器,缺省是關閉的。增量垃圾收集器能減少偶然發生的長時間的垃圾回收

造成的暫停時間。但增量垃圾收集器和應用程序併發執行,因此會佔用部分 CPU 在應用程序

上的功能。

7、-Xloggc: log GC status to a file with time stamps

記錄垃圾回日誌到一個文件。

將虛擬機每次垃圾回收的信息寫到日誌文件中,文件名由 file 指定,文件格式是平文件,

內容和-verbose:gc 輸出內容相同。

8、-Xbatch disable background compilation

關閉後臺編譯

虛擬機的缺省運行方式是在後臺編譯類代碼,然後在前臺執行代碼,使用-Xbatch參數將關

閉虛擬機後臺編譯,在前臺編譯完成後再執行

9、-Xms set initial Java heap size

設置JVM初始化堆內存大小

設置虛擬機可用內存堆的初始大小,缺省單位爲字節,該大小爲 1024 的整數倍並且要大於

1MB,可用 k(K)或m(M)爲單位來設置較大的內存數。初始堆大小爲 2MB。

例如:-Xms6400K,-Xms256M

10、-Xmx set maximum Java heap size

設置JVM最大的堆內存大小

設置虛擬機內存堆的最大可用大小,缺省單位爲字節。該值必須爲 1024 整數倍,並且要大

於 2MB。可用 k(K)或 m(M)爲單位來設置較大的內存數。缺省堆最大值爲 64MB。

例如:-Xmx81920K,-Xmx80M

當應用程序申請了大內存運行時虛擬機拋出 fMemoryError: Java heap

space 錯誤,就需要使用-Xmx 設媒洗蟮目捎媚詿娑選?BR>

11、-Xss set java thread stack size

設置JVM棧內存大小

設置線程棧的大小,缺省單位爲字節。與-Xmx 類似,也可用 K 或 M 來設置較大的值。通常

操作系統分配給線程棧的缺省大小爲 1MB。

另外也可在 java 中創建線程對象時設置棧的大小,構造函數原型爲 Thread(ThreadGroup

group, Runnable target, String name, long stackSize)。

12、-Xprof output cpu profiling data

輸入CPU概要表數據

輸出 CPU 運行時的診斷信息。

13、-Xfuture enable strictest checks, anticipating future default

執行嚴格的代碼檢查,預測可能出現的情況

對類文件進行嚴格格式檢查,以保證類代碼符合類代碼規範。爲保持向後兼容,虛擬機缺省

不進行嚴格的格式檢查。

14、-Xrs reduce use of OS signals by Java/VM (see documentation)

通過JVM還原操作系統信號

減少虛擬機中操作系統的信號(singals)的使用。該參數通常用在虛擬機以後臺服務方式

運行時使用(如 Servlet)。

15、-Xcheck:jni perform additional checks for JNI functions

調用 JNI 函數時進行附加的檢查,特別地虛擬機將校驗傳遞給 JNI 函數參數的合法性,在本

地代碼中遇到非法數據時,虛擬機將報一個致命錯誤而終止。使用該參數後將造成性能下降。

16、-Xshare:off do not attempt to use shared class data

儘可能不去使用共享類的數據

17、-Xshare:auto use shared class data if possible (default)

儘可能的使用共享類的數據

18、-Xshare:on require using shared class data, otherwise fail.

儘可能的使用共享類的數據,否則運行失敗

The -X options are non-standard and subject to change without notice.

-----------------------------------------------------------------------

怎麼用這這些參數呢?其實所有的命令行都是這麼一用,下面我就給出一個最簡單的HelloWorl的例子來演

示這個參數的用法,非常的簡單。

-----------------------------------------------

public class HelloWorld

{

public static void main(String[] args)

{

tln("Hello World!");

}

}

編譯並運行:

D:j2sdk15bin>javac

D:j2sdk15bin>java -Xms256M -Xmx512M HelloWorld

Hello World!

呵呵,這下滿足了吧!

實踐:在大型系統或者應用中配置JVM參數

比如你配置IDE工具的參數,常見的有IDEA、Eclipse,這個是在一個配置文件中指定即可。

如果你要在J2EE環境中配置這些參數,那麼你需要在J2EE應用服務器或者Servlet容器相關啓動參數設置處

指定,其啓動文件中來配置,Tomcat是在中配置,weblogic和websphere是在其他地方,具體

我就說了,相信玩過的這些大型服務器的人都知道,沒玩過的看看這篇文章,玩玩就知道了,呵呵。

另外常常有人問到jdk的一些相關命令用法,其實,當你看到這裏的時候,你應該知道如何獲取這些命令的

用法了。如果你還不會,那麼,建議你去學學DOS,我是沒轍了。如果你會這些,還是沒有看明白,那麼你

趕緊學學英語吧,這樣你就能看懂了。

另外:我在最後給出常用的幾個Java命令行說明,以供參考:

(1)、javac

用法:javac <選項> <源文件>

其中,可能的選項包括:

-g 生成所有調試信息

-g:none 不生成任何調試信息

-g:{lines,vars,source} 只生成某些調試信息

-nowarn 不生成任何警告

-verbose 輸出有關編譯器正在執行的操作的消息

-deprecation 輸出使用已過時的 API 的源位置

-classpath <路徑> 指定查找用戶類文件的位置

-cp <路徑> 指定查找用戶類文件的位置

-sourcepath <路徑> 指定查找輸入源文件的位置

-bootclasspath <路徑> 覆蓋引導類文件的位置

-extdirs <目錄> 覆蓋安裝的擴展目錄的位置

-endorseddirs <目錄> 覆蓋簽名的標準路徑的位置

-d <目錄> 指定存放生成的類文件的位置

-encoding <編碼> 指定源文件使用的字符編碼

-source <版本> 提供與指定版本的源兼容性

-target <版本> 生成特定 VM 版本的類文件

-version 版本信息

-help 輸出標準選項的提要

-X 輸出非標準選項的提要

-J<標誌> 直接將 <標誌> 傳遞給運行時系統

(2)、jar

用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...

選項:

-c 創建新的存檔

-t 列出存檔內容的列表

-x 展開存檔中的命名的(或所有的〕文件

-u 更新已存在的存檔

-v 生成詳細輸出到標準輸出上

-f 指定存檔文件名

-m 包含來自標明文件的標明信息

-0 只存儲方式;未用ZIP壓縮格式

-M 不產生所有項的清單(manifest〕文件

-i 爲指定的jar文件產生索引信息

-C 改變到指定的目錄,並且包含下列文件:

如果一個文件名是一個目錄,它將被遞歸處理。

清單(manifest〕文件名和存檔文件名都需要被指定,按'm' 和 'f'標誌指定的相同順序。

示例1:將兩個class文件存檔到一個名爲 '' 的存檔文件中:

jar cvf s s

示例2:用一個存在的清單(manifest)文件 'mymanifest' 將 foo/ 目錄下的所有

文件存檔到一個名爲 '' 的存檔文件中:

jar cvfm mymanifest -C foo/ .

(3)、javadoc

javadoc: 錯誤 - 未指定軟件包或類。

用法:javadoc [選項] [軟件包名稱] [源文件] [@file]

-overview <文件> 讀取 HTML 文件的概述文檔

-public 僅顯示公共類和成員

-protected 顯示受保護/公共類和成員(默認)

-package 顯示軟件包/受保護/公共類和成員

-private 顯示所有類和成員

-help 顯示命令行選項並退出

-doclet <類> 通過替代 doclet 生成輸出

-docletpath <路徑> 指定查找 doclet 類文件的位置

-sourcepath <路徑列表> 指定查找源文件的位置

-classpath <路徑列表> 指定查找用戶類文件的位置

-exclude <軟件包列表> 指定要排除的軟件包的列表

-subpackages <子軟件包列表> 指定要遞歸裝入的子軟件包

-breakiterator 使用 BreakIterator 計算第 1 句

-bootclasspath <路徑列表> 覆蓋引導類加載器所裝入的

類文件的位置

-source <版本> 提供與指定版本的源兼容性

-extdirs <目錄列表> 覆蓋安裝的擴展目錄的位置

-verbose 輸出有關 Javadoc 正在執行的操作的消息

-locale <名稱> 要使用的語言環境,例如 en_US 或 en_US_WIN

-encoding <名稱> 源文件編碼名稱

-quiet 不顯示狀態消息

-J<標誌> 直接將 <標誌> 傳遞給運行時系統

通過標準 doclet 提供:

-d <目錄> 輸出文件的目標目錄

-use 創建類和軟件包用法頁面

-version 包含 @version 段

-author 包含 @author 段

-docfilessubdirs 遞歸複製文檔文件子目錄

-splitindex 將索引分爲每個字母對應一個文件

-windowtitle <文本> 文檔的瀏覽器窗口標題

-doctitle 包含概述頁面的標題

-header 包含每個頁面的頁眉文本

-footer 包含每個頁面的頁腳文本

-bottom 包含每個頁面的底部文本

-link 創建指向位於 的 javadoc 輸出的鏈接

-linkoffline 利用位於 的軟件包列表鏈接至位於

的文檔

-excludedocfilessubdir <名稱 1>:..排除帶有給定名稱的所有文檔文件子目錄。

-group <名稱> :.. 在概述頁面中,將指定的軟件包分組

-nocomment 抑止描述和標記,只生成聲明。

-nodeprecated 不包含 @deprecated 信息

-noqualifier <名稱 1>:<名稱 2>:...從輸出中排除限定符的列表。

-nosince 不包含 @since 信息

-notimestamp 不包含隱藏時間戳

-nodeprecatedlist 不生成已過時的列表

-notree 不生成類分層結構

-noindex 不生成索引

-nohelp 不生成幫助鏈接

-nonavbar 不生成導航欄

-serialwarn 生成有關 @serial 標記的警告

-tag <名稱>:<位置>:<標題> 指定單個變量自定義標記

-taglet 要註冊的 Taglet 的全限定名稱

-tagletpath Taglet 的路徑

-charset <字符集> 用於跨平臺查看生成的文檔的字符集。

-helpfile <文件> 包含幫助鏈接所鏈接到的文件

-linksource 以 HTML 格式生成源

-sourcetab <製表符長度> 指定源中每個製表符佔據的空格數

-keywords 使軟件包、類和成員信息附帶 HTML 元標記

-stylesheetfile <路徑> 用於更改生成文檔的樣式的文件

-docencoding <名稱> 輸出編碼名稱

(4)、rmid

rmid: 非法選項:-?

用法:rmid

其中,

-port

-log 指定 rmid 將日誌寫入的目錄

-stop 停止當前的 rmid 調用(對指定端口)

-C 向每個子進程傳遞參數(激活組)

-J 向 java 解釋程序傳遞參數