Java虛擬機(JVM)參數配置說明

1. Java VM
    運行於linux平臺上的JVM會讀取/etc/sysconfig/i18n中的參數來決定輸出流的編碼方式,如果在安裝linux系統過程中沒有選擇中文,JVM就不能數據中文編碼的文字。打開/etc/sysconfig/i18n,注意這兩行:
LANGUAGE="en_US.ISO8859" --
該行指明瞭語言的編碼方式

SUPPORTED="en_US.UTF-8:zh_CN.UTF-8:zh_CN.GB2312:zh.: " --
該行指明瞭支持的編碼方式

   
如果i18n文件是這樣的那麼JVM會按照其中指明的LANGUAGE參數來決定字符流的編碼方式,在這裏就會按照ISO8859格式來編碼輸出,這時如果有中文需要顯示就會輸出亂碼。只需將i18N文件的LANGUAGE參數改爲以下的格式即可顯示中文

LANGUAGE=" zh_CN.GB2312"
LANGUAGE=" zh_CN.GBK" --GB2312GBK的子集

2. Resource Bundle
經過以上步驟EOS Server應可以正確顯示中文,但EOS調試服務器和EOS

Mgr Server使用了Resource Bundle文件來顯示字符,這時需要指定一個參數讓Resource Bundle能夠選擇正確的編碼方式。打開啓動EOS Server的腳本文件例如: startWebLogic.shstartTomcat.sh,在啓動的那一行將EOS_I18N2GB參數設置爲true
   
JavaJ2EE大型應用中,JVM非標準參數的配置直接關係到整個系統的性能。

    JVM
非標準參數指的是JVM底層的一些配置參數,這些參數在一般開發中默認即可,不需要任何配置。但是在生產環境中,爲了提高性能,往往需要調整這些參數,以求系統達到最佳新能。

   
另外這些參數的配置也是影響系統穩定性的一個重要因素,相信大多數Java開發人員都見過“OutOfMemory”類型的錯誤。呵呵,這其中很可能就是JVM參數配置不當或者就沒有配置沒意識到配置引起的。爲了說明這些參數,還需要說說JDK中的命令行工具一些知識做鋪墊。

首先看如何獲取這些命令配置信息說明:

   
假設你是windows平臺,你安裝了J2SDK,那麼現在你從cmd控制檯窗口進入J2SDK安裝目錄下的bin目錄,然後運行java命令,出現如下結果,這些就是包括java.exe工具的和JVM的所有命令都在裏面。

---------------------------------------------------------------------
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 ,

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 java.lang.instrument
---------------------------------------------------------------------
在控制檯輸出信息中,有個-X(注意是大寫)的命令,這個正是查看JVM配置參數的命令。


其次,用java -X 命令查看JVM的配置說明:
運行後如下結果,這些就是配置JVM參數的祕密武器,這些信息都是英文的,爲了方便閱讀,我根據自己的理解翻譯成中文了(不準確的地方還請各位博友斧正)

---------------------------------------------------------------------
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:    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)
混合模式執行

2
-Xint             interpreted mode execution only
解釋模式執行

3
-Xbootclasspath:
      set search path for bootstrap classes and resources
設置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
預先加載zip/jar資源或者類(.class文件)存放目錄路徑

5
-Xnoclassgc       disable class garbage collection
關閉類垃圾回收功能

6
-Xincgc           enable incremental garbage collection
開啓類的垃圾回收功能

7
-Xloggc:    log GC status to a file with time stamps
記錄垃圾回日誌到一個文件。

8
-Xbatch           disable background compilation
關閉後臺編譯

9
-Xms        set initial Java heap size
設置JVM初始化堆內存大小

10
-Xmx        set maximum Java heap size
設置JVM最大的堆內存大小

11
-Xss        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:\j2sdk15\bin>javac HelloWorld.java
D:\j2sdk15\bin>java -Xms256M -Xmx512M HelloWorld
Hello World!
呵呵,這下滿足了吧!


實踐:在大型系統或者應用中配置JVM參數
比如你配置IDE工具的參數,常見的有IDEAEclipse,這個是在一個配置文件中指定即可。

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

Tomcat
是在catalina.bat中配置,weblogicwebsphere是在其他地方,具體我就說了,相信玩過的這些大型服務器的人都知道,沒玩過的看看這篇文章,玩玩就知道了,呵呵。

   
另外常常有人問到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:用一個下的所有
          
文件存檔到一個名爲 '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             
包含概述頁面的標題

-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        
指定供 rmid 使用的端口

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

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

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

發佈了76 篇原創文章 · 獲贊 0 · 訪問量 4937
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章