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

时间:2022-12-27 13:43:07

 1. Java VM 

    运行于linux平台上的JVM会读取/etc/sysconfig/i18n中的参数来决定输出流的编码方式,如果在安装linux系统过程中没有选择中文,JVM就不能数据中文编码的文字。打开/etc/sysconfig/i18n,注意这两行: 
LANGUAGE="en_US.ISO8859" --
该行指明了语言的编码方式
 
SUPPORTED="en_US.UTF-8:zh_CN.UTF-8:zh_CN.GB2312:zh.: " --
该行指明了支持的编码方式
 
    
如果i18n文件是这样的那么JVM会按照其中指明的LANGUAGE参数来决定字符流的编码方式,在这里就会按照ISO8859格式来编码输出,这时如果有中文需要显示就会输出乱码。只需将i18N文件的LANGUAGE参数改为以下的格式即可显示中文
 
LANGUAGE=" zh_CN.GB2312" 
 LANGUAGE=" zh_CN.GBK" --GB2312GBK的子集

2. Resource Bundle 
经过以上步骤EOS Server应可以正确显示中文,但EOS调试服务器和EOS

Mgr Server使用了Resource Bundle文件来显示字符,这时需要指定一个参数让Resource Bundle能够选择正确的编码方式。打开启动EOS Server的脚本文件例如: startWebLogic.shstartTomcat.sh,在启动的那一行将EOS_I18N2GB参数设置为true 
    
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 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 
    -classpath 
                  A ; separated list of directories, JAR archives, 
                  and ZIP archives to search for class files. 
    -D= 
                  set a system property 
    -verbose[:class|gc|jni] 
                  enable verbose output 
    -version      print product version and exit 
    -version: 
                  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[:...|:] 
    -enableassertions[:...|:]   enable assertions 
    -da[:...|:] 
    -disableassertions[:...|:]  disable assertions 
    -esa | -enablesystemassertions enable system assertions 
    -dsa | -disablesystemassertions disable system assertions 
    -agentlib:[=] 
                  load native agent library ,

e.g. -agentlib:hprof see also,

-agentlib:jdwp=help and -agentlib:hprof=help 
-agentpath:[=] load native agent library by full pathname 
-javaagent:[=] 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: set search path for bootstrap classes and resources 
    -Xbootclasspath/a: append to end of bootstrap class path 
    -Xbootclasspath/p: prepend in front of bootstrap class path 
    -Xnoclassgc       disable class garbage collection 
    -Xincgc     enable incremental garbage collection 
    -Xloggc:    log GC status to a file with time stamps 
    -Xbatch     disable background compilation 
    -Xms        set initial Java heap size 
    -Xmx        set maximum Java heap size 
    -Xss        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: 
      set search path for bootstrap classes and resources 
设置zip/jar资源或者类(.class文件)存放目录路径
 
3
-Xbootclasspath/a: 
      append to end of bootstrap class path 
追加zip/jar资源或者类(.class文件)存放目录路径
 
4
-Xbootclasspath/p: 
      prepend in front of bootstrap class path 
预先加载zip/jar资源或者类(.class文件)存放目录路径
 
5
-Xnoclassgc       disable class garbage collection 
关闭类垃圾回收功能
 
6
-Xincgc           enable incremental garbage collection 
开启类的垃圾回收功能
 
7
-Xloggc:    log GC status to a file with time stamps 
记录垃圾回日志到一个文件。
 
8
-Xbatch           disable background compilation 
关闭后台编译
 
9
-Xms        set initial Java heap size 
设置JVM初始化堆内存大小
 
10
-Xmx        set maximum Java heap size 
设置JVM最大的堆内存大小
 
11
-Xss        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工具的参数,常见的有IDEAEclipse,这个是在一个配置文件中指定即可。
 
如果你要在J2EE环境中配置这些参数,那么你需要在J2EE应用服务器或者Servlet容器相关启动参数设置处指定,其启动文件中来配置,
 
Tomcat
是在catalina.bat中配置,weblogicwebsphere是在其他地方,具体我就说了,相信玩过的这些大型服务器的人都知道,没玩过的看看这篇文章,玩玩就知道了,呵呵。
 
    
另外常常有人问到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:用一个下的所有 
           
文件存档到一个名为 '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              
包含概述页面的标题
 
-header                
包含每个页面的页眉文本
 
-footer                
包含每个页面的页脚文本
 
-bottom                
包含每个页面的底部文本
 
-link                        
创建指向位于 的 javadoc 输出的链接

-linkoffline          
利用位于 的软件包列表链接至位于的文档 
-excludedocfilessubdir <
名称 1>:排除带有给定名称的所有文档文件子目录。
 
-group <
名称> :..         在概述页面中,将指定的软件包分组
 
-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 
其中, 包括

  -port         
指定供 rmid 使用的端口
 
  -log     
指定 rmid 将日志写入的目录
 
  -stop               
停止当前的 rmid 调用(对指定端口)
 
  -C    
向每个子进程传递参数(激活组)