JVM启动参数大全

java启动参数共分为三类;
一个是标准参数(-)。所有JVM实现都必须实现这些参数的功能,并且向后兼容。[en]One is * standard parameters * (-). All JVM implementations must implement the functions of these parameters and be backward compatible.
另一个是非标准参数(-X)。缺省的JVM实现了这些参数的功能,但它不能保证满足所有JVM实现,也不能保证向后兼容。[en]The other is * non-standard parameters * (- X). The default jvm implements the functions of these parameters, but it does not guarantee that all jvm implementations are met and backward compatibility is not guaranteed.
第三个是非稳定参数(-XX),该参数因JVM实现的不同而不同,未来随时可能被取消,因此需要谨慎使用。[en]The third is * non-Stable parameter * (- XX), which varies from jvm implementation to jvm implementation and may be cancelled at any time in the future, so it needs to be used with caution.
本文主要介绍标准参数,其余两部分将陆续推出。[en]This article mainly describes the standard parameters, and the remaining two parts will be launched one after another.

标准参数列表如下:[en]The list of standard parameters is as follows:
-client
设置jvm使用client模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或者PC应用开发和调试。

-server
设置JVM使得服务器模式启动速度较慢,但运行时性能和内存管理效率较高,适用于生产环境。在具有64位功能的JDK环境中,默认情况下启用此模式,并忽略-client参数。[en]Setting jvm makes server mode, which is characterized by slow startup speed, but high runtime performance and memory management efficiency, which is suitable for production environment. In jdk environments with 64-bit capabilities, this mode is enabled by default and the-client parameter is ignored.

-agentlib:libname[=options]
用于加载本地库程序包[en]Used to load local lib packages
其中libname为本地代理库文件名,默认搜索路径为环境变量PATH中的路径,options为传给本地库启动时的参数,多个参数之间用逗号分隔。 在Windows平台上jvm搜索本地库名为libname.dll的文件,在linux上jvm搜索本地库名为libname.so的文件,搜索路径环 境变量在不同系统上有所不同,比如Solaries上就默认搜索LD_LIBRARY_PATH。
例如:-agentlib:hprof[en]For example:-agentlib:hprof
用来获取jvm的运行情况,包括CPU、内存、线程等的运行数据,并可输出到指定文件中;windows中搜索路径为JRE_HOME/bin/hprof.dll。

-agentpath:pathname[=options]
将本地库作为完整路径加载,不再搜索路径中的路径;其他函数与agentlib相同;更多信息将在下面的JVMTI小节中详细介绍。[en]Load the local library as a full path and no longer search for paths in PATH; other functions are the same as agentlib; more information to be continued will be detailed in the following JVMTI section.

-classpath classpath
-cp classpath

告诉JVM搜索目录名、JAR文档名和ZIP文档名,用分号分隔;使用-classpath之后,JVM将不再使用CLASSPATH中的类搜索路径。如果未设置-classpath和CLASSPATH,则JVM使用当前路径(.)作为类搜索路径。[en]Tell jvm to search directory name, jar document name and zip document name, separated by semicolons; after using-classpath, jvm will no longer use the class search path in CLASSPATH. If-classpath and CLASSPATH are not set, jvm uses the current path (.) As a class search path.
jvm搜索类的方式和顺序为:Bootstrap,Extension,User。
Bootstrap中的路径是jvm自带的jar或zip文件,jvm首先搜索这些包文件,用System.getProperty(“sun.boot.class.path”)可得到搜索路径。
Extension是位于JRE_HOME/lib/ext目录下的jar文件,jvm在搜索完Bootstrap后就搜索该目录下的jar文件,用System.getProperty(“java.ext.dirs”)可得到搜索路径。
User搜索顺序为当前路径.、CLASSPATH、-classpath,jvm最后搜索这些目录,用System.getProperty(“java.class.path”)可得到搜索路径。

-Dproperty=value
设置系统属性名称/值对,在该JVM上运行的应用程序可以使用System.getProperty(“Property”)来获取值。[en]Set the system property name / value pair, and applications running on this jvm can use System.getProperty (“property”) to get the value of value.
如果value中有空格,则需要用双引号将该值括起来,如-Dname=”space string”。
此参数通常用于设置系统级全局变量值,如配置文件路径,以便可以在程序中的任何位置访问该属性。[en]This parameter is typically used to set the system-level global variable value, such as the configuration file path, so that the property is accessible anywhere in the program.

