Java虛擬機器(JVM)引數配置說明
 
在Java、J2EE大型應用中,JVM非標準引數的配置直接關係到整個系統的效能。
JVM非標準引數指的是JVM底層的一些配置引數,這些引數在一般開發中預設即可,不需要任何配置。但是在生產環境中,為了提高效能,往往需要調整這些引數,以求系統達到最佳新能。
另外這些引數的配置也是影響系統穩定性的一個重要因素,相信大多數Java開發人員都見過“OutOfMemory”型別的錯誤。呵呵,這其中很可能就是JVM引數配置不當或者就沒有配置沒意識到配置引起的。
 
為了說明這些引數,還需要說說JDK中的命令列工具一些知識做鋪墊。
 
首先看如何獲取這些命令配置資訊說明:
假設你是windows平臺,你安裝了J2SDK,那麼現在你從cmd控制檯視窗進入J2SDK安裝目錄下的bin目錄,然後執行java命令,出現如下結果,這些就是包括java.exe工具的和JVM的所有命令都在裡面。
 
———————————————————————–
D:j2sdk15in>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 <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A ; separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
    -D<name>=<value>
                  set a system property
    -verbose[:class|gc|jni]
                  enable verbose output
    -version      print product version and exit
    -version:<value>
                  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[:<packagename>…|:<classname>]
    -enableassertions[:<packagename>…|:<classname>]
                  enable assertions
    -da[:<packagename>…|:<classname>]
    -disableassertions[:<packagename>…|:<classname>]
                  disable assertions
    -esa | -enablesystemassertions
                  enable system assertions
    -dsa | -disablesystemassertions
                  disable system assertions
    -agentlib:<libname>[=<options>]
                  load native agent library <libname>, e.g. -agentlib:hprof
                    see also, -agentlib:jdwp=help and -agentlib:hprof=help
    -agentpath:<pathname>[=<options>]
                  load native agent library by full pathname
    -javaagent:<jarpath>[=<options>]
                  load Java programming language agent, see java.lang.instrument
———————————————————————–
在控制檯輸出資訊中,有個-X(注意是大寫)的命令,這個正是檢視JVM配置引數的命令。
 
其次,用java -X 命令檢視JVM的配置說明:
執行後如下結果,這些就是配置JVM引數的祕密武器,這些資訊都是英文的,為了方便閱讀,我根據自己的理解翻譯成中文了(不準確的地方還請各位博友斧正)
———————————————————————–
D:j2sdk15in>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配置引數中文說明:
———————————————————————–
1、-Xmixed           mixed mode execution (default)
 混合模式執行
 
2、-Xint             interpreted mode execution only
 解釋模式執行
 
3、-Xbootclasspath:<directories and zip/jar files separated by ;>
      set search path for bootstrap classes and resources
 設定zip/jar資源或者類(.class檔案)存放目錄路徑
 
3、-Xbootclasspath/a:<directories and zip/jar files separated by ;>
      append to end of bootstrap class path
 追加zip/jar資源或者類(.class檔案)存放目錄路徑
 
4、-Xbootclasspath/p:<directories and zip/jar files separated by ;>
      prepend in front of bootstrap class path
 預先載入zip/jar資源或者類(.class檔案)存放目錄路徑
 
5、-Xnoclassgc       disable class garbage collection
 關閉類垃圾回收功能
 
6、-Xincgc           enable incremental garbage collection
 開啟類的垃圾回收功能
 
7、-Xloggc:<file>    log GC status to a file with time stamps
 記錄垃圾回日誌到一個檔案。
 
8、-Xbatch           disable background compilation
 關閉後臺編譯
 
9、-Xms<size>        set initial Java heap size
 設定JVM初始化堆記憶體大小
 
10、-Xmx<size>        set maximum Java heap size
 設定JVM最大的堆記憶體大小
 
11、-Xss<size>        set java thread stack size
 設定JVM棧記憶體大小
 
12、-Xprof            output cpu profiling data
 輸入CPU概要表資料
 
13、-Xfuture          enable strictest checks, anticipating future default
 執行嚴格的程式碼檢查,預測可能出現的情況
 
14、-Xrs              reduce use of OS signals by Java/VM (see documentation)
 通過JVM還原作業系統訊號
 
15、-Xcheck:jni       perform additional checks for JNI functions
 對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的例子來演示這個引數的用法,非常的簡單。
 
HelloWorld.java
———————————————–
public class  HelloWorld
{
 public static void main(String[] args)
 {
  System.out.println(“Hello World!”);
 }
}
 
編譯並執行:
D:j2sdk15in>javac HelloWorld.java
 
D:j2sdk15in>java -Xms256M -Xmx512M HelloWorld
Hello World!
 
呵呵,這下滿足了吧!
 
實踐:在大型系統或者應用中配置JVM引數
比如你配置IDE工具的引數,常見的有IDEA、Eclipse,這個是在一個配置檔案中指定即可。
如果你要在J2EE環境中配置這些引數,那麼你需要在J2EE應用伺服器或者Servlet容器相關啟動引數設定處指定,其啟動檔案中來配置,Tomcat是在catalina.bat中配置,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檔案存檔到一個名為 `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                顯示受保護/公共類和成員(預設)
-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 <html 程式碼>             包含概述頁面的標題
-header <html 程式碼>               包含每個頁面的頁首文字
-footer <html 程式碼>               包含每個頁面的頁尾文字
-bottom <html 程式碼>               包含每個頁面的底部文字
-link <url>                       建立指向位於 <url> 的 javadoc 輸出的連結
-linkoffline <url> <url2>         利用位於 <url2> 的軟體包列表連結至位於 <url>
的文件
-excludedocfilessubdir <名稱 1>:..排除帶有給定名稱的所有文件檔案子目錄。
-group <名稱> <p1>:<p2>..         在概述頁面中,將指定的軟體包分組
-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 <option>
 
其中,<option> 包括:
  -port <option>        指定供 rmid 使用的埠
  -log <directory>    指定 rmid 將日誌寫入的目錄
  -stop               停止當前的 rmid 呼叫(對指定埠)
  -C<runtime 標記>    向每個子程式傳遞引數(啟用組)
  -J<runtime 標記>    向 java 解釋程式傳遞引數
 
 
還有很多,下班了,放假了,HOHO,五一來了之後再寫吧!
 
有關更多的java命令可以參考一下這個文章:[url]http://ruruhuang.javaeye.com/blog/47564[/url]