标签:
 
 Java虚拟机(JVM)参数配置说明 
 
 
   
 
 
 在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                              创建类和软件包用法页面 
 
 
 
 
 -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>:...从输出中排除限定符的列表。 
 
 
 
 -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,五一来了之后再写吧! 
 
 
   
 
JVM参数配置说明
标签:
原文地址:http://my.oschina.net/liting/blog/517375