`
weiwu83
  • 浏览: 188761 次
  • 来自: ...
社区版块
存档分类
最新评论

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

    博客分类:
  • JAVA
阅读更多
在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...]

           (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工具的参数,常见的有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:用一个下的所有

           文件存档到一个名为 '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    向每个子进程传递参数(激活组)
分享到:
评论

相关推荐

    组成原理课程实验:MIPS 流水线CPU、实现36条指令、转发、冒险检测-内含源码和说明书.zip

    组成原理课程实验:MIPS 流水线CPU、实现36条指令、转发、冒险检测-内含源码和说明书.zip

    setuptools-50.0.2-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    setuptools-1.1.6.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    CEA二次开发脚本:用于ECSP配比设计

    CEA二次开发脚本:用于ECSP配比设计

    环形数组是一种特殊的数据结构

    环形数组

    什么是环形数组以及学习环形数组的意义是什么

    环形数组

    母亲节祝福 Python 代码(包含详细介绍)

    附件是母亲节祝福 Python 代码(包含详细介绍),文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    setuptools-0.7.4.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    max111111111

    max111111111

    攻防世界问题的概要介绍与分析

    "攻防世界"这一术语广泛应用于网络安全领域,它生动描绘了一个持续演进的技术战场,其中攻击者与防御者围绕着数据保护、系统安全及网络基础设施的完整性展开激烈的智斗。在这个虚拟而又现实交织的舞台上,知识、技能与创新成为了决定胜负的关键要素。以下是对这个复杂多维攻防世界的深度资源描述: 在一个由代码编织的宇宙里,"攻防世界"不仅是一场技术较量,更是对策略、耐心与适应能力的考验。想象一个庞大的数字迷宫,其中数据如同珍贵的宝藏,被各式各样的防火墙、加密协议和安全系统重重保护。而另一边,潜伏着一群技艺高超的黑客,他们利用漏洞、社会工程学以及先进的攻击手段,试图穿透这些防线,揭露系统的脆弱之处。 对于防御方而言,构建坚不可摧的安全体系是永恒的目标。这要求他们精通最新的安全技术,如入侵检测系统(IDS)、安全信息和事件管理(SIEM)平台、以及人工智能驱动的威胁狩猎工具。同时,定期进行渗透测试和红蓝对抗演练,模拟真实攻击场景,以发现并修补潜在漏洞。此外,培养安全意识,教育员工识别钓鱼邮件、恶意软件等,也是构建第一道防线的重要环节。 攻击者一方,则聚焦于不断探索未知漏洞(零日漏洞)、开发定制化恶意软

    关于java出租车计价器设计与实现.zip

    关于java出租车计价器设计与实现 总共4个模块 (1)出租车计价系统可以实现出租车信息的管理。 1.1出租车信息的查询:通过数据库查询出租车的车型,车号,以及是否可用 1.2出租车信息的增加:向数据库中添加出租车的车型,车号,以及是否可用 1.3出租车信息的修改:对数据库中已经存在的出租车的车型,车号,以及是否可用的信息进行修改 1.4出租车信息的删除:删除数据库中已经存储的出租车的信息 (2)出租车计价系统可以实现司机信息的管理。 2.1司机信息的查询:通过数据库查询出司机的年龄,性别,学历,名字等信息 2.2司机信息的增加:向数据库中添加司机的年龄,性别,学历,名字等信息 2.3司机信息的修改:对数据库中已经存在的司机的年龄,性别,学历,名字等信息进行修改 2.4司机信息的删除:删除数据库中已经存储的司机的信息 (3)出租车计价系统可以实现出租车计价功能。 3.1通过java多线程,模拟出租车在路上的情景 3.2通过距离计费的方式,将订单的时间,乘客的信息,订单的价格等插入数据库中 (4)出租车计价系统可以实

    华为OD机试D卷 - 拼接URL - 免费看解析和代码.html

    私信博主免费获取真题解析以及代码

    setuptools-8.2.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    C语言输出母亲节祝福(内含详细描述)

    附件是C语言输出母亲节祝福(内含详细描述),文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    setuptools-40.4.2.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    仰卧起坐YOLOV8-POSE,C++

    仰卧起坐YOLOV8-POSE,C++,只需要OPENCV

    行动学习指导手册glq.ppt

    行动学习指导手册glq.ppt

    setuptools-0.9.8.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    计算机网络资料复习pdf

    计算机网络资料复习pdf

    setuptools-1.0.zip

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

Global site tag (gtag.js) - Google Analytics