-enableassertions[:
以上参数用于设置JVM是否启动断言机制(从JDK 1.4开始支持),JVM默认关闭断言机制。[en]The above parameters are used to set whether jvm starts the assertion mechanism (supported since JDK 1.4), and jvm turns off the assertion mechanism by default.
用-ea 可打开断言机制,不加

-disableassertions[:
用于关闭JVM断言处理的Packagename和Classname的使用方式与-ea相同,缺省情况下JVM处于关闭状态。[en]Used to set jvm off assertion processing, packagename and classname are used in the same way as-ea, and jvm is turned off by default.
此参数通常用于同一包中的某些类不需要断言的情况。例如,如果com.ymbat.fuctbat需要断言,而com.ymbat.fucto.Brickbat不需要,则可以按如下方式运行:[en]This parameter is generally used in scenarios where some class in the same package does not need assertions. For example, if com.wombat.fruitbat requires assertions, but com.wombat.fruitbat.Brickbat does not, you can run as follows:
java -ea:com.wombat.fruitbat…-da:com.wombat.fruitbat.Brickbat 。

-enablesystemassertions
-esa

激活System类的断言。[en]Activates the assertion of the system class.

-disablesystemassertions
-dsa

关闭系统类的断言。[en]Turn off the assertion of the system class.

-jar
指定应用程序作为JAR包执行。[en]Specifies that an application executes as a jar package.
要这样执行一个应用程序,必须让jar包的manifest文件中声明初始加载的Main-class,当然那Main-class必须有public static void main(String[] args)方法。

-javaagent:jarpath[=options]
指定在JVM启动时加载Java语言设备代理。[en]Specifies that the java language device agent is loaded when jvm starts.
Jarpath文件中的mainfest文件必须有Agent-Class属性。代理类也必须实现公共的静态public static void premain(String agentArgs, Instrumentation inst)方法(和main方法类似)。当jvm初始化时,将按代理类的说明顺序调用premain方法;具体参见 java.lang.instrument软件包的描述。

-verbose
-verbose:class

输出有关JVM加载类的信息,当JVM报告找不到类或存在类冲突时,可以诊断这些信息。[en]Output information about jvm loading classes, which can be diagnosed when jvm reports that the class cannot be found or that there is a class conflict.
-verbose:gc
输出各GC的相关信息。[en]Output the relevant information of each GC.
-verbose:jni
本机方法调用的输出信息,通常用于诊断JNI调用错误消息。[en]Output information about native method calls, which is generally used to diagnose jni call error messages.

-version
输出Java版本信息,如JDK版本、供应商、型号等。[en]Output java version information, such as jdk version, vendor, model.
-version:release
指定class或者jar运行时需要的jdk版本信息;若指定版本未找到,则以能找到的系统默认jdk版本执行;一般情况下,对于jar文件,可以在manifest文件中指定需要的版本信息,而不是在命令行。
release中可以指定单个版本,也可以指定一个列表,中间用空格隔开,且支持复杂组合,比如:
-version:”1.5.0_04 1.5*&1.5.1_02+”
指定class或者jar需要jdk版本为1.5.0_04或者是1.5系列中比1.5.1_02更高的所有版本。

-showversion
输出完Java版本信息(与-Version相同)后,继续输出Java的标准参数列表及其说明。[en]After outputting the java version information (same as-version), continue to output the standard parameter list and its description for java.

-?
-help

输出Java标准参数及其说明的列表。[en]Outputs a list of java standard parameters and their descriptions.

-X
输出参数及其说明的非标准列表。[en]Outputs a non-standard list of parameters and their descriptions.

在许多情况下,我们经常使用以上参数的多种组合。例如,当我们使用JProfiler进行跟踪和监控时,我们需要在监控的Java启动参数中添加以下配置:[en]We often use multiple combinations of the above parameters in many cases. For example, when we use JProfiler for tracking and monitoring, we need to add the following configuration to the monitored java startup parameters:
-agentlib:jprofilerti=port=8849 -Xbootclasspath/a:/usr/local/jprofiler5/bin/agent.jar
使用了两个agentlib和-X参数,而bootclasspath参数的详细信息将在非标准参数中详细介绍。[en]Two-agentlib and-X parameters are used, and the details of the bootclasspath parameter will be described in detail in the non-standard parameters.

http://blog.csdn.net/sfdev/archive/2008/01/24/2063464.aspx

非标准参数,也称为扩展参数,如下所示:[en]Non-standard parameters, also known as extended parameters, are listed as follows:
-Xint
将JVM设置为在解释模式下运行,则所有字节码将直接执行,而不编译成本代码。[en]Set jvm to run in interpretation mode, and all bytecodes will be executed directly without compiling the cost code.

-Xbatch
关闭后台代码编译,强制在前台编译,编译完成后才能执行代码。[en]Turn off background code compilation, force it to be compiled in the foreground, and the code can be executed only after the compilation is completed.
默认情况下,JVM在后台编译,如果编译未完成,则前台以解释模式运行代码。[en]By default, jvm is compiled in the background, and if the compilation is not complete, the foreground runs the code in interpretation mode.

-Xbootclasspath:bootclasspath
让jvm从指定路径(可以是分号分隔的目录、jar、或者zip)中加载bootclass,用来替换jdk的rt.jar;若非必要,一般不会用到;
-Xbootclasspath/a:path
将指定路径中的所有文件追加到默认引导路径[en]Appends all files from the specified path to the default bootstrap path
-Xbootclasspath/p:path
让jvm优先于bootstrap默认路径加载指定路径的所有文件;

-Xcheck:jni
对JNI函数进行附加check;此时jvm将校验传递给JNI函数参数的合法性,在本地代码中遇到非法数据时,jmv将报一个致命错误而终止;使用该参数后将造成性能下降,请慎用。

-Xfuture
让jvm对类文件执行严格的格式检查(默认jvm不进行严格格式检查),以符合类文件格式规范,推荐开发人员使用该参数。

-Xnoclassgc
关闭类的GC函数;因为它会阻止内存回收,所以可能会导致OutOfMemoyError错误,所以请谨慎使用[en]Turn off the gc function for class; because it prevents memory recycling, it may cause OutOfMemoryError errors, so use it with caution

-Xincgc
打开增量GC(默认情况下关闭);这有助于减少应用程序在长时间GC期间的暂停,但会降低CPU对应用程序的处理能力,因为它可能与应用程序并发执行。[en]Turn on incremental gc (off by default); this helps reduce the pause of the application during a long GC, but reduces the processing power of the application by CPU because it may be executed concurrently with the application.

-Xloggc:file
与-verbose:gc功能类似,只是将每次GC事件的相关情况记录到一个文件中,文件的位置最好在本地,以避免网络的潜在问题。
如果它与详细命令同时出现在命令行上,则以-Xloggc为准。[en]If it appears on the command line at the same time as the verbose command,-Xloggc shall prevail.

-Xmsn
指定jvm堆的初始大小,默认为物理内存的1/64,最小为1M;可以指定单位,比如k、m,若不指定,则默认为字节。

-Xmxn
指定JVM堆的最大值,默认为1G或1G物理内存,最小值为2M;单位与-Xms相同。[en]Specifies the maximum value of the jvm heap, which defaults to 1G or 1G of physical memory, with a minimum of 2m; the unit is the same as-Xms.

-Xprof
跟踪正在运行的程序,并在标准输出中输出跟踪数据;适合在开发环境中进行调试。[en]Track the running program and output the trace data in the standard output; suitable for debugging in the development environment.

-Xrs
减少JVM对操作系统信号(信号)的使用,从1.3.1开始有效[en]Reduce the use of operating system signals (signals) by jvm, which is valid from 1.3.1
从jdk1.3.0开始,jvm允许程序在关闭之前还可以执行一些代码(比如关闭数据库的连接池),即使jvm被突然终止;
jvm关闭工具通过监控控制台的相关事件而满足以上的功能;更确切的说,通知在关闭工具执行之前,先注册控制台的控制handler,然后对 CTRL_C_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, and CTRL_SHUTDOWN_EVENT这几类事件直接返回true。
但如果jvm以服务的形式在后台运行(比如servlet引擎),他能接收CTRL_LOGOFF_EVENT事件,但此时并不需要初始化关闭程序;为 了避免类似冲突的再次出现,从jdk1.3.1开始提供-Xrs参数;当此参数被设置之后,jvm将不接收控制台的控制handler,也就是说他不监控 和处理CTRL_C_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, or CTRL_SHUTDOWN_EVENT事件。

-Xssn
设置单个线程栈的大小,一般默认为512k。

在上述参数中,-Xmsn和-Xmxn.是我们性能优化中非常重要的参数。[en]Among the above parameters, such as * -Xmsn and-Xmxn., are very important parameters in our performance optimization.
-Xprof、-Xloggc:file等都是在没有专业跟踪工具情况下排错的好手;
*
-Xbootclasspath/a:路径在上一节提到的JProfiler配置中使用[en] -Xbootclasspath/a:path is used in the configuration of JProfiler mentioned in the previous section

接下来我们将描述Java HotSpot VM中-XX:的可配置参数列表。[en]Next we will describe the configurable parameter list of * -XX: in Java HotSpot VM.
这些参数可以松散地聚合为三类:[en]These parameters can be loosely aggregated into three categories:
行为参数(Behavioral Options):用于改变jvm的一些基础行为;
性能调优(Performance Tuning):用于jvm的性能调优;
调试参数*(Debugging Options):一般用于打开跟踪、打印、输出等jvm参数,用于显示jvm更加详细的信息;

由于sun官方文档中对各参数的描述也都非常少(大多只有一句话),而且大多涉及OS层面的东西,很难描述清楚,所以以下是挑选了一些我们开发中可能会用得比较多的配置项,若需要查看所有参数列表,可以点击HotSpot VM Specific Options.查看原文;

首先,我们来介绍行为参数:[en]First, let’s introduce * behavior parameters * :

参数及其默认值 描述 -XX:-DisableExplicitGC 禁止调用System.gc();但jvm的gc仍然有效 -XX:+MaxFDLimit 最大化文件描述符的数量限制 -XX:+ScavengeBeforeFullGC 新生代GC优先于Full GC执行 -XX:+UseGCOverheadLimit 在抛出OOM之前限制jvm耗费在GC上的时间比例

-XX:-UseParallelOldGC 对Full GC启用并行,当-XX:-UseParallelGC启用时该项自动启用

-XX:+UseThreadPriorities 启用本地线程优先级

上表中粗体的三个参数代表了JVM中GC执行的三种模式,即串行、并行和并发[en]The three parameters in boldface in the above table represent the three modes of GC execution in jvm, namely * serial, parallel and concurrent *
Serial(SerialGC)是JVM的默认GC模式,一般适用于小型应用和单处理器。该算法相对简单,GC效率高,但可能会给应用带来停顿。[en]Serial * (SerialGC) * is the default GC mode of jvm, which is generally suitable for small applications and single processors. The algorithm is relatively simple and GC efficiency is high, but it may bring standstill to applications.
并行(ParallGC)是指GC运行时对应用程序的运行没有影响,GC和APP的线程是并发执行的,可以最大限度地减少对APP运行的影响。[en]Parallel * (ParallelGC) * means that the GC runtime has no effect on the running of the application, and the threads of GC and app are executing concurrently, which can minimize the impact on the running of app.
并发(ConcMarkSweepGC)是指多个线程并发执行GC,一般适用于多处理器系统,可以提高GC的效率,但算法复杂,系统消耗大。[en]Concurrent * (ConcMarkSweepGC) * means that multiple threads execute GC concurrently, which is generally suitable for multiprocessor systems and can improve the efficiency of GC, but the algorithm is complex and the system consumes a lot.


性能调优
参数列表:

参数及其默认值 描述 -XX:LargePageSizeInBytes=4m 设置用于Java堆的大页面尺寸 -XX:MaxHeapFreeRatio=70 GC后java堆中空闲量占的最大比例

-XX:MinHeapFreeRatio=40 GC后java堆中空闲量占的最小比例 -XX:NewRatio=2 新生代内存容量与老生代内存容量的比例

-XX:ReservedCodeCacheSize=32m 保留代码占用的内存容量 -XX:ThreadStackSize=512 设置线程栈大小,若为0则使用系统默认值 -XX:+UseLargePages 使用大页面内存

我们基本上在日常性能调优中使用这些属性的粗体。[en]We basically use these attributes in boldface in our daily performance tuning.

调试参数列表:

参数及其默认值 描述 -XX:-CITime 打印消耗在JIT编译的时间 -XX:ErrorFile=./hs_err_pid

-XX:OnError=”

-XX:-PrintCommandLineFlags 打印在命令行中出现过的标记 -XX:-PrintCompilation 当一个方法被编译时打印相关信息 -XX:-PrintGC 每次GC时打印相关信息 -XX:-PrintGC Details 每次GC时打印详细信息 -XX:-PrintGCTimeStamps 打印每次GC的时间戳 -XX:-TraceClassLoading 跟踪类的加载信息 -XX:-TraceClassLoadingPreorder 跟踪被引用到的所有类的加载信息 -XX:-TraceClassResolution 跟踪常量池 -XX:-TraceClassUnloading 跟踪类的卸载信息 -XX:-TraceLoaderConstraints 跟踪类加载器约束的相关信息

当系统出现问题,无法使用外部跟踪工具(如JProfiler.)时,上述参数将发挥重要作用,如转储堆信息和打印并发锁。[en]When there is a problem with the system and can not use external tracking tools (such as JProfiler.), the above parameters will play an important role, such as dump heap information and printing concurrent locks.

———————–第二种理解——————

不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略, 调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为 复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各 个机器上的配置不同(主要cup个数,内存不同),所以使用的GC种类也会不同(如何选择见GC种类及如何选择)。本文将注重介绍JVM、GC的一些重要参数的设置来提高系统的性能。

-Xms 初始堆大小 物理内存的1/64(

Original: https://www.cnblogs.com/jpfss/p/12237079.html
Author: 星朝
Title: JVM启动参数大全

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/6129/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部