隨筆-72  評論-20  文章-0  trackbacks-1
          在Java、J2EE大型應用中,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 <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:\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配置參數中文說明:
          -----------------------------------------------------------------------
          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:\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,我是沒轍了。如果你會這些,還是沒有看明白,那么你趕緊學學英語吧,這樣你就能看懂了。
          另外:我在最后給出常用的幾個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 解釋程序傳遞參數
          有關更多的java命令可以參考一下這個文章:http://ruruhuang.javaeye.com/blog/47564
          posted on 2007-07-03 15:30 前方的路 閱讀(499) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 正蓝旗| 临颍县| 吉水县| 五原县| 郧西县| 彩票| 来安县| 汉源县| 盐亭县| 从江县| 富民县| 台前县| 延吉市| 丰镇市| 普定县| 宜丰县| 于田县| 罗平县| 平遥县| 亳州市| 东乡族自治县| 桐庐县| 马龙县| 忻州市| 莱西市| 渭南市| 海兴县| 泰和县| 东至县| 孟津县| 巴中市| 常宁市| 白朗县| 江北区| 玛沁县| 廉江市| 隆昌县| 河南省| 灵川县| 偏关县| 轮台县|