Java平台,标准版工具参考/Java应用启动参数

不少都是谷歌翻译过来的,看不懂去看官方文档和百度
使用和阅读须知:
        1. 因为部分机器翻译缘故,部分指令有中文符号与空格.使用时请注意替换符号与空格
        2.本篇文章基于Java SE 8 
        3.本文章翻译子windows系统下的参数系列,由于笔者的学习环境基于windows,其余
            系统平台请自行参考:
           Java Platform, Standard Edition (Java SE) 8 : https://docs.oracle.com/javase/8/ 
 

概要


 
java [options] classname [args]
java [options] -jar文件名[args]
javaw [options] classname [args]
javaw [options] -jar filename [args]
选项
    命令行选项由空格分隔。参阅选项。
类名
    要启动的类的名称。
文件名
    要调用的Java归档(JAR)文件的名称。仅与-jar选项一块儿使用。
ARGS
    传递给main()方法的参数用空格分隔。
 

描述


        java命令启动一个Java应用程序。它经过启动Java运行时环境(JRE),加载指定的类并调用该类的main()方法来实现此目的。该方法必须声明为public和static,它不能返回任何值,而且它必须接受一个String数组做为参数。方法声明具备如下形式:

 
public static void main(String [] args)

 

 
 
        经过加载具备main()方法或扩展javafx.application.Application的类,java命令可用于启动JavaFX应用程序。在后一种状况下,启动程序构造Application类的一个实例,调用其init()方法,而后调用start(javafx.stage.Stage)方法。
        默认状况下,不是java命令选项的第一个参数是要调用的类的全限定名。若是指定了-jar选项,则其参数是包含应用程序的类和资源文件的JAR文件的名称。启动类必须在其源代码中由Main-Class清单标题指示。
        JRE在三个位置中搜索启动类(以及应用程序使用的其余类):引导类路径(bootstrap class path),已安装的扩展(installed extensions)和用户的类路径(user's class path.)。[注]对应3个类加载器
        类文件名或JAR文件名后面的参数传递给main()方法。
        javaw命令与java相同,只是在javaw中没有关联的控制台窗口。若是不但愿显示命令提示符窗口,请使用javaw。可是,若是启动失败,javaw启动程序将显示一个包含错误信息的对话框。
 

选项


        java命令支持普遍的选项,能够分为如下几类:
1.标准选项(Standard Options)
2.非标准选项(Non-Standard Options)
3.高级运行时选项(Advanced Runtime Options)
4.高级JIT编译器选项(Advanced JIT Compiler Options)
5.高级可维护选项(Advanced Serviceability  Options)
6.高级垃圾收集选项(Advanced Garbage Collection Options)
 
        Java虚拟机(JVM)的全部实现都支持标准选项。它们用于常见操做,例如检查JRE的版本,设置类路径,启用详细输出等。
        非标准选项是特定于Java HotSpot虚拟机的通用选项,所以它们不保证被全部JVM实现支持,而且可能会有变化。这些选项以-X开头。
        高级选项不建议随意使用。这些是用于调整Java HotSpot虚拟机操做的特定区域的开发人员选项,这些操做一般具备特定的系统要求,而且可能须要对系统配置参数进行特权访问。它们也不能保证被全部JVM实现支持,而且可能会发生变化。高级选项以-XX开头。
        要跟踪最新版本中不推荐使用或删除的选项,在文档末尾会有一个名为“已弃用和已除去选项”的部分。
        boolean选项用于启用默认禁用的功能或禁用默认启用的功能。这些选项不须要参数。boolean-XX选项使用加号(-XX:+ OptionName)启用,并使用减号(-XX:-OptionName)禁用。
        对于须要参数的选项,参数能够经过空格,冒号(:)或等号(=)与选项名称分开,或者参数能够直接跟随选项(每一个选项的确切语法不一样)。若是您但愿以字节为单位指定大小,则能够不使用后缀,也可使用后缀k或K表示千字节(KB),m或M表示兆字节(MB),g或G表示千兆字节(GB)。例如,要将大小设置为8 GB,能够指定8g,8192m,8388608k或8589934592做为参数。若是您但愿指定百分比,请使用从0到1的数字(例如,指定0.25当作25%)。
 

标准选项(Standard Options)


        这些是全部JVM实现都支持的最经常使用选项。
 
-agentlib:libname[=options]
加载指定的本地代理程序库。库名以后,可使用特定于库的逗号分隔列表选项。
若是指定了选项-agentlib:foo,则JVM将尝试在PATH系统变量指定的位置加载名为foo.dll的库。
如下示例显示了如何加载堆分析工具(HPROF)库,并每隔20 ms获取一个简单CPU信息,栈深度为3:

 
-agentlib:hprof=cpu=samples,interval=20,depth=3

 

 
 
如下示例显示如何加载 Java Debug Wire Protocol (JDWP)库并监听端口8000上的socket链接,并在加载主类以前挂起JVM:
 
 
-agentlib:jdwp=transport=dt_socket,server=y,address=8000

 

 
有关本地代理库的更多信息,请参阅如下内容:
JVM工具界面指南中的代理程序命令行选项,位于 http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#starting
 
agentpath:pathname[=options]
        加载由绝对路径名指定的本地代理程序库。 此选项等同于-agentlib,但要使用库的完整路径和文件名。
 
-client
        选择Java HotSpot客户端VM。 Java SE开发工具包(JDK)的64位版本目前忽略此选项,而是使用Server VM。
        有关默认JVM选择,请参阅Server-Class Machine Detection :  http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html 
 
-Dproperty=value
        设置系统属性值。 该属性变量是一个不带空格的字符串,表示该属性的名称。 值变量是一个表示属性值的字符串。 若是value是一个带空格的字符串,则将其用引号引发来(例如-Dfoo="foo bar")。
 
-disableassertions[:[packagename]...|:classname]/-da[:[packagename]...|:classname]
        禁用断言。默认状况下,全部包和类中的断言都是禁用的。
        若是没有参数,-disableassertions(-da)将禁用全部包和类中的声明。在packagename参数以...结尾的状况下,将禁用指定包和任何子包中的断言。若是参数只是...,那么会禁用当前工做目录中未命名包中的断言。使用classname参数,交换机将禁用指定类中的断言。
        -disableassertions(-da)选项适用于全部类加载器和系统类(它们没有类加载器)。这个规则有一个例外:若是该选项没有提供参数,那么它不适用于系统类。这样能够很容易地禁用除系统类之外的全部类中的断言。 -disablesystemassertions选项使您能够禁用全部系统类中的断言。
        要显式启用特定包或类中的断言,请使用-enableassertions(-ea)选项。两个选项能够同时使用。例如,要在包com.wombat.fruitbat(和任何子包)中启用断言但在类com.wombat.fruitbat.Brickbat中禁用的状况下运行MyClass应用程序,请使用如下命令:
 java -ea:com.wombat.fruitbat ... -da:com.wombat.fruitbat.Brickbat MyClass

 


 
-enablesystemassertions/-esa
        开启全部系统类断言
 
-help/-?
       显示java命令的可用信息而不实际运行JVM。
 
-jar filename
        执行封装在JAR文件中的程序。 filename参数是带有清单的JAR文件的名称,该清单包含Main-Class:classname形式的行,该行使用public static void main(String[] args)方法定义该类,该方法充当您的应用程序的起点。
        当使用-jar选项时,指定的JAR文件是全部用户类的资源,而其余类路径设置将被忽略。
        有关JAR文件的更多信息,请参阅如下资源:
            2. Java存档(JAR)文件指南,位于 http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html 
            3. 课程:打包JAR文件中的程序  http://docs.oracle.com/javase/tutorial/deployment/jar/index.html 
 
-javaagent:jarpath[=options]
        加载指定的Java编程语言代理。 有关检测Java应用程序的更多信息,请参阅
        http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary  上的Java API文档中的java.lang.instrument的包描述
 
-jre-restrict-search
        版本搜索中包含用户私有的JRE。
 
-no-jre-restrict-search
        从版本搜索中排除用户私有JRE。
 
-server
        选择Java HotSpot Server VM。 64位版本的JDK仅支持服务器虚拟机,所以在这种状况下,该选项是隐含的。
        有关默认JVM选择,请参阅服务器级机器检测  http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html 
 
-showversion
        显示版本信息并继续执行应用程序。该选项等同于-version选项,只是后者指示JVM在显示版本信息后退出。
        
-splash:imgname
        用imgname指定的图像显示启动画面。例如,要在启动应用程序时从images目录显示splash.gif文件,请使用如下选项:
-splash:img/splash.gif
-verbose:class
        显示有关每一个加载的类的信息。
 
-verbose:GC
        显示有关每一个垃圾收集(GC)事件的信息。
 
-verbose:JNI
        显示有关使用本机方法和其余Java Native Interface(JNI)活动的信息。
 
-version
        显示版本信息,而后退出。该选项等同于-showversion选项,只是后者在显示版本信息后不指示JVM退出。
 
-version:release
        指定用于运行应用程序的发行版本。若是调用的java命令的版本不符合此规范,而且在系统上找到适当的实现,则将使用适当的实现。
        release参数指定了确切的版本字符串,或者是由空格分隔的版本字符串和范围列表。版本字符串是版本号的开发人员指定,格式以下:1.x.0_u(其中x是主要版本号,u是更新版本号)。版本范围由版本字符串组成,后跟加号(+)以指定此版本或更高版本,或版本字符串的一部分,后跟星号(*)以指定具备匹配前缀的任何版本字符串。版本字符串和范围可使用逻辑OR组合的空间或与两个版本字符串/范围的逻辑AND组合的和符号(&)组合。例如,若是运行类或JAR文件须要JRE 6u13(1.6.0_13)或从6u10(1.6.0_10)开始的任何JRE 6,请指定如下内容:
-version:- "1.6.0_13 1.6* & 1.6.0_10+"
        仅当发布参数中有空格时,才须要引号。
        对于JAR文件,首选项是在JAR文件清单中指定版本要求,而不是在命令行上。
 

非标准选项/Non-Standard Options


这些选项是特定于Java HotSpot虚拟机的通用选项。
 
-X(大写)
        展现全部可用-X选项
 
-Xbatch 
        禁用后台编译.默认状况下,JVM将该方法编译为后台任务,在解释器模式下运行该方法,直到后台编译完成。 -Xbatch标志禁用后台编译,以便编译全部方法做为前台任务继续执行直至完成。
        这个选项也至关于:
 
-XX:-BackgroundCompilation
 

 

-Xbootclasspath : path
        指定由分号(;)分隔的目录,JAR文件和ZIP存档的列表,以搜索引导类文件。 这些用于代替JDK中包含的引导类文件。
        不要部署使用此选项的应用程序来覆盖rt.jar中的类,由于这违反了JRE二进制代码许可证。
 
-Xbootclasspath/a : path
        指定由分号(;)分隔的目录,JAR文件和ZIP存档的列表,以附加到默认引导程序类路径的末尾。
        不要部署使用此选项的应用程序来覆盖rt.jar中的类,由于这违反了JRE二进制代码许可证。
 
-Xbootclasspath/p : path
        指定由分号(;)分隔的目录,JAR文件和ZIP存档的列表,以预先添加到默认引导程序类路径的前面。
        不要部署使用此选项的应用程序来覆盖rt.jar中的类,由于这违反了JRE二进制代码许可证。
 
-Xcheck : jni
        对Java Native Interface(JNI)函数执行其余检查。具体来讲,它在处理JNI请求以前验证传递给JNI函数的参数和运行时环境数据。遇到的任何无效数据都代表本机代码存在问题,在这种状况下,JVM将以没法恢复的错误终止。使用此选项时,预计性能会降低。
 
-Xcomp
        在第一次调用时强制编译方法。默认状况下,客户端VM(-client)执行1,000个已解释的方法调用,服务器VM(-server)执行10,000个已解释的方法调用以收集有效编译的信息。指定-Xcomp选项会禁用已解释的方法调用,从而以牺牲效率为代价来提升编译性能。
        您还可使用-XX:CompileThreshold选项在编译以前更改已解释的方法调用的数量。
        表示全部字节码都首先被编译成本地代码,而后再执行。
        JIT编译器的模式之一
 
-Xdebug
        什么也没作。提供向后兼容性。
 
-Xdiag
        显示其余诊断消息。
 
-Xfuture
        启用严格的类文件格式检查,以强制与类文件格式规范紧密一致。鼓励开发人员在开发新代码时使用此标志,由于更严格的检查将成为将来版本中的默认值。
 
-Xint
        以仅解释模式运行应用程序。禁用对本机代码的编译,而且解释器将执行全部字节码。暂时(JIT)编译器提供的性能优点在此模式下不存在。
        表示禁用JIT,全部字节码都被解释执行,这个模式的速度最慢的。
        JIT编译器的模式之一
 
-Xinternalversion
        显示比-version选项更详细的JVM版本信息,而后退出。
-Xloggc:filename
        设置应将重定向的GC事件信息重定向到的文件以进行日志记录。 写入此文件的信息相似于-verbose:gc的输出,其中包含自每一个记录事件以前的第一个GC事件以来通过的时间。 若是二者都使用相同的java命令,则-Xloggc选项会覆盖-verbose:gc。
        例:
 
-Xloggc:garbage-collection.log
 
-Xmaxjitcodesize=size
        指定JIT编译代码的最大代码高速缓存大小(以字节为单位)。 附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。 默认的最大代码缓存大小为240 MB; 
        若是使用-XX:- TieredCompilation选项禁用分层编译,则默认大小为48 MB:
 

-Xmaxjitcodesize=240m
 
        此选项等效于-XX:ReservedCodeCacheSize。

-Xmixed
        除了热方法以外,解释器执行全部字节码,热方法被编译为本机代码。
        默认模式,让JIT根据程序运行的状况,有选择地将经常使用代码编译成本地代码。(如:被大量循环的代码)
        JIT编译器的模式之一
 
-Xmnsize
        设置年轻代(花园?托儿所?nursery我不知道怎么翻译)的堆的初始和最大大小(以字节为单位)。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。
        堆的年轻代区域用于新对象。 GC在该区域比在其余区域更频繁地进行。若是年轻一代的规模过小,那么将会进行大量的小型垃圾收集。若是大小太大,则只执行完整的垃圾收集,这可能须要很长时间才能完成。 Oracle建议您将年轻代的大小保持在整个堆大小的一半到四分之一之间。
        如下示例显示如何使用各类单位将年轻代的初始和最大大小设置为256 MB:
 
-Xmn256m
-Xmn262144k
-Xmn268435456
 
         您可使用-XX : NewSize设置初始大小而使用-XX : MaxNewSize来设置最大大小,而不是-Xmn选项来设置年轻代的堆的初始大小和最大大小。
 
-Xmssize
        设置堆的初始大小(以字节为单位)。 该值必须是1024的倍数且大于1 MB。 附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。
        如下示例显示如何使用各类单位将分配的内存大小设置为6 MB:
 
-Xms6291456
-Xms6144k
-Xms6m

 

 
        若是未设置此选项,则初始大小将设置为为旧代和年轻代分配的大小的总和。 可使用-Xmn选项或-XX:NewSize选项设置年轻代的堆的初始大小。
 
-Xmxsize
        指定内存分配池的最大大小(以字节为单位),以字节为单位。 该值必须是1024的倍数且大于2 MB。 附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。 根据系统配置在运行时选择默认值。 对于服务器部署,-Xms和-Xmx一般设置为相同的值。 请参阅 http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html  上的Java SE HotSpot虚拟机垃圾收集调整指南中的“人机工程学( Ergonomics)”部分。
        如下示例显示如何使用各类单位将分配的内存的最大容许大小设置为80 MB:
 
 
-Xmx83886080
-Xmx81920k
-Xmx80m
        -Xmx选项等效于-XX : MaxHeapSize。
 
-Xnoclassgc
        禁用类的垃圾收集(GC)[Disables garbage collection (GC) of classes]。 这能够节省一些GC时间,从而缩短应用程序运行期间的中断。
        在启动时指定-Xnoclassgc时,应用程序中的类对象将在GC期间保持不变,并始终被视为实时。 这可能致使更多的内存被永久占用,若是不当心使用,将致使内存不足异常
 
-Xprof
        配置正在运行的程序并将分析数据发送到标准输出。此选项做为在程序开发中有用的实用程序提供,不适用于生产系统。
 
-Xrs
        减小JVM对操做系统信号的使用。
        关闭Hooks,经过在关闭时运行用户清理代码(例如关闭数据库链接)来启用Java应用程序的有序关闭,即便JVM忽然终止也是如此。
        JVM监视控制台控制事件,以实现意外终止的关闭挂钩。具体来讲,JVM注册一个控制台控制处理程序,它启动shutdown-hook处理,并为CTRL_C_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT和CTRL_SHUTDOWN_EVENT返回TRUE。
        JVM使用相似的机制来实现转储线程堆栈的功能以进行调试。 JVM使用CTRL_BREAK_EVENT执行线程转储。
        若是JVM做为服务运行(例如,做为Web服务器的servlet引擎),则它能够接收CTRL_LOGOFF_EVENT但不该启动关闭,由于操做系统实际上不会终止该进程。为避免可能的干扰,可使用-Xrs选项。 使用-Xrs选项时,JVM不会安装控制台控制处理程序,这意味着它不会监视或处理CTRL_C_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT或CTRL_SHUTDOWN_EVENT。
        指定-Xrs有两个后果:
            Ctrl + Break线程转储不可用。
            用户代码负责引导关闭挂钩运行,例如,在终止JVM时调用System.exit()。
 
-Xshare : mode
        设置类数据共享(CDS)模式。此选项的可能模式参数包括如下内容:
        auto
            尽量使用CDS。这是Java HotSpot 32位客户端VM的默认值。
          on
            须要使用CDS。若是没法使用类数据共享,则打印错误消息并退出。
         off
            不要使用CDS。这是Java HotSpot 32位服务器VM,Java HotSpot 64位客户端VM和Java HotSpot 64位服务器VM的默认值。
         dump
            手动生成CDS存档。按照“设置类路径”中的说明指定应用程序类路径。
        您应该使用每一个新的JDK版本从新生成CDS存档。
 
-XshowSettings : category
        显示设置并继续。此选项的可能类别参数包括如下内容:
          all
                显示全部类别的设置。这是默认值。
         locale
                显示与区域设置相关的设置。
        properties
                显示与系统属性相关的设置。
          vm
                显示JVM的设置。
        配置正在运行的程序并将分析数据发送到标准输出。此选项做为在程序开发中有用的实用程序提供,不适用于生产系统。
 
-Xsssize
        设置线程堆栈大小(以字节为单位)。附加字母k或K表示KB,m或M表示MB,g或G表示GB。默认值取决于虚拟内存。
        如下示例以不一样为单位将线程堆栈大小设置为1024 KB:
-Xss1m
-Xss1024k
-Xss1048576
        此选项等效于-XX:ThreadStackSize。
 
-Xverify:mode
        设置字节码验证器的模式。字节码验证可确保正确造成类文件,并知足“Java虚拟机规范”中第4.10节“类文件验证”中列出的约束。
        不要关闭验证,由于这会减小Java提供的保护,并可能因为格式错误的类文件而致使问题。
        类加载:加载-验证-准备-解析-初始化,这里是其中一个阶段:验证阶段
        此选项的可能模式参数包括如下内容:
remote
    验证引导类加载器未加载的全部字节码。若是未指定-Xverify选项,则这是默认行为。
all
    启用全部字节码的验证。
none
    禁用全部字节码的验证。使用-Xverify:none不受支持。
 

Advanced Runtime Options/高级运行时选项


这些选项控制Java HotSpot VM的运行时行为。
 
-XX:+CheckEndorsedAndExtDirs
        若是Java命令使用endorsed-standards override机制或扩展机制,则启用该选项以防止Java命令运行Java应用程序。此选项经过检查如下内容来检查应用程序是否正在使用这些机制之一:
                   设置了java.ext.dirs或java.endorsed.dirs系统属性。
lib / endorsed目录存在且不为空。
lib / ext目录包含除JDK以外的任何JAR文件。
系统范围的特定于平台的扩展目录包含任何JAR文件。
 
-XX:+ DisableAttachMechanism
        启用禁用容许工具链接到JVM的机制的选项。默认状况下,此选项被禁用,这意味着启用了附加机制,您可使用jcmd,jstack,jmap和jinfo等工具。
 
-XX:ErrorFile=filename
        指定发生不可恢复的错误时写入错误数据的路径和文件名。默认状况下,此文件在当前工做目录中建立,并命名为hs_err_pidpid.log,其中pid是致使错误的进程的标识符。如下示例显示如何设置默认日志文件(请注意,进程的标识符指定为%p):
 -XX:ErrorFile=/hs_err_pid%p.log

 


 
 
如下示例显示如何将错误日志文件设置为C:/log/java/java_error.log:

-XX:ErrorFile= C:/log/java/java_error.log
 
        若是没法在指定目录中建立文件(因为空间不足,权限问题或其余问题),则会在操做系统的临时目录中建立该文件。临时目录由TMP环境变量的值指定;若是未定义该环境变量,则使用TEMP环境变量的值。
 
-XX:+FailOverToOldVerifier
        当新类型检查程序失败时,启用对旧验证程序的自动故障转移。默认状况下,此选项被禁用,而且对于具备最新字节码版本的类,它将被忽略(即,视为已禁用)。您能够为具备旧版字节码的类启用它。
 
-XX:+FlightRecorder
        容许在应用程序运行时使用Java Flight Recorder(JFR)。这是一个与-XX:+ UnlockCommercialFeatures选项配合使用的商业功能,以下所示:

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder

 

 
 
        若是未提供此选项,则仍可经过提供相应的jcmd诊断命令在正在运行的JVM中启用Java Flight Recorder。
 
-XX:-FlightRecorder
    在应用程序运行时禁用Java Flight Recorder(JFR)。这是一个与-XX:+ UnlockCommercialFeatures选项配合使用的商业功能,以下所示:

java -XX:+ UnlockCommercialFeatures -XX:-FlightRecorder

 

         若是提供此选项,则没法在正在运行的JVM中启用Java Flight Recorder。
 
-XX:FlightRecorderOptions=parameter=value
        设置控制JFR行为的参数。这是一个与-XX:+UnlockCommercialFeatures选项配合使用的商业功能。只有在启用JFR时(即指定了-XX:+FlightRecorder选项),才能使用此选项。
        如下列表包含全部可用的JFR参数:

defaultrecording={true|false}

 

 
 
        指定录制是连续背景录制仍是在有限时间内运行。默认状况下,此参数设置为false(录制在限定时间内运行)。要使录制连续运行,请将参数设置为true。
 

disk={true|false}

 

 
 
        指定JFR是否应将连续记录写入磁盘。默认状况下,此参数设置为false(禁用连续录制到磁盘)。要启用它,请将参数设置为true,并设置defaultrecording = true。
 

dumponexitpath=path

 

 
 
        指定是否应生成JFR数据的转储文件

dumponexit={true|false}

 

 
 
        指定当JVM以受控方式终止时是否应生成JFR数据的转储文件。默认状况下,此参数设置为false(不会生成退出时的转储文件)。要启用它,请将参数设置为true,并设置defaultrecording = true。
        转储文件将写入dumponexitpath参数定义的位置。

dumponexitpath=path

 

 
 
        若是设置dumponexit = true参数,则指定JVM数据的转储文件的路径和名称,该数据是在受控方式JVM退出时建立的。仅当您还设置defaultrecording = true时,设置路径才有意义。
        若是指定的路径是目录,则JVM会分配一个显示建立日期和时间的文件名。若是指定的路径包含文件名,而且该文件已存在,则JVM经过将日期和时间戳附加到指定的文件名来建立新文件。
 

globalbuffersize=size

 

 
 
        指定用于数据保留的主内存总量(以字节为单位)。附加k或K,以KB为单位指定大小,m或M指定大小(MB,g或G)以指定大小(以GB为单位)。默认状况下,大小设置为462848字节。

loglevel={quiet|error|warning|info|debug|trace}

 

 
 
        指定JFR写入日志文件的数据量。默认状况下,它设置为info。

maxage=time

 

 
 
        指定要为默认录制保留的磁盘数据的最长期限。附加s指定以秒为单位的时间,m表示分钟,h表示小时,d表示天(例如,指定30秒表示30秒)。默认状况下,最大年龄设置为15分钟(15m)。
         仅当您设置disk = true参数时,此参数才有效。
     

maxchunksize=size

 

 
 
        指定记录中数据块的最大大小(以字节为单位)。附加k或K,以KB为单位指定大小,m或M指定大小(MB,g或G)以指定大小(以GB为单位)。默认状况下,数据块的最大大小设置为12 MB。
 
maxsize=size

 


 
 
        指定要为默认记录保留的磁盘数据的最大大小(以字节为单位)。附加k或K,以KB为单位指定大小,m或M指定大小(MB,g或G)以指定大小(以GB为单位)。默认状况下,磁盘数据的最大大小不受限制,此参数设置为0。
         仅当您设置disk = true参数时,此参数才有效。
 

 
repository=path

 

 
 
        指定临时磁盘存储的存储库(目录)。默认状况下,使用系统的临时目录。
 

 
samplethreads={true|false}

 

 
 
        指定是否启用线程采样。仅当采样事件与此参数一块儿启用时,才会进行线程采样。默认状况下,启用此参数。
 

settings=path

 

 
 
        指定事件设置文件的路径和名称(类型为JFC)。默认状况下,使用default.jfc文件,该文件位于JAVA_HOME / jre / lib / jfr中。
 

stackdepth=depth

 

 
 
        JFR的堆栈跟踪堆栈深度。默认状况下,深度设置为64个方法调用。最大值为2048,最小值为1。
 

 
threadbuffersize=size

 

 
 
        指定每线程本地缓冲区大小(以字节为单位)。附加k或K,以KB为单位指定大小,m或M指定大小(MB,g或G)以指定大小(以GB为单位)。此参数的较高值容许更多数据收集而不会争用将其刷新到全局存储。它能够在线程丰富的环境中增长应用程序占用空间。默认状况下,本地缓冲区大小设置为5 KB。
        您能够经过用逗号分隔多个参数的值来指定它们。例如,要指示JFR将连续记录写入磁盘,并将数据块的最大大小设置为10 MB,请指定如下内容:

-XX:FlightRecorderOptions=defaultrecording=true,disk=true,maxchunksize=10M
 
-XX:LargePageSizeInBytes=size
        在Solaris上,设置用于Java堆的大页的最大大小(以字节为单位)。 size参数必须是2的幂(2,4,8,16,...)。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。默认状况下,大小设置为0,这意味着JVM会自动选择大页面的大小。
        如下示例说明如何将大页面大小设置为4兆字节(MB):
 

 
-XX:LargePageSizeInBytes=4m

 

 
 
 
-XX:MaxDirectMemorySize=size
        设置New I/O(java.nio包)直接缓冲区分配的最大总大小(以字节为单位)。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。默认状况下,大小设置为0,这意味着JVM会自动选择NIO直接缓冲区分配的大小。
        如下示例说明如何以不一样单位将NIO大小设置为1024 KB:
 

-XX:MaxDirectMemorySize=1m
-XX:MaxDirectMemorySize=1024k
-XX:MaxDirectMemorySize=1048576

 

 
 
 
-XX:NativeMemoryTracking=mode
        指定用于跟踪JVM本机内存使用状况的模式。此选项的可能模式参数包括如下内容:
off
    不跟踪JVM本机内存使用状况。若是未指定-XX:NativeMemoryTracking选项,则这是默认行为。
summary
    仅跟踪JVM子系统的内存使用状况,例如Java堆,类,代码和线程。
detail
    除了跟踪JVM子系统的内存使用状况外,还能够跟踪各个CallSite,单个虚拟内存区域及其已提交区域的内存使用状况。
 
-XX:ObjectAlignmentInBytes=alignment
        设置Java对象的内存对齐方式(以字节为单位)。默认状况下,该值设置为8个字节。指定的值应为2的幂,而且必须在8和256(含)的范围内。此选项可使用具备大Java堆大小的压缩指针。
        堆大小限制(以字节为单位)计算以下:
 
4GB * ObjectAlignmentInBytes
 
        注意:随着对齐值的增长,对象之间未使用的空间也会增长。所以,您可能没有意识到使用具备大型Java堆大小的压缩指针会带来任何好处。
 
-XX:OnError=string
        设置自定义命令或一系列以分号分隔的命令,以便在发生不可恢复的错误时运行。若是字符串包含空格,则必须用引号括起来。
        如下示例显示如何使用-XX:OnError选项运行userdump.exe实用程序,以便在出现没法恢复的错误时获取崩溃转储(%p指定当前进程):
 

-XX:OnError="userdump.exe %p"

 

 
 
        上面的示例假定在PATH环境变量中指定了userdump.exe实用程序的路径。
 
-XX:OnOutOfMemoryError=string
        设置自定义命令或一系列以分号分隔的命令,以便在首次抛出OutOfMemoryError异常时运行。若是字符串包含空格,则必须用引号括起来。有关命令字符串的示例,请参阅-XX:OnError选项的说明。
 
-XX:+PerfDataSaveToFile
        若是启用,则在Java应用程序退出时保存jstat(1)二进制数据。此二进制数据保存在名为hsperfdata_ <pid>的文件中,其中<pid>是您运行的Java应用程序的进程标识符。使用jstat显示此文件中包含的性能数据,以下所示:
 

jstat -class file:///<path>/hsperfdata_<pid>
jstat -gc file:///<path>/hsperfdata_<pid>

 

 
-XX:+PrintCommandLineFlags
        容许打印出如今命令行上的符合人体工程学选择的JVM标志。了解JVM设置的人体工程学值(例如堆空间大小和选定的垃圾收集器)可能颇有用。默认状况下,禁用此选项而且不打印标志。
 
-XX:+PrintNMTStatistics
        启用本机内存跟踪时,容许在JVM出口处打印收集的本机内存跟踪数据(请参阅--XX:NativeMemoryTracking)。默认状况下,禁用此选项而且不打印本机内存跟踪数据。
 
-XX:+RelaxAccessControlCheck
        减小验证程序中访问控制检查的数量。默认状况下,此选项被禁用,对于具备最新字节码版本的类,它将被忽略(即,视为已禁用)。您能够为具备旧版字节码的类启用它。
 
-XX:+ResourceManagement
        在应用程序的运行时期间启用资源管理。
        这是一项商业功能,须要您还指定 -XX:+UnlockCommercialFeatures 选项,以下所示:
 

java -XX:+UnlockCommercialFeatures -XX:+ResourceManagement

 

 
 
 
-XX:ResourceManagementSampleInterval=value (milliseconds)
        设置控制资源管理测量的采样间隔的参数,以毫秒为单位。
        仅当启用资源管理(即指定了 -XX:+ResourceManagement 选项)时,才能使用此选项。
 
-XX:SharedArchiveFile=path
        指定类数据共享(CDS)归档文件的路径和名称
 
-XX:SharedClassListFile=file_name
        指定包含要存储在类数据共享(CDS)存档中的类文件名称的文本文件。此文件包含每行一个类文件的全名,斜杠(/)替换点(。)除外。例如,要指定类java.lang.Object和hello.Main,请建立一个包含如下两行的文本文件:
 

 
java/lang/Object
hello/Main

 

 
 
        您在此文本文件中指定的类文件应包含应用程序经常使用的类。它们能够包括应用程序,扩展或引导类路径中的任何类。
 
-XX:+ShowMessageBoxOnError
        当JVM遇到没法恢复的错误时,容许显示对话框。这能够防止JVM退出并使进程保持活动状态,以便您能够将调试器附加到它以调查错误缘由。默认状况下,禁用此选项。
 
-XX:StartFlightRecording=parameter=value
        启动Java应用程序的JFR记录。这是一个与-XX:+UnlockCommercialFeatures选项配合使用的商业功能。此选项等同于在运行时期间启动记录的JFR.start诊断命令。您能够在开始JFR录制时设置如下参数:
compress={true|false}
    指定是否使用gzip文件压缩实用程序压缩磁盘上的JFR记录日志文件(JFR类型)。仅当指定了filename参数时,此参数才有效。默认状况下,它设置为false(记录未压缩)。要启用压缩,请将参数设置为true。
defaultrecording={true|false}
    指定录制是连续背景录制仍是在有限时间内运行。默认状况下,此参数设置为false(录制在限定时间内运行)。要使录制连续运行,请将参数设置为true。
delay=time
    指定Java应用程序启动时间和记录开始之间的延迟。附加s以秒为单位指定时间,m表示分钟,h表示小时,d表示天(例如,指定10米表示10分钟)。默认状况下,没有延迟,此参数设置为0。
dumponexit={true|false}
    指定当JVM以受控方式终止时是否应生成JFR数据的转储文件。默认状况下,此参数设置为false(不会生成退出时的转储文件)。要启用它,请将参数设置为true。
    转储文件将写入filename参数定义的位置。
    例:

-XX:StartFlightRecording=name=test,filename=D:\test.jfr,dumponexit=true
 

 

 
duration=time
    指定录制的持续时间。附加s以秒为单位指定时间,m表示分钟,h表示小时,d表示天(例如,指定5h表示5小时)。默认状况下,持续时间不受限制,此参数设置为0。
filename=path
    指定JFR记录日志文件的路径和名称。
name=identifier
    指定JFR记录的标识符。默认状况下,它设置为Recording x。
maxage=time
    指定要为默认录制保留的磁盘数据的最长期限。附加s指定以秒为单位的时间,m表示分钟,h表示小时,d表示天(例如,指定30秒表示30秒)。默认状况下,最大年龄设置为15分钟(15m)。
maxsize=size
    指定要为默认记录保留的磁盘数据的最大大小(以字节为单位)。附加k或K,以KB为单位指定大小,m或M指定大小(MB,g或G)以指定大小(以GB为单位)。默认状况下,磁盘数据的最大大小不受限制,此参数设置为0。
settings=path
    指定事件设置文件的路径和名称(类型为JFC)。默认状况下,使用default.jfc文件,该文件位于JAVA_HOME / jre / lib / jfr中。
您能够经过用逗号分隔多个参数的值来指定它们。例如,要将记录保存到当前工做目录中的test.jfr,并指示JFR压缩日志文件,请指定如下内容:
 

 
-XX:StartFlightRecording=filename=test.jfr,compress=true

 

 
 
 -XX:ThreadStackSize=size
        设置线程堆栈大小(以字节为单位)。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。默认值取决于虚拟内存。
        如下示例显示如何以不一样单位将线程堆栈大小设置为1024 KB:
 

-XX:ThreadStackSize=1m
-XX:ThreadStackSize=1024k
-XX:ThreadStackSize=1048576
        此选项等效于-Xss。
 
-XX:+TraceClassLoading
        容许在加载类时跟踪类。默认状况下,禁用此选项而且不跟踪类。
 
-XX:+TraceClassLoadingPreorder
        容许按引用顺序跟踪全部已加载的类。默认状况下,禁用此选项而且不跟踪类。
 
-XX:+TraceClassResolution
        容许跟踪常量池分辨率。默认状况下,禁用此选项
 
-XX:+TraceClassUnloading
        容许在卸载类时跟踪类。默认状况下,禁用此选项而且不跟踪类。
 
-XX:+TraceLoaderConstraints
        容许跟踪加载器约束记录。默认状况下,禁用此选项而且不跟踪加载程序约束记录。
 
-XX:+UnlockCommercialFeatures
        容许使用商业功能。商业功能包含在Oracle Java SE Advanced或Oracle Java SE Suite包中,如Java SE产品页面上所定义,网址为 http://www.oracle.com/technetwork/java/javase/terms/products/index.html 
        默认状况下,此选项被禁用,JVM在没有商业功能的状况下运行。一旦为JVM进程启用了它们,就没法禁用它们用于该进程。
        若是未提供此选项,则仍可以使用相应的jcmd诊断命令在正在运行的JVM中解锁商业功能。
 
-XX:+UseAppCDS
        启用应用程序类数据共享(AppCDS)。要使用AppCDS,还必须在CDS转储时间(请参阅-Xshare:dump选项)和应用程序运行时间期间指定选项-XX:SharedClassListFile和-XX:SharedArchiveFile的值。
        这是一项商业功能,须要您还指定-XX:+UnlockCommercialFeatures选项。这也是一个实验性的特征;它可能在未来的版本中发生变化
 
-XX:-UseBiasedLocking
        禁用使用偏置锁定。一些具备大量无竞争同步的应用程序能够在启用此标志的状况下得到显着的加速,而具备某些锁定模式的应用程序可能会看到减速。有关偏置锁定技术的更多信息,请参阅Java调优白皮书中的示例,网址为 http://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5 
        默认状况下,启用此选项。
 
-XX:-UseCompressedOops
        禁用压缩指针的使用。默认状况下,启用此选项,并在Java堆大小小于32 GB时使用压缩指针。启用此选项时, 对象引用表示为32位偏移而不是64位指针,这一般会在运行Java堆大小小于32 GB的应用程序时提升性能。 此选项仅适用于64位JVM
        当Java堆大小大于32GB时,也可使用压缩指针。请参见-XX:ObjectAlignmentInBytes选项。
 
-XX:+UseLargePages
        容许使用大页面内存。默认状况下,禁用此选项而且不使用大页面内存。
 
-XX:+UseMembar
        容许在线程状态转换上发布membars。默认状况下,在除ARM服务器以外的全部平台上都禁用此选项。 (建议您不要在ARM服务器上禁用此选项。)
 
-XX:+UsePerfData
        启用perfdata功能。默认状况下启用此选项以容许JVM监视和性能测试。禁用它会禁止建立hsperfdata_userid目录。要禁用perfdata功能,请指定-XX:-UsePerfData。
 
-XX:+AllowUserSignalHandlers
        容许应用程序安装信号处理程序。默认状况下,禁用此选项,而且不容许应用程序安装信号处理程序。
 

高级JIT编译器选项/Advanced JIT Compiler Options


这些选项控制Java HotSpot VM执行的动态即时(JIT)编译。
 
-XX:+AggressiveOpts
        容许使用积极的性能优化功能,这些功能有望在即将发布的版本中成为默认功能。默认状况下,禁用此选项而且不使用实验性能功能。
 
-XX:AllocateInstancePrefetchLines=lines
        设置在实例分配指针以前预取的行数。默认状况下,预取的行数设置为1:
 
-XX:AllocateInstancePrefetchLines=1
        只有Java HotSpot Server VM支持此选项。
 
-XX:AllocatePrefetchDistance=size
        设置对象分配的预取距离的大小(以字节为单位)。将从最后分配的对象的地址开始预取将要使用新对象的值写入的内存。每一个Java线程都有本身的分配点。
        负值表示基于平台选择预取距离。正值是预取的字节数。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。默认值设置为-1。
        如下示例显示如何将预取距离设置为1024字节:
 

-XX:AllocatePrefetchDistance=1024
        只有Java HotSpot Server VM支持此选项。
 
-XX:AllocatePrefetchInstr=instruction
        将预取指令设置为在分配指针以前预取。只有Java HotSpot Server VM支持此选项。可能的值为0到3.值后面的实际指令取决于平台。默认状况下,预取指令设置为0:
 

-XX:AllocatePrefetchInstr=0
        只有Java HotSpot Server VM支持此选项。
 
-XX:AllocatePrefetchLines=lines
        使用编译代码中生成的预取指令设置在最后一次对象分配后要加载的高速缓存行数。若是最后分配的对象是实例,则默认值为1;若是是数组,则默认值为3。
        如下示例显示如何将加载的缓存行数设置为5:
 

-XX:AllocatePrefetchLines=5

 

 
        只有Java HotSpot Server VM支持此选项。
 
-XX:AllocatePrefetchStepSize=size
        设置顺序预取指令的步长(以字节为单位)。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。默认状况下,步长设置为16个字节:
 

-XX:AllocatePrefetchStepSize=16

 

 
 
        只有Java HotSpot Server VM支持此选项。
 
-XX:AllocatePrefetchStyle=style
        为预取指令设置生成的代码样式。 style参数是0到3之间的整数:
0
不要生成预取指令。
1
每次分配后执行预取指令。这是默认参数。
2
使用线程局部分配块(TLAB)水印指针来肯定什么时候执行预取指令
3
在SPARC上使用BIS指令进行分配预取。
        只有Java HotSpot Server VM支持此选项。
 
-XX:+BackgroundCompilation
启用后台编译。 默认状况下启用此选项。 要禁用后台编译,请指定-XX:-BackgroundCompilation(这至关于指定-Xbatch)。
 
-XX:CICompilerCount=threads
设置用于编译的编译器线程数。 默认状况下,服务器JVM的线程数设置为2,客户端JVM的线程数设置为1,若是使用分层编译,则会扩展为核心数。 如下示例显示如何将线程数设置为2:
 

-XX:CICompilerCount=2

 

 
 
 
-XX:CodeCacheMinimumFreeSpace=size
  设置编译所需的最小可用空间(以字节为单位)。 附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。 当剩余小于最小可用空间时,编译中止。 默认状况下,此选项设置为500 KB。 如下示例显示如何将最小可用空间设置为1024 MB:
 
-XX:CodeCacheMinimumFreeSpace=1024m

 

 
 
-XX:CompileCommand=command,method[,option]
        指定要对方法执行的命令。例如,要从编译中排除String类的indexOf()方法,请使用如下命令:
 
-XX:CompileCommand=exclude,java/lang/String.indexOf

 

 
 
    请注意,指定了完整的类名,包括用斜杠(/)分隔的全部包和子包。为了便于剪切和粘贴操做,还可使用-XX:+PrintCompilation和-XX:+ LogCompilation选项生成的方法名称格式:
 
-XX:CompileCommand=exclude,java.lang.String::indexOf

 

 
 
        若是在没有签名的状况下指定方法,则该命令将应用于具备指定名称的全部方法。可是,您也能够在类文件格式中指定方法的签名。在这种状况下,您应该将参数括在引号中,不然shell会将分号视为命令end。例如,若是要仅排除String类的indexOf(String)方法,请使用如下命令:
 

-XX:CompileCommand="exclude,java/lang/String.indexOf,(Ljava/lang/String;)I"

 

 
 
        您还可使用星号(*)做为类和方法名称的通配符。例如,要排除编译全部类中的全部indexOf()方法,请使用如下命令:
 

 
-XX:CompileCommand=exclude,*.indexOf

 

 
 
        逗号和句点是空格的别名,使得经过shell传递编译器命令更容易。您能够经过将参数括在引号中,使用空格做为分隔符将参数传递给-XX:CompileCommand:
 

-XX:CompileCommand="exclude java/lang/String indexOf"

 

 
        请注意,在使用-XX:CompileCommand选项解析在命令行上传递的命令以后,JIT编译器会从.hotspot_compiler文件中读取命令。您能够向此文件添加命令,也可使用-XX:CompileCommandFile选项指定其余文件。
        要添加多个命令,请屡次指定-XX:CompileCommand选项,或使用换行符分隔符(\ n)分隔每一个参数。可使用如下命令:
break
    在调试JVM时设置断点,以便在编译指定方法的开始时中止。
compileonly
除了指定的方法以外,从编译中排除全部方法。做为替代方法,您可使用-XX:CompileOnly选项,该选项容许指定多个方法。
dontinline
防止内联指定的方法。
exclude
从编译中排除指定的方法。
help
    打印-XX:CompileCommand选项的帮助消息。
inline
    尝试内联指定的方法。
log
    排除除指定方法以外的全部方法的编译日志记录(使用-XX:+ LogCompilation选项)。默认状况下,对全部已编译的方法执行日志记录。
option
    此命令可用于将JIT编译选项传递给指定的方法以代替最后一个参数(选项)。编译选项在方法名称后面的末尾设置。例如,要为StringBuffer类的append()方法启用BlockLayoutByFrequency选项,请使用如下命令:

-XX:CompileCommand=option,java/lang/StringBuffer.append,BlockLayoutByFrequency

 

 
    您能够指定多个编译选项,以逗号或空格分隔。
print
    在编译指定方法后打印生成的汇编代码。
quiet
不要打印编译命令。默认状况下,打印使用-XX:CompileCommand选项指定的命令;例如,若是从编译中排除String类的indexOf()方法,则如下内容将打印到标准输出:
 

CompilerOracle: exclude java/lang/String.indexOf

 

 
 
                    您能够经过在其余 -XX:CompileCommand选项以前指定-XX:CompileCommand=quiet 选项来抑制此操做。
 
-XX:CompileCommandFile=filename
        设置从中读取JIT编译器命令的文件。默认状况下,.hotspot_compiler文件用于存储JIT编译器执行的命令。
        命令文件中的每一行表明一个命令,一个类名和一个使用该命令的方法名。例如,此行打印String类的toString()方法的汇编代码:
 

 
print java/lang/String toString
        有关为JIT编译器指定要对方法执行的命令的更多信息,请参阅-XX:CompileCommand选项。
 
-XX:CompileOnly=methods
        设置应限制编译的方法列表(以逗号分隔)。仅编译指定的方法。使用完整的类名(包括包和子包)指定每一个方法。例如,要仅编译String类的length()方法和List类的size()方法,请使用如下命令:
 
-XX:CompileOnly=java/lang/String.length,java/util/List.size

 

        请注意,指定了完整的类名,包括用斜杠(/)分隔的全部包和子包。为了便于剪切和粘贴操做,还可使用-XX:+ PrintCompilation和-XX:+ LogCompilation选项生成的方法名称格式:
 
-XX:CompileOnly=java.lang.String::length,java.util.List::size

 

 
 
        虽然不支持通配符,但您只能指定类或包名称来编译该类或包中的全部方法,而且只指定在任何类中使用此名称编译方法的方法:
 
-XX- :CompileOnly=java/lang/String
-XX:CompileOnly=java/lang
-XX:CompileOnly=.length

 

 
 
 
-XX:CompileThreshold=invocations
        设置编译前解释的方法调用的数量。默认状况下,在服务器JVM中,JIT编译器执行10,000次解释方法调用以收集有效编译的信息。对于客户端JVM,默认设置为1,500次调用。启用分层编译时,将忽略此选项;请参阅选项-XX:+ TieredCompilation。如下示例显示如何将解释的方法调用数设置为5,000:
 

-XX:CompileThreshold=5000

 

 
 
        经过指定-Xcomp选项,能够在编译以前彻底禁用Java方法的解释。
 
-XX:+DoEscapeAnalysis
        容许使用转义分析。默认状况下启用此选项。要禁用转义分析,请指定-XX:-DoEscapeAnalysis。只有Java HotSpot Server VM支持此选项。
 
-XX:InitialCodeCacheSize=size
        设置初始代码高速缓存大小(以字节为单位)。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。默认值设置为500 KB。初始代码高速缓存大小应不小于系统的最小内存页大小。如下示例显示如何将初始代码高速缓存大小设置为32 KB:
 

-XX:InlineSmallCode=1000

 

 
 
-XX:+Inline
        启用方法内联。默认状况下启用此选项以提升性能。要禁用方法内联,请指定-XX:-Inline。
 
-XX:InlineSmallCode=size
        为编译好的要内联方法设置最大的code size,(以字节为单位)。 附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。 只有内联小于指定大小的编译方法才会被内联。 默认状况下,最大代码大小设置为1000字节:

-XX:InlineSmallCode=1000

 

 
 
 
-XX:+LogCompilation
        容许将编译活动记录到当前工做目录中名为hotspot.log的文件中。您可使用-XX:LogFile选项指定其余日志文件路径和名称。
        默认状况下,禁用此选项而且不记录编译活动。 -XX:+ LogCompilation选项必须与解锁诊断JVM选项的-XX:UnlockDiagnosticVMOptions选项一块儿使用。
        每次使用-XX:+PrintCompilation选项编译方法时,均可以启用详细诊断输出,并在控制台上打印一条消息。
 
-XX:MaxInlineSize=size
        设置要内联的方法的最大字节码大小(以字节为单位)。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。默认状况下,最大字节码大小设置为35个字节:
 

-XX:MaxInlineSize=35

 

 
 
 
-XX:MaxNodeLimit=nodes
        设置单个方法编译期间要使用的最大节点数。默认状况下,最大节点数设置为65,000:

   -XX:MaxNodeLimit = 65000

 

 
 
 
-XX:MaxTrivialSize=size
        设置要内联的简单方法的最大字节码大小(以字节为单位)。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。默认状况下,一个简单方法的最大字节码大小设置为6个字节:
 

-XX:MaxTrivialSize = 6

 

 
 
-XX:+OptimizeStringConcat
        启用字符串链接操做的优化。默认状况下启用此选项。要禁用字符串链接操做的优化,请指定-XX:-OptimizeStringConcat。只有Java HotSpot Server VM支持此选项。
 
-XX:+PrintAssembly
        经过使用外部disassembler.so库,能够为字节编码和本机方法打印汇编代码。这使您能够查看生成的代码,这能够帮助您诊断性能问题。
        默认状况下,禁用此选项而且不打印汇编代码。 -XX:+PrintAssembly选项必须与解锁诊断JVM选项的-XX:UnlockDiagnosticVMOptions选项一块儿使用。
 
-XX:+PrintCompilation
        每次编译方法时,经过向控制台打印消息,从JVM启用详细诊断输出。这使您能够查看实际编译的方法。默认状况下,禁用此选项而且不打印诊断输出。
        您还可使用-XX:+LogCompilation选项将编译活动记录到文件中。
 
-XX:+PrintInlining
        容许打印内联决策。这使您能够查看哪些方法被内联。
        默认状况下,禁用此选项而且不打印内联信息。-XX:+PrintInlining选项必须与解锁诊断JVM选项的-XX:+UnlockDiagnosticVMOptions选项一块儿使用。
 
-XX:ReservedCodeCacheSize=size
        设置JIT编译代码的最大代码缓存大小(以字节为单位)。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。默认的最大代码缓存大小为240 MB;若是使用-XX:-TieredCompilation选项禁用分层编译,则默认大小为48 MB。此选项的限制为2 GB;不然,会产生错误。最大代码缓存大小不该小于初始代码缓存大小;请参阅选项-XX:InitialCodeCacheSize。此选项等效于-Xmaxjitcodesize。
 
-XX:RTMAbortRatio=abort_ratio
        RTM停止比率指定为全部已执行RTM事务的百分比(%)。若是许多停止事务变得大于此比率,则编译后的代码将被去优化。启用-XX:+UseRTMDeopt选项时使用此比率。此选项的默认值为50.这意味着若是50%的全部事务都被停止,则编译后的代码将被去优化。
 
-XX:RTMRetryCount=number_of_retries
        RTM锁定代码将在停止或忙碌时重试此选项指定的次数,而后再回退到正常锁定机制。此选项的默认值为5.必须启用-XX:UseRTMLocking选项。
 
-XX:-TieredCompilation
        禁用分层编译。默认状况下,启用此选项。只有Java HotSpot Server VM支持此选项。
 
-XX:+UseAES
        为Intel,AMD和SPARC硬件启用基于硬件的AES内在函数。 Intel Westmere(2010及更新版本),AMD Bulldozer(2011及更新版本)以及SPARC(T4及更新版本)均为支持的硬件。 UseAES与UseAESIntrinsics一块儿使用。
 
-XX:+UseAESIntrinsics
        默认状况下启用UseAES和UseAESIntrinsics标志,仅支持Java HotSpot Server VM 32位和64位。 要禁用基于硬件的AES内在函数,请指定-XX:-UseAES -XX:-UseAESIntrinsics。 例如,要启用硬件AES,请使用如下标志:
 
-XX:+UseAES -XX:+UseAESIntrinsics

 

 
        要支持32位和64位的UseAES和UseAESIntrinsics标志,请使用-server选项来选择Java HotSpot Server VM。 客户端VM不支持这些标志。
 
-XX:+UseCodeCacheFlushing
        在关闭编译器以前启用刷新代码缓存。默认状况下启用此选项。要在关闭编译器以前禁用刷新代码缓存,请指定-XX:-UseCodeCacheFlushing。
 
-XX:+UseCondCardMark
        在更新卡表以前,能够检查卡是否已经标记。默认状况下禁用此选项,而且只应在具备多个套接字的计算机上使用此选项,从而提升严重依赖并发操做的Java应用程序的性能。只有Java HotSpot Server VM支持此选项。
 
-XX:+ UseRTMDeopt
        根据停止率自动调谐RTM锁定。此比率由-XX:RTMAbortRatio选项指定。若是停止事务的数量超过停止率,则包含锁定的方法将被取消优化并从新编译,并将全部锁定为正常锁定。默认状况下禁用此选项。必须启用-XX:+UseRTMLocking选项。
 
-XX:+UseRTMLocking
        为全部膨胀的锁生成受限制的事务性内存(RTM)锁定代码,使用正常的锁定机制做为回退处理程序。默认状况下禁用此选项。与RTM相关的选项仅适用于支持事务同步扩展(TSX)的x86 CPU上的Java HotSpot Server VM。
        RTM是英特尔TSX的一部分,它是x86指令集扩展,有助于建立多线程应用程序。 RTM引入了新指令XBEGIN,XABORT,XEND和XTEST。 XBEGIN和XEND指令包含一组做为事务运行的指令。若是在运行事务时未发现冲突,则会在XEND指令中一块儿提交内存和寄存器修改。 XABORT指令可用于显式停止事务,XEND指令用于检查事务中是否正在运行一组指令。
        当另外一个线程尝试访问同一事务时,对事务的锁定会膨胀,从而阻止最初未请求访问该事务的线程。 RTM要求在事务停止或失败时指定后备操做集。 RTM锁是一种委托给TSX系统的锁。
        RTM提升了在关键区域中具备低冲突的高竞争锁的性能(这是不能同时由多个线程访问的代码)。 RTM还提升了粗粒度锁定的性能,这在多线程应用程序中一般表现不佳。 (粗粒度锁定是长时间保持锁定以最小化获取和释放锁定的开销的策略,而细粒度锁定是经过仅在必要时锁定并尽快解锁来尝试实现最大并行性的策略。此外,对于不一样线程使用的轻度争用锁,RTM能够减小错误的缓存行共享,也称为缓存行乒乓。当来自不一样处理器的多个线程访问不一样资源但资源共享同一缓存行时,会发生这种状况。结果,处理器重复地使其余处理器的高速缓存行无效,这迫使它们从主存储器而不是它们的高速缓存读取。
 
-XX:+UseSHA
        为SPARC硬件启用SHA加密散列函数的基于硬件的内在函数。 UseSHA与UseSHA1Intrinsics,UseSHA256Intrinsics和UseSHA512Intrinsics选项一块儿使用。
        默认状况下启用UseSHA和UseSHA * Intrinsics标志,而且仅对SPARC T4及更高版本上的Java HotSpot Server VM 64位支持。
        仅当使用sun.security.provider.Sun提供程序进行SHA操做时,此功能才适用。
        要禁用全部基于硬件的SHA内部函数,请指定-XX:+UseSHA。要仅禁用特定的SHA内在函数,请使用相应的相应选项。例如:-XX:+UseSHA256Intrinsics。
 
-XX:+UseSHA1Intrinsics
        为SHA-1加密哈希函数启用内在函数。
 
-XX:+ UseSHA256Intrinsics
        为SHA-224和SHA-256加密哈希函数启用内在函数。
 
-XX:+UseSHA512Intrinsics
        为SHA-384和SHA-512加密散列函数启用内在函数。
 
-XX:+ UseSuperWord
        容许将标量操做转换为超级字操做。默认状况下启用此选项。要禁用将标量操做转换为超级字操做,请指定-XX:+UseSuperWord。只有Java HotSpot Server VM支持此选项。
 

高级可维护选项/Advanced Serviceability Options


这些选项提供了收集系统信息和执行大量调试的功能。
 
-XX:+HeapDumpOnOutOfMemory
        当抛出java.lang.OutOfMemoryError异常时,经过使用堆分析器(HPROF)将Java堆转储到当前目录中的文件。 您可使用-XX:HeapDumpPath选项显式设置堆转储文件路径和名称。 默认状况下,禁用此选项,并在抛出OutOfMemoryError异常时不转储堆。
 
-XX:HeapDumpPath=path
        设置在设置-XX:+ HeapDumpOnOutOfMemoryError选项时写入堆分析器(HPROF)提供的堆转储的路径和文件名。默认状况下,该文件在当前工做目录中建立,而且名为java_pidpid.hprof,其中pid是致使错误的进程的标识符。如下示例显示如何显式设置默认文件(%p表示当前进程标识符):
 
-XX:HeapDumpPath=./java_pid%p.hprof

 

 
 
        如下示例显示如何将堆转储文件设置为C:/log/java/java_heapdump.log:
 
-XX:HeapDumpPath=C:/log/java/java_heapdump.log

 

 
 
 
-XX:LogFile=path
        设置写入日志数据的路径和文件名。默认状况下,该文件在当前工做目录中建立,名为hotspot.log。
        如下示例显示如何将日志文件设置为C:/log/java/hotspot.log:
-XX:LogFile=C:/log/java/hotspot.log

 

 
 
 
-XX:+PrintClassHistogram
        在Control + Break事件以后启用类实例直方图的打印。默认状况下,禁用此选项。
        设置此选项等同于运行jmap -histo命令或jcmd pid GC.class_histogram命令,其中pid是当前Java进程标识符。
 
-XX:+PrintConcurrentLockss
        在Control + Break事件以后启用java.util.concurrent锁的打印。默认状况下,禁用此选项。
        设置此选项等同于运行jstack -l命令或jcmd pid Thread.print -l命令,其中pid是当前Java进程标识符。
 
-XX:+UnlockDiagnosticVMOptions
        解锁用于诊断JVM的选项。默认状况下,此选项已禁用,诊断选项不可用。
 

高级垃圾回收器选项/Advanced Garbage Collection Options


这些选项控制Java HotSpot VM如何执行垃圾收集(GC)。
 
-XX:+AggressiveHeap
        启用Java堆优化。根据计算机的配置(RAM和CPU),这会将各类参数设置为具备密集内存分配的长时间运行做业的最佳选择。 默认状况下,禁用该选项而且不优化堆
 
-XX:+AlwaysPreTouch
        在JVM初始化期间容许触摸Java堆上的每一个页面。这会在进入main()方法以前将全部页面都放入内存中。该选项可用于测试以模拟长时间运行的系统,其中全部虚拟内存都映射到物理内存。
         默认状况下,禁用此选项,并将全部页面做为JVM堆空间填充提交。
 
-XX:+CMSClassUnloadingEnabled
        使用并发标记清除( CMS)垃圾收集器时启用类卸载。默认状况下启用此选项。要禁用CMS垃圾收集器的类卸载,请指定-XX:-CMSClassUnloadingEnabled。
 
-XX:CMSExpAvgFactor=percent
        设置在计算并发收集统计信息的指数平均值时用于加权当前样本的时间百分比(0到100)。默认状况下,指数平均值因子设置为25%。如下示例显示如何将因子设置为15%:
 
-XX:CMSExpAvgFactor=15

 

 
-XX:CMSInitiatingOccupancyFraction=percent
        设置启动CMS收集周期的旧代占用率(0到100)的百分比。默认值设置为-1。任何负值(包括默认值)都意味着-XX:CMSTriggerRatio用于定义初始占用率的值。
        如下示例显示如何将占用率设置为20%:
 
-XX:CMSInitiatingOccupancyFraction=20

 

 
 
-XX:+CMSScavengeBeforeRemark
        在CMS remark 步骤以前启用清理尝试。默认状况下,禁用此选项。
 
-XX:CMSTriggerRatio=percent
        设置在CMS收集周期开始以前分配的-XX:MinHeapFreeRatio指定的值的百分比(0到100)。默认值设置为80%。
        如下示例显示如何将占用率设置为75%:
 
-XX:CMSTriggerRatio = 75

 

 
-XX:ConcGCThreads=threads
        设置用于并发GC的线程数。默认值取决于JVM可用的CPU数。
        例如,要将并发GC的线程数设置为2,请指定如下选项:
 

-XX:ConcGCThreads = 2

 

 
 
-XX:+DisableExplicitGC
        启用禁用处理对System.gc()的调用的选项。默认状况下禁用此选项,这意味着将处理对System.gc()的调用。若是禁用对System.gc()的调用处理,则JVM仍会在必要时执行GC。
 
-XX:+ExplicitGCInvokesConcurrent
        容许使用System.gc()请求调用并发GC。
         默认状况下禁用此选项,而且只能与-XX:+UseConcMarkSweepGC选项一块儿启用。
 
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
        经过在并发GC循环期间使用System.gc()请求和卸载类,能够调用并发GC。默认状况下禁用此选项,而且只能与-XX:+UseConcMarkSweepGC选项一块儿启用。
 
-XX:G1HeapRegionSize=size
        设置使用垃圾优先(G1)收集器时Java堆所细分的区域的大小。该值能够介于1 MB和32 MB之间。默认区域大小根据堆大小以符合人体工程学的方式肯定。
        如下示例显示如何将细分的大小设置为16 MB:
 
-XX:G1HeapRegionSize=16m

 

 
 
-XX:+G1PrintHeapRegions
        容许打印有关哪些区域已分配以及哪些区域由G1收集器回收的信息。默认状况下,禁用此选项。
 
-XX:G1ReservePercent=percent
        设置保留为false上限的堆的百分比(0到50),以减小G1收集器升级失败的可能性。
        默认状况下,此选项设置为10%。
        如下示例显示如何将保留堆设置为20%:
 
-XX:G1ReservePercent=20

 

 
 
 
-XX:InitialHeapSize=size
        设置内存分配池的初始大小(以字节为单位)。该值必须为0或1024的倍数且大于1 MB。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。根据系统配置在运行时选择默认值。请参阅                  http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html
上的Java SE HotSpot虚拟机垃圾收集调整指南中的“人机工程学”部分。
        如下示例显示如何使用各类单位将分配的内存大小设置为6 MB:
 

-XX:InitialHeapSize=6291456
-XX:InitialHeapSize=6144k
-XX:InitialHeapSize=6m

 

 
 
        若是将此选项设置为0,则初始大小将设置为为旧代和年轻代分配的大小的总和。可使用-XX:NewSize选项设置年轻代的堆大小。
 
-XX:InitialSurvivorRatio=ratio
        设置吞吐量垃圾收集器使用的初始幸存者空间比率
        (由-XX:+UseParallelGC和/或-XX:+ UseParallelOldGC选项启用)。
        默认状况下,经过使用-XX:+ UseParallelGC和-XX:+UseParallelOldGC选项启用自适应大小调整,并根据应用程序行为调整幸存者空间,从初始值开始。
        若是禁用自适应大小调整(使用-XX:-UseAdaptiveSizePolicy选项),则应使用-XX:SurvivorRatio选项为整个应用程序执行设置幸存者空间的大小。
        如下公式可用于根据年轻一代的大小(Y)和初始幸存者空间比率(R)计算幸存者空间(S)的初始大小:
 

S=Y/(R+2)

 

 
 
        等式中的2表示两个幸存者空间。指定为初始幸存者空间比的值越大,初始幸存者空间大小越小。
        默认状况下,初始幸存者空间比率设置为8.若是使用年轻代空间大小的默认值(2 MB),则幸存者空间的初始大小将为0.2 MB。
        如下示例显示如何将初始幸存者空间比率设置为4:
 
-XX:InitialSurvivorRatio=4

 

 
 
-XX:InitiatingHeapOccupancyPercent=percent
        设置启动并发GC循环的堆占用百分比(0到100)。 它由垃圾收集器使用,它根据整个堆的占用而触发并发GC循环,而不只仅是其中一代(例如,G1垃圾收集器)。
        默认状况下,初始值设置为45%。 值0表示不间断的GC循环。 如下示例显示如何将启动堆占用率设置为75%:

-XX:InitiatingHeapOccupancyPercent=75

 

 
-XX:MaxGCPauseMillis=time
        设置最大GC暂停时间的目标(以毫秒为单位)。这是一个软目标,JVM将尽最大努力实现它。
        默认状况下,没有最大暂停时间值。
        如下示例显示如何将最大目标暂停时间设置为500毫秒:
-XX:MaxGCPauseMillis=500

 

 
 
-XX:MaxHeapSize=size
        设置内存分配池的最大大小(以字节为单位)。该值必须是1024的倍数且大于2 MB。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。根据系统配置在运行时选择默认值。
        对于服务器部署,-XX:InitialHeapSize 和 -XX:MaxHeapSize一般设置为相同的值。请参阅                http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html
        上的Java SE HotSpot虚拟机垃圾收集调整指南中的“人机工程学”部分。
        如下示例显示如何使用各类单位将分配的内存的最大容许大小设置为80 MB:
 

-XX:MaxHeapSize=83886080
-XX:MaxHeapSize=81920k
-XX:MaxHeapSize=80m
        -XX:MaxHeapSize选项等效于-Xmx。
 
-XX:MaxHeapFreeRatio=percent
        设置GC事件后容许的最大空闲堆空间百分比(0到100)。若是可用堆空间扩展到此值以上,则堆将缩小。默认状况下,此值设置为70%。
        如下示例显示如何将最大可用堆比率设置为75%:
 
-XX:MaxHeapFreeRatio=75

 

 
 
-XX:MaxMetaspaceSize=size
        设置能够为类元数据分配的最大本机内存量。默认状况下,大小不受限制。应用程序的元数据量取决于应用程序自己,其余正在运行的应用程序以及系统上可用的内存量。
        如下示例显示如何将最大类元数据大小设置为256 MB:
 

-XX:MaxMetaspaceSize=256m
 
-XX:MaxNewSize=size
        设置年轻代的堆的最大大小(以字节为单位)。默认值按人体工程学设置。
 
-XX:MaxTenuringThreshold=threshold
        设置自适应GC大小调整中使用的最大暂定阈值。
        最大值为15.并行(吞吐量)收集器的默认值为15
        CMS收集器的默认值为6。
        如下示例显示如何将最大期限阈值设置为10:
-XX:MaxTenuringThreshold = 10

 

 
 
-XX:MetaspaceSize=size
        设置分配的类元数据空间的大小,该空间将在第一次超出时触发垃圾回收。根据使用的元数据量,增长或减小垃圾收集的阈值。默认大小取决于平台。
 
-XX:MinHeapFreeRatio=percent
        设置GC事件后容许的最小空闲堆空间百分比(0到100)。若是可用堆空间低于此值,则将扩展堆。默认状况下,此值设置为40%。
        如下示例显示如何将最小可用堆比率设置为25%:
 
-XX:MinHeapFreeRatio=25

 

 
 
 
-XX:NewRatio=ratio
        设置年轻和老一代尺寸之间的比率。默认状况下,此选项设置为2.如下示例显示如何将年轻/旧比率设置为1:
 
-XX:NewRatio=1

 

 
 
 
-XX:NewSize=size
        设置年轻代的堆的初始大小(以字节为单位)。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。
        堆的年轻代区域用于新对象。 GC在该区域比在其余区域更频繁地进行。若是年轻一代的规模过小,那么将会执行大量的小型GC。若是尺寸太大,则只会执行完整的GC,这可能须要很长时间才能完成。 Oracle建议您将年轻代的大小保持在整个堆大小的一半到四分之一之间。
        如下示例显示如何使用各类单位将年轻代的初始大小设置为256 MB:
 

 
-XX:NewSize=256m
-XX:NewSize=262144k
-XX:NewSize=268435456
        -XX:NewSize选项等效于-Xmn。
 
-XX:ParallelGCThreads=threads
        设置用于年轻和老年代的并行垃圾收集的线程数。默认值取决于JVM可用的CPU数。
        例如,要将并行GC的线程数设置为2,请指定如下选项:
 
-XX:ParallelGCThreads=2

 

 
-XX:+ParallelRefProcEnabled
        启用并行参考处理。默认状况下,禁用此选项。
 
-XX:+PrintAdaptiveSizePolicy
        容许打印有关自适应生成大小的信息。默认状况下,禁用此选项。
 
-XX:+PrintGC
        容许在每一个GC上打印消息。默认状况下,禁用此选项。
 
-XX:+ PrintGCApplicationConcurrentTime
        容许打印自上次暂停后通过的时间(例如,GC停顿)。默认状况下,禁用此选项。
 
-XX:+ PrintGCApplicationStoppedTime
        容许打印暂停(例如,GC暂停)持续多长时间。默认状况下,禁用此选项。
 
-XX:+PrintGCDateStamps
        容许在每一个GC上打印日期戳。默认状况下,禁用此选项。
 
-XX:+PrintGCDetails
        容许在每一个GC上打印详细消息。默认状况下,禁用此选项。
 
-XX:+PrintGCTaskTimeStamps
        容许为每一个GC工做线程任务打印时间戳。默认状况下,禁用此选项。
 
-XX:+PrintGCTimeStamps
        容许在每一个GC上打印时间戳。默认状况下,禁用此选项。
 
-XX:+ PrintStringDeduplicationStatistics
        打印详细的重复数据删除统计信息。默认状况下,禁用此选项。
        请参阅-XX:+UseStringDeduplication选项。
 
-XX:+PrintTenuringDistribution
        容许打印终身年龄信息。如下是输出的示例:

 指望的幸存者大小48286924字节,新阈值10(最多10)
- age 1: 28992024 bytes, 28992024 total
- age 2: 1366864 bytes, 30358888 total
- age 3: 1425912 bytes, 31784800 total
...
        1岁对象是最年轻的幸存者(它们是在以前的清除以后建立的,在最近的清除中幸存下来,并从伊甸园迁移到幸存者空间)。 
        2岁的物体在两次清除中幸存下来(在第二次清除期间,它们被从一个幸存者空间复制到下一个幸存者空间)。等等。
        在前面的示例中,28 992 024个字节在一次清除中幸存,并从eden复制到幸存者空间,1 366 864个字节由2岁对象占用,等等。每行中的第三个值是年龄n的对象的累积大小或减。
        默认状况下,禁用此选项。
 
-XX:+ScavengeBeforeFullGC
        在每一个完整GC以前启用年轻代的GC。默认状况下启用此选项。 Oracle建议您不要禁用它,由于在完整GC以前清除年轻代能够减小从旧代空间到年轻代空间可到达的对象数。要在每一个完整GC以前禁用年轻代的GC,请指定-XX:-ScavengeBeforeFullGC。
 
-XX:SoftRefLRUPolicyMSPerMB=time
        设置软件可访问对象在上次引用后在堆上保持活动状态的时间(以毫秒为单位)。
        默认值是堆中每一个可用兆字节的生存期的一秒。 -XX:SoftRefLRUPolicyMSPerMB选项接受表示每兆字节当前堆大小(对于Java HotSpot客户端VM)的毫秒数或最大可能堆大小(对于Java HotSpot Server VM)的整数值。这种差别意味着客户端VM倾向于刷新软引用而不是增长堆,而服务器VM倾向于增长堆而不是刷新软引用。在后一种状况下,-Xmx选项的值对软引用的垃圾收集速度有显着影响。
        如下示例显示如何将值设置为2.5秒:
 

-XX:SoftRefLRUPolicyMSPerMB = 2500

 

 
 
 
-XX:StringDeduplicationAgeThreshold=threshold
        达到指定年龄的字符串对象被视为重复数据删除的候选对象。对象的年龄是对垃圾收集存活多少次的度量。这有时被称为终身;请参阅-XX:+PrintTenuringDistribution选项。请注意,在达到此年龄以前提高到旧堆区域的String对象始终被视为重复数据删除的候选对象。此选项的默认值为3.请参阅-XX:+ UseStringDeduplication选项。
 
-XX:SurvivorRatio=ratio
        设置伊甸园空间大小与幸存者空间大小之间的比率。默认状况下,此选项设置为8.如下示例显示如何将eden / survivor空间比率设置为4:
 
-XX:SurvivorRatio = 4

 

 
-XX:TargetSurvivorRatio=percent
        设置年轻垃圾收集后使用的幸存者空间(0到100)的所需百分比。默认状况下,此选项设置为50%。
        如下示例显示如何将目标幸存者空间比率设置为30%:
 
-XX:TargetSurvivorRatio=30

 

 
 
 
-XX:TLABSize=size
        设置线程局部分配缓冲区(TLAB)的初始大小(以字节为单位)。附加字母k或K表示千字节,m或M表示兆字节,g或G表示千兆字节。若是此选项设置为0,则JVM会自动选择初始大小。
        如下示例显示如何将初始TLAB大小设置为512 KB:
 
-XX:TLABSize=512k

 

-XX:+UseAdaptiveSizePolicy
        容许使用自适应生成大小。默认状况下启用此选项。
        要禁用自适应生成大小调整,请指定-XX:-UseAdaptiveSizePolicy并显式设置内存分配池的大小(请参阅-XX:SurvivorRatio选项)。
 
-XX:+UseCMSInitiatingOccupancyOnly
        容许使用占用值做为启动CMS收集器的惟一标准。默认状况下,此选项已禁用,可能会使用其余条件。
 
-XX:+UseConcMarkSweepGC
        容许为旧一代使用CMS垃圾收集器。 Oracle建议您在吞吐量(-XX:+UseParallelGC)垃圾收集器没法知足应用程序延迟要求时使用CMS垃圾收集器。 G1垃圾收集器(-XX:+UseG1GC)是另外一种选择。
        默认状况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。
        启用此选项后,将自动设置-XX:+ UseParNewGC选项,您不该禁用它,
        由于JDK 8中不推荐使用如下选项组合:-XX:+UseConcMarkSweepGC -XX:-UseParNewGC。
 
-XX:+ UseG1GC
        容许使用垃圾优先(G1)垃圾收集器。它是一个服务器式垃圾收集器, 针对具备大量RAM的多处理器机器。它以高几率知足GC暂停时间目标,同时保持良好的吞吐量。 G1收集器推荐用于须要大堆(大小约为6 GB或更大)且GC延迟要求有限的应用(稳定且可预测的暂停时间低于0.5秒)
        默认状况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。
 
-XX:+ UseGCOverheadLimit
        容许使用策略来限制在引起OutOfMemoryError异常以前JVM在GC上花费的时间比例。默认状况下,此选项处于启用状态,若是超过98%的总时间用于垃圾回收而且回收的堆少于2%,并行GC将抛出OutOfMemoryError。当堆很小时,此功能可用于防止应用程序长时间运行,几乎没有进展。
        要禁用此选项,请指定-XX:-UseGCOverheadLimit。
 
-XX:+ UseNUMA
        经过增长应用程序对低延迟内存的使用,在具备非均匀内存架构(NUMA)的计算机上实现应用程序的性能优化。默认状况下,此选项被禁用,而且不会对NUMA进行优化。
        该选项仅在使用并行垃圾收集器时可用(-XX:+UseParallelGC)。
 
-XX:+UseParallelGC
        容许使用并行清除垃圾收集器(也称为吞吐量收集器),经过利用多个处理器来提升应用程序的性能。
        默认状况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。
        若是已启用,则会自动启用-XX:+ UseParallelOldGC选项,除非您明确禁用它。
 
-XX:+UseParallelOldGC
        容许将并行垃圾收集器用于完整的GC。默认状况下,禁用此选项。
        启用它会自动启用-XX:+UseParallelGC选项。
 
-XX:+ UseParNewGC
        容许在年轻一代中使用并行线程进行收集。默认状况下,禁用此选项。
        设置-XX:+UseConcMarkSweepGC选项时会自动启用它。在JDK 8中不使用-XX:+ UseParNewGC选项而不使用-XX:+UseConcMarkSweepGC选项。
 
-XX:+UseSerialGC
        容许使用串行垃圾收集器。对于不须要垃圾收集的任何特殊功能的小型和简单应用程序,这一般是最佳选择。默认状况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。
 
-XX:+ UseStringDeduplication
        启用字符串重复数据删除。 默认状况下,禁用此选项。 要使用此选项,必须启用垃圾优先(G1)垃圾收集器。 请参阅-XX:+UseG1GC选项。
        字符串重复数据删除经过利用许多String对象相同的事实减小了Java堆上String对象的内存占用。 而不是每一个String对象指向它本身的字符数组,相同的String对象能够指向并共享相同的字符数组。
 
-XX:+UseTLAB
        容许在年轻代空间中使用线程局部分配块(TLAB)。 默认状况下启用此选项。 
        要禁用TLAB,请指定-XX:-UseTLAB。
 

已启用和移除的选项/Deprecated and Removed Options


这些选项包含在以前的版本中,但后来被认为是没必要要的。
 
-Xincgc
        启用增量垃圾收集。此选项在JDK 8中已弃用,无需替换。
 
-Xrunlibname
        加载指定的调试/分析库。此选项已被-agentlib选项取代。
 
-XX:CMSIncrementalDutyCycle=percent
        设置容许并发收集器运行的次要集合之间的时间百分比(0到100)。
        在弃用-XX:+CMSIncrementalMode选项后,此选项在JDK 8中已弃用,没有替换。
 
-XX:CMSIncrementalDutyCycleMin=percent
        设置次要集合之间的时间百分比(0到100),它是-XX:+CMSIncrementalPacing启用时占空比的下限。
        在弃用-XX:+ CMSIncrementalMode选项后,此选项在JDK 8中已弃用,没有替换。
 
-XX:+ CMSIncrementalMode
        启用CMS收集器的增量模式。此选项在JDK 8中已弃用,没有替换,以及以CMSIncremental开头的其余选项。
 
-XX:CMSIncrementalOffset=percent
        设置增量模式占空比在次要集合之间的时间段内向右移动的时间百分比(0到100)。
        在弃用-XX:+ CMSIncrementalMode选项后,此选项在JDK 8中已弃用,没有替换。
 
-XX:+ CMSIncrementalPacing
        根据JVM运行时收集的统计信息,启用增量模式占空比的自动调整。
        在弃用-XX:+CMSIncrementalMode选项后,此选项在JDK 8中已弃用,没有替换。
 
-XX:CMSIncrementalSafetyFactor=percent
        设置计算占空比时用于添加保守性的时间百分比(0到100)。
        在弃用-XX:+ CMSIncrementalMode选项后,此选项在JDK 8中已弃用,没有替换。
 
-XX:CMSInitiatingPermOccupancyFraction=percent
        设置启动GC的永久生成占用率(0到100)的百分比。此选项在JDK 8中已弃用,无需替换。
 
-XX:MaxPermSize=size
        设置最大永久生成空间大小(以字节为单位)。
        此选项在JDK 8中已弃用,并由-XX:MaxMetaspaceSize选项取代。
 
-XX:PermSize=size
        设置分配给永久生成的空间(以字节为单位),若是超出则会触发垃圾回收。
        此选项在JDK 8中已弃用,并被-XX:MetaspaceSize选项取代。
 
-XX:+UseSplitVerifier
        容许拆分验证过程。默认状况下,此选项在先前版本中已启用,验证分为两个阶段:类型引用(由编译器执行)和类型检查(由JVM运行时执行)。此选项在JDK 8中已弃用,如今默认状况下会对验证进行拆分,而没法将其禁用。
 
-XX:+UseStringCache
        启用经常使用分配字符串的缓存。此选项已从JDK 8中删除,无需替换。
 

性能调优示例/Performance Tuning Examples


如下示例显示如何使用实验性调整标志来优化吞吐量或提供较低的响应时间。
 
    案例一:调整更高的吞吐量

java -d64 -server -XX:+AggressiveOpts -XX:+UseLargePages -Xmn10g  -Xms26g -Xmx26g
    案例二:调整较低的响应时间

java -d64 -XX:+UseG1GC -Xms26g Xmx26g -XX:MaxGCPauseMillis=500 -XX:+PrintGCTimeStamp

 

 
 

Lager Pages


            Also known as huge pages, large pages are memory pages that are significantly larger than the standard memory page size (which varies depending on the processor and operating system). Large pages optimize processor Translation-Lookaside Buffers.
         也称为huge pages, Large pages是显著大于标准 memory pages大小的 memory page(根据处理器和操做系统而变化)。 Large pages优化处理器Translation-Lookaside Buffers。
 
         A Translation-Lookaside Buffer (TLB) is a page translation cache that holds the most-recently used virtual-to-physical address translations. TLB is a scarce system resource. A TLB miss can be costly as the processor must then read from the hierarchical page table, which may require multiple memory accesses. By using a larger memory page size, a single TLB entry can represent a larger memory range. There will be less pressure on TLB, and memory-intensive applications may have better performance.
        Translation-Lookaside Buffer(TLB)是一种 page 转换缓存,它保存最近使用的虚拟到物理地址转换。 TLB是一种稀缺的系统资源。 TLB未命中多是昂贵的,由于处理器必须从分层  page 表读取,这可能须要屡次存储器访问。经过使用更大的内存页面大小,单个TLB条目能够表示更大的内存范围。 TLB的压力会减小,内存密集型应用程序可能会有更好的性能。
 
         However, large pages page memory can negatively affect system performance. For example, when a large mount of memory is pinned by an application, it may create a shortage of regular memory and cause excessive paging in other applications and slow down the entire system. Also, a system that has been up for a long time could produce excessive fragmentation, which could make it impossible to reserve enough large page memory. When this happens, either the OS or JVM reverts to using regular pages.
        可是, large pages的page memory会对系统性能产生负面影响。例如,当应用程序固定大量内存时,可能会致使常规内存不足并致使其余应用程序中的分页过多,从而下降整个系统的速度。此外,长时间运行的系统可能会产生过多的碎片,这可能致使没法保留足够大的 page memory。发生这种状况时,OS或JVM将恢复使用常规页面。
 

Large Pages Support

    只有Windows Server 2003支持Lager pages。 要使用此功能,管理员必须首先为将运行该应用程序的用户分配其余权限:
1.Select Control Panel -> Administrative Tools -> Local Security Policy.
2.Select Local Policies -> User Rights Assignment.
3.Double click Lock pages in memory; add users and/or groups.
4.Reboot your system.
 
请注意,即便是将要运行应用程序的管理员,也须要执行这些步骤,由于管理员默认状况下没有权限将页面锁定在内存中。
 
 

Application Class Data Sharing


        应用程序类数据共享(AppCDS)扩展了CDS(请参阅 https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html  )以启用标准扩展目录中的类( 由系统属性java.ext.dirs指定;请参阅 https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/spec.html  )和应用程序类路径(请参阅“设置类路径”) “)放在共享档案中。 若是从应用程序类路径加载大量类,AppCDS能够减小占用空间并减小应用程序的启动时间。
        这是一项商业功能,须要您还指定-XX:+ UnlockCommercialFeatures选项。 这也是一个实验性的特征; 它可能在未来的版本中发生变化
 

建立共享存档文件,并使用它运行应用程序

        如下步骤建立一个共享存档文件,其中包含test.Hello应用程序使用的全部类。最后一步使用共享存档文件运行应用程序。
        1.建立test.Hello应用程序使用的全部类的列表。如下命令建立一个名为hello.classlist的文件,其中包含此应用程序使用的全部类的列表:
 
java -Xshare:off -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp hello.jar test.Hello

 

 
 
        请注意,-cp参数必须仅包含JAR文件; -XX:+ UseAppCDS选项不支持包含目录名的类路径。
 
    2.建立一个名为hello.jsa的共享存档,其中包含hello.classlist中的全部类:
 
java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -XX:SharedClassListFile=hello.classlist -cp hello.jar
 

 

 
        请注意,在建立存档时使用的-cp参数必须与运行时使用的-cp的(或前缀)相同。
 
    3.使用共享存档hello.jsa运行应用程序test.Hello:
 
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar test.Hello
 
        确保已指定选项-Xshare:on或-Xshare:auto。
 
    4.验证test.Hello应用程序是否正在使用hello.jsa共享存档中包含的类:
 
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar -verbose:class test.Hello

 

 
 
        此命令的输出应包含如下文本:
Loaded test.Hello from shared objects file by sun/misc/Launcher$AppClassLoader
 
 

跨多个应用程序进程共享共享存档

        你能够跨多个具备彻底相同类路径的应用程序进程共享相同的存档文件,或者共享公共类路径前缀。这样能够减小内存使用量,由于归档内存映射到进程的地址空间。操做系统自动共享这些进程的只读页面。
        如下步骤建立了Hello和Hi均可以使用的共享存档。
        1.建立Hello应用程序使用的全部类的列表以及Hi应用程序的另外一个列表:
 

java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp common.jar:hello.jar Hello
 
java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hi.classlist -XX:+UseAppCDS -cp common.jar:hi.jar Hi

 

 
 
        请注意,由于Hello和Hi应用程序共享一个公共类路径前缀(它们的两个类路径都以common.jar开头),因此这两个应用程序能够共享一个共享的归档文件。
 
        2.建立将共享共享存档文件的全部应用程序使用的单个类列表。
        如下命令将文件hello.classlist和hi.classlist组合到一个文件common.classlist中:
type hello.classlist hi.classlist > common.classlist

 

 
 
        3.建立一个名为common.jsa的共享存档,其中包含common.classlist中的全部类:
 

java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -XX:SharedClassListFile=common.classlist -cp common.jar

 

 
        -cp参数的值是Hello和Hi应用程序共享的公共类路径前缀。
 
        4.使用相同的共享存档运行Hello和Hi应用程序:
 

 
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hello.jar Hello
 
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hi.jar Hi

 

 
 
 

退出状态

        当使用错误的参数,严重错误或JVM抛出的异常调用启动程序时,启动程序一般会返回如下退出值。可是,Java应用程序能够选择使用API调用System.exit(exitValue)返回任何值。值是:
        0:成功完成
        > 0:发生错误
相关文章
相关标签/搜索