Java虚拟机(JVM)参数简介
fmms
13年前
Java虚拟机(JVM)参数简介 <br /> <br /> 在Java、J2EE大型应用中,JVM非标准参数的配置直接关系到整个系统的性能。 <br /> JVM非标准参数指的是JVM底层的一些配置参数,这些参数在一般开发中默认即可,不需要任何配置。但是在生产环境中,为了提高性能,往往需要调整这些参数,以求系统达到最佳新能。 <br /> 另外这些参数的配置也是影响系统稳定性的一个重要因素,相信大多数Java开发人员都见过“OutOfMemory”类型的错误。呵呵,这其中很可能就是JVM参数配置不当或者就没有配置没意识到配置引起的。 <br /> <br /> 为了说明这些参数,还需要说说JDK中的命令行工具一些知识做铺垫。 <br /> <br /> 首先看如何获取这些命令配置信息说明: <br /> 假设你是windows平台,你安装了J2SDK,那么现在你从cmd控制台窗口进入J2SDK安装目录下的bin目录,然后运行java命令,出现如下结果,这些就是包括java.exe工具的和JVM的所有命令都在里面。 <br /> <br /> ----------------------------------------------------------------------- <pre class="brush:java; toolbar: true; auto-links: false;">C:\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</pre>----------------------------------------------------------------------- <br /> 在控制台输出信息中,有个-X(注意是大写)的命令,这个正是查看JVM配置参数的命令。 <br /> <br /> 其次,用java -X 命令查看JVM的配置说明: <br /> 运行后如下结果,这些就是配置JVM参数的秘密武器,这些信息都是英文的,为了方便阅读,我根据自己的理解翻译成中文了(不准确的地方还请各位博友斧正) <pre class="brush:java; toolbar: true; auto-links: false;">C:\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.</pre>----------------------------------------------------------------------- <br /> <br /> JVM配置参数中文说明: <br /> ----------------------------------------------------------------------- <br /> 1、-Xmixed mixed mode execution (default) <br /> 混合模式执行 <br /> <br /> 2、-Xint interpreted mode execution only <br /> 解释模式执行 <br /> <br /> 3、-Xbootclasspath:<directories and zip/jar files separated by ;> <br /> set search path for bootstrap classes and resources <br /> 设置zip/jar资源或者类(.class文件)存放目录路径 <br /> <br /> 3、-Xbootclasspath/a:<directories and zip/jar files separated by ;> <br /> append to end of bootstrap class path <br /> 追加zip/jar资源或者类(.class文件)存放目录路径 <br /> <br /> 4、-Xbootclasspath/p:<directories and zip/jar files separated by ;> <br /> prepend in front of bootstrap class path <br /> 预先加载zip/jar资源或者类(.class文件)存放目录路径 <br /> <br /> 5、-Xnoclassgc disable class garbage collection <br /> 关闭类垃圾回收功能 <br /> <br /> 6、-Xincgc enable incremental garbage collection <br /> 开启类的垃圾回收功能 <br /> <br /> 7、-Xloggc:<file> log GC status to a file with time stamps <br /> 记录垃圾回日志到一个文件。 <br /> <br /> 8、-Xbatch disable background compilation <br /> 关闭后台编译 <br /> <br /> 9、-Xms<size> set initial Java heap size <br /> 设置JVM初始化堆内存大小 <br /> <br /> 10、-Xmx<size> set maximum Java heap size <br /> 设置JVM最大的堆内存大小 <br /> <br /> 11、-Xss<size> set java thread stack size <br /> 设置JVM栈内存大小 <br /> <br /> 12、-Xprof output cpu profiling data <br /> 输入CPU概要表数据 <br /> <br /> 13、-Xfuture enable strictest checks, anticipating future default <br /> 执行严格的代码检查,预测可能出现的情况 <br /> <br /> 14、-Xrs reduce use of OS signals by Java/VM (see documentation) <br /> 通过JVM还原操作系统信号 <br /> <br /> 15、-Xcheck:jni perform additional checks for JNI functions <br /> 对JNI函数执行检查 <br /> <br /> 16、-Xshare:off do not attempt to use shared class data <br /> 尽可能不去使用共享类的数据 <br /> <br /> 17、-Xshare:auto use shared class data if possible (default) <br /> 尽可能的使用共享类的数据 <br /> <br /> 18、-Xshare:on require using shared class data, otherwise fail. <br /> 尽可能的使用共享类的数据,否则运行失败 <br /> <br /> The -X options are non-standard and subject to change without notice. <br /> ----------------------------------------------------------------------- <br /> <br /> 怎么用这这些参数呢?其实所有的命令行都是这么一用,下面我就给出一个最简单的HelloWorl的例子来演示这个参数的用法,非常的简单。 <br /> <br /> HelloWorld.java <br /> ----------------------------------------------- <br /> public class HelloWorld <br /> { <br /> public static void main(String[] args) <br /> { <br /> System.out.println("Hello World!"); <br /> } <br /> } <br /> <br /> 编译并运行: <br /> C:\j2sdk15\bin>javac HelloWorld.java <br /> <br /> C:\j2sdk15\bin>java -Xms256M -Xmx512M HelloWorld <br /> Hello World! <br /> <br /> 呵呵,这下满足了吧! <br /> <br /> 实践:在大型系统或者应用中配置JVM参数 <br /> 比如你配置IDE工具的参数,常见的有IDEA、Eclipse,这个是在一个配置文件中指定即可。 <br /> 如果你要在J2EE环境中配置这些参数,那么你需要在J2EE应用服务器或者Servlet容器相关启动参数设置处指定,其启动文件中来配置,Tomcat是在catalina.bat中配置,weblogic和websphere是在其他地方,具体我就说了,相信玩过的这些大型服务器的人都知道,没玩过的看看这篇文章,玩玩就知道了,呵呵。 <br /> <br /> 另外常常有人问到jdk的一些相关命令用法,其实,当你看到这里的时候,你应该知道如何获取这些命令的用法了。如果你还不会,那么,建议你去学学DOS,我是没辙了。如果你会这些,还是没有看明白,那么你赶紧学学英语吧,这样你就能看懂了。 <br /> <br /> 另外:我在最后给出常用的几个Java命令行说明,以供参考: <br /> <br /> (1)、javac <br /> 用法:javac <选项> <源文件> <br /> 其中,可能的选项包括: <br /> -g 生成所有调试信息 <br /> -g:none 不生成任何调试信息 <br /> -g:{lines,vars,source} 只生成某些调试信息 <br /> -nowarn 不生成任何警告 <br /> -verbose 输出有关编译器正在执行的操作的消息 <br /> -deprecation 输出使用已过时的 API 的源位置 <br /> -classpath <路径> 指定查找用户类文件的位置 <br /> -cp <路径> 指定查找用户类文件的位置 <br /> -sourcepath <路径> 指定查找输入源文件的位置 <br /> -bootclasspath <路径> 覆盖引导类文件的位置 <br /> -extdirs <目录> 覆盖安装的扩展目录的位置 <br /> -endorseddirs <目录> 覆盖签名的标准路径的位置 <br /> -d <目录> 指定存放生成的类文件的位置 <br /> -encoding <编码> 指定源文件使用的字符编码 <br /> -source <版本> 提供与指定版本的源兼容性 <br /> -target <版本> 生成特定 VM 版本的类文件 <br /> -version 版本信息 <br /> -help 输出标准选项的提要 <br /> -X 输出非标准选项的提要 <br /> -J<标志> 直接将 <标志> 传递给运行时系统 <br /> <br /> (2)、jar <br /> 用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 ... <br /> 选项: <br /> -c 创建新的存档 <br /> -t 列出存档内容的列表 <br /> -x 展开存档中的命名的(或所有的〕文件 <br /> -u 更新已存在的存档 <br /> -v 生成详细输出到标准输出上 <br /> -f 指定存档文件名 <br /> -m 包含来自标明文件的标明信息 <br /> -0 只存储方式;未用ZIP压缩格式 <br /> -M 不产生所有项的清单(manifest〕文件 <br /> -i 为指定的jar文件产生索引信息 <br /> -C 改变到指定的目录,并且包含下列文件: <br /> 如果一个文件名是一个目录,它将被递归处理。 <br /> 清单(manifest〕文件名和存档文件名都需要被指定,按'm' 和 'f'标志指定的相同顺序。 <br /> <br /> 示例1:将两个class文件存档到一个名为 'classes.jar' 的存档文件中: <br /> jar cvf classes.jar Foo.class Bar.class <br /> <br /> 其中 我经常使用jar -cvf 去打包一些jar 然后在放入lib里进行使用 比直接使用类看起来更干净 <br /> 示例2:用一个存在的清单(manifest)文件 'mymanifest' 将 foo/ 目录下的所有 <br /> 文件存档到一个名为 'classes.jar' 的存档文件中: <br /> jar cvfm classes.jar mymanifest -C foo/ . <br /> <br /> (3)、javadoc <br /> javadoc: 错误 - 未指定软件包或类。 <br /> 用法:javadoc [选项] [软件包名称] [源文件] [@file] <br /> -overview <文件> 读取 HTML 文件的概述文档 <br /> -public 仅显示公共类和成员 <br /> -protected 显示受保护/公共类和成员(默认) <br /> -package 显示软件包/受保护/公共类和成员 <br /> -private 显示所有类和成员 <br /> -help 显示命令行选项并退出 <br /> -doclet <类> 通过替代 doclet 生成输出 <br /> -docletpath <路径> 指定查找 doclet 类文件的位置 <br /> -sourcepath <路径列表> 指定查找源文件的位置 <br /> -classpath <路径列表> 指定查找用户类文件的位置 <br /> -exclude <软件包列表> 指定要排除的软件包的列表 <br /> -subpackages <子软件包列表> 指定要递归装入的子软件包 <br /> -breakiterator 使用 BreakIterator 计算第 1 句 <br /> -bootclasspath <路径列表> 覆盖引导类加载器所装入的 <br /> 类文件的位置 <br /> -source <版本> 提供与指定版本的源兼容性 <br /> -extdirs <目录列表> 覆盖安装的扩展目录的位置 <br /> -verbose 输出有关 Javadoc 正在执行的操作的消息 <br /> -locale <名称> 要使用的语言环境,例如 en_US 或 en_US_WIN <br /> -encoding <名称> 源文件编码名称 <br /> -quiet 不显示状态消息 <br /> -J<标志> 直接将 <标志> 传递给运行时系统 <br /> <br /> 通过标准 doclet 提供: <br /> -d <目录> 输出文件的目标目录 <br /> -use 创建类和软件包用法页面 <br /> -version 包含 @version 段 <br /> -author 包含 @author 段 <br /> -docfilessubdirs 递归复制文档文件子目录 <br /> -splitindex 将索引分为每个字母对应一个文件 <br /> -windowtitle <文本> 文档的浏览器窗口标题 <br /> -doctitle <html 代码> 包含概述页面的标题 <br /> -header <html 代码> 包含每个页面的页眉文本 <br /> -footer <html 代码> 包含每个页面的页脚文本 <br /> -bottom <html 代码> 包含每个页面的底部文本 <br /> -link <url> 创建指向位于 <url> 的 javadoc 输出的链接 <br /> -linkoffline <url> <url2> 利用位于 <url2> 的软件包列表链接至位于 <url> <br /> 的文档 <br /> -excludedocfilessubdir <名称 1>:..排除带有给定名称的所有文档文件子目录。 <br /> -group <名称> <p1>:<p2>.. 在概述页面中,将指定的软件包分组 <br /> -nocomment 抑止描述和标记,只生成声明。 <br /> -nodeprecated 不包含 @deprecated 信息 <br /> -noqualifier <名称 1>:<名称 2>:...从输出中排除限定符的列表。 <br /> -nosince 不包含 @since 信息 <br /> -notimestamp 不包含隐藏时间戳 <br /> -nodeprecatedlist 不生成已过时的列表 <br /> -notree 不生成类分层结构 <br /> -noindex 不生成索引 <br /> -nohelp 不生成帮助链接 <br /> -nonavbar 不生成导航栏 <br /> -serialwarn 生成有关 @serial 标记的警告 <br /> -tag <名称>:<位置>:<标题> 指定单个变量自定义标记 <br /> -taglet 要注册的 Taglet 的全限定名称 <br /> -tagletpath Taglet 的路径 <br /> -charset <字符集> 用于跨平台查看生成的文档的字符集。 <br /> -helpfile <文件> 包含帮助链接所链接到的文件 <br /> -linksource 以 HTML 格式生成源 <br /> -sourcetab <制表符长度> 指定源中每个制表符占据的空格数 <br /> -keywords 使软件包、类和成员信息附带 HTML 元标记 <br /> -stylesheetfile <路径> 用于更改生成文档的样式的文件 <br /> -docencoding <名称> 输出编码名称 <br /> <br /> (4)、rmid <br /> rmid: 非法选项:-? <br /> 用法:rmid <option> <br /> <br /> 其中,<option> 包括: <br /> -port <option> 指定供 rmid 使用的端口 <br /> -log <directory> 指定 rmid 将日志写入的目录 <br /> -stop 停止当前的 rmid 调用(对指定端口) <br /> -C<runtime 标记> 向每个子进程传递参数(激活组) <br /> -J<runtime 标记> 向 java 解释程序传递参数