JVM参数配置解析

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 optionsinclude:

   -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 helpon 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 modeexecution (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 garbagecollection

   -Xincgc           enableincremental garbage collection

   -Xloggc:<file>    log GC status to a file with time stamps

   -Xbatch           disablebackground compilation

   -Xms<size>        set initial Javaheap size

   -Xmx<size>        set maximum Javaheap size

   -Xss<size>        set java threadstack size

   -Xprof            outputcpu profiling data

   -Xfuture          enable strictestchecks, anticipating future default

   -Xrs             reduce use of OS signals by Java/VM (see documentation)

   -Xcheck:jni       perform additional checks forJNI functions

   -Xshare:off       do not attempt to use sharedclass data

   -Xshare:auto      use shared class data if possible(default)

   -Xshare:on        require using shared classdata, otherwise fail.

 

The -X options arenon-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/jarfiles separated by ;>

     set search path for bootstrap classes and resources

 设置zip/jar资源或者类(.class文件)存放目录路径

 

3-Xbootclasspath/a:<directories andzip/jar files separated by ;>

     append to end of bootstrap class path

 追加zip/jar资源或者类(.class文件)存放目录路径

 

4-Xbootclasspath/p:<directories andzip/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>    logGC 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 -Xoptions are non-standard and subject to change without notice.

-----------------------------------------------------------------------

 

怎么用这这些参数呢?其实所有的命令行都是这么一用,下面我就给出一个最简单的HelloWorl的例子来演示这个参数的用法,非常的简单。

 

HelloWorld.java

-----------------------------------------------

public class HelloWorld

{

 public staticvoid main(String[] args)

 {

  System.out.println("HelloWorld!");

 }

}

 

编译并运行:

D:\j2sdk15\bin>javacHelloWorld.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 解释程序传递参数

 

参考资料:

1.      JVM的内存机制介绍

2.      JVM内存模型以及垃圾收集策略解析

3.      Java虚拟机简介

4.      Java虚拟机(JVM)参数配 置说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值