Java虚拟机JVM参数配置说明精.docx
《Java虚拟机JVM参数配置说明精.docx》由会员分享,可在线阅读,更多相关《Java虚拟机JVM参数配置说明精.docx(33页珍藏版)》请在冰豆网上搜索。
Java虚拟机JVM参数配置说明精
Java虚拟机(JVM)参数配置说明
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...]
(toexecuteaclass)
or java[-options]-jarjarfile[args...]
(toexecuteajarfile)
whereoptionsinclude:
-client toselectthe"client"VM
-server toselectthe"server"VM
-hotspot isasynonymforthe"client"VM [deprecated]
ThedefaultVMisclient.
-cp
-classpath
A;separatedlistofdirectories,JARarchives,
andZIParchivestosearchforclassfiles.
-D=
setasystemproperty
-verbose[:
class|gc|jni]
enableverboseoutput
-version printproductversionandexit
-version:
requirethespecifiedversiontorun
-showversion printproductversionandcontinue
-jre-restrict-search|-jre-no-restrict-search
include/excludeuserprivateJREsintheversionsearch
-?
-help printthishelpmessage
-X printhelponnon-standardoptions
-ea[:
...|:
]
-enableassertions[:
...|:
]
enableassertions
-da[:
...|:
]
-disableassertions[:
...|:
]
disableassertions
-esa|-enablesystemassertions
enablesystemassertions
-dsa|-disablesystemassertions
disablesystemassertions
-agentlib:
[=]
loadnativeagentlibrary,e.g.-agentlib:
hprof
seealso,-agentlib:
jdwp=helpand-agentlib:
hprof=help
-agentpath:
[=]
loadnativeagentlibrarybyfullpathname
-javaagent:
[=]
loadJavaprogramminglanguageagent,seejava.lang.instrument
-----------------------------------------------------------------------
在控制台输出信息中,有个-X(注意是大写)的命令,这个正是查看JVM配置参数的命令。
其次,用java-X命令查看JVM的配置说明:
运行后如下结果,这些就是配置JVM参数的秘密武器,这些信息都是英文的,为了方便阅读,我根据自己的理解翻译成中文了(不准确的地方还请各位博友斧正)
-----------------------------------------------------------------------
D:
\j2sdk15\bin>java-X
-Xmixed mixedmodeexecution(default)
-Xint interpretedmodeexecutiononly
-Xbootclasspath:
setsearchpathforbootstrapclassesandresources
-Xbootclasspath/a:
appendtoendofbootstrapclasspath
-Xbootclasspath/p:
prependinfrontofbootstrapclasspath
-Xnoclassgc disableclassgarbagecollection
-Xincgc enableincrementalgarbagecollection
-Xloggc:
logGCstatustoafilewithtimestamps
-Xbatch disablebackgroundcompilation
-Xms setinitialJavaheapsize
-Xmx setmaximumJavaheapsize
-Xss setjavathreadstacksize
-Xprof outputcpuprofilingdata
-Xfuture enablestrictestchecks,anticipatingfuturedefault
-Xrs reduceuseofOSsignalsbyJava/VM(seedocumentation)
-Xcheck:
jni performadditionalchecksforJNIfunctions
-Xshare:
off donotattempttousesharedclassdata
-Xshare:
auto usesharedclassdataifpossible(default)
-Xshare:
on requireusingsharedclassdata,otherwisefail.
The-Xoptionsarenon-standardandsubjecttochangewithoutnotice.
-----------------------------------------------------------------------
JVM配置参数中文说明:
-----------------------------------------------------------------------
1、-Xmixed mixedmodeexecution(default)
混合模式执行
2、-Xint interpretedmodeexecutiononly
解释模式执行
3、-Xbootclasspath:
setsearchpathforbootstrapclassesandresources
设置zip/jar资源或者类(.class文件)存放目录路径
3、-Xbootclasspath/a:
appendtoendofbootstrapclasspath
追加zip/jar资源或者类(.class文件)存放目录路径
4、-Xbootclasspath/p:
prependinfrontofbootstrapclasspath
预先加载zip/jar资源或者类(.class文件)存放目录路径
5、-Xnoclassgc disableclassgarbagecollection
关闭类垃圾回收功能
6、-Xincgc enableincrementalgarbagecollection
开启类的垃圾回收功能
7、-Xloggc:
logGCstatustoafilewithtimestamps
记录垃圾回日志到一个文件。
8、-Xbatch disablebackgroundcompilation
关闭后台编译
9、-Xms setinitialJavaheapsize
设置JVM初始化堆内存大小
10、-Xmx setmaximumJavaheapsize
设置JVM最大的堆内存大小
11、-Xss setjavathreadstacksize
设置JVM栈内存大小
12、-Xprof outputcpuprofilingdata
输入CPU概要表数据
13、-Xfuture enablestrictestchecks,anticipatingfuturedefault
执行严格的代码检查,预测可能出现的情况
14、-Xrs reduceuseofOSsignalsbyJava/VM(seedocumentation)
通过JVM还原操作系统信号
15、-Xcheck:
jni performadditionalchecksforJNIfunctions
对JNI函数执行检查
16、-Xshare:
off donotattempttousesharedclassdata
尽可能不去使用共享类的数据
17、-Xshare:
auto usesharedclassdataifpossible(default)
尽可能的使用共享类的数据
18、-Xshare:
on requireusingsharedclassdata,otherwisefail.
尽可能的使用共享类的数据,否则运行失败
The-Xoptionsarenon-standardandsubjecttochangewithoutnotice.
-----------------------------------------------------------------------
怎么用这这些参数呢?
其实所有的命令行都是这么一用,下面我就给出一个最简单的HelloWorl的例子来演示这个参数的用法,非常的简单。
HelloWorld.java
-----------------------------------------------
publicclass HelloWorld
{
publicstaticvoidmain(String[]args)
{
System.out.println("HelloWorld!
");
}
}
编译并运行:
D:
\j2sdk15\bin>javacHelloWorld.java
D:
\j2sdk15\bin>java-Xms256M-Xmx512MHelloWorld
HelloWorld!
呵呵,这下满足了吧!
实践:
在大型系统或者应用中配置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'的存档文件中:
jarcvfclasses.jarFoo.classBar.class
示例2:
用一个存在的清单(manifest)文件'mymanifest'将foo/目录下的所有
文件存档到一个名为'classes.jar'的存档文件中:
jarcvfmclasses.jarmymanifest-Cfoo/.
(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