读书人

Java虚拟机(JVM)参数配备说明

发布时间: 2012-09-10 11:02:32 作者: rapoo

Java虚拟机(JVM)参数配置说明
在Java、J2EE大型应用中,JVM非标准参数的配置直接关系到整个系统的性能。JVM非标准参数指的是JVM底层的一些配置参数,这些参数在一般开发中默认即可,不需要任何配置。但是在生产环境中,为了提高性能,往往需要调整这些参数,以求系统达到最佳新能。另外这些参数的配置也是影响系统稳定性的一个重要因素,相信大多数Java开发人员都见过“OutOfMemory”类型的错误。呵呵,这其中很可能就是JVM参数配置不当或者就没有配置没意识到配置引起的。?为了说明这些参数,还需要说说JDK中的命令行工具一些知识做铺垫。?首先看如何获取这些命令配置信息说明:假设你是windows平台,你安装了J2SDK,那么现在你从cmd控制台窗口进入J2SDK安装目录下的bin目录,然后运行java命令,出现如下结果,这些就是包括java.exe工具的和JVM的所有命令都在里面。?-----------------------------------D:\j2sdk15\bin>javaUsage: 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 HelloWorldHello 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)、javadocjavadoc: 错误 - 未指定软件包或类。用法: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)、rmidrmid: 非法选项:-?用法:rmid <option>?其中,<option> 包括:? -port <option>??????? 指定供 rmid 使用的端口? -log <directory>??? 指定 rmid 将日志写入的目录? -stop?????????????? 停止当前的 rmid 调用(对指定端口)? -C<runtime 标记>??? 向每个子进程传递参数(激活组)? -J<runtime 标记>??? 向 java 解释程序传递参数

读书人网 >编程

热点推荐