虚拟机参数简述:
JVM命令支持广泛的选项,可分为以下类别:
标准选项
-client -server(默认)
非标准选项
-X 显示所有可用-X选项的帮助
高级运行时选项
-XX:ErrorFile=filename
高级JIT编译器选项
-XX:+AggressiveOpts 允许jit性能优化
高级服务性选项
-XX:+HeapDumpOnOutOfMemory堆栈信息
高级垃圾收集选项
-XX:+CMSClassUnloadingEnabled 使用CMS垃圾收集机制
虚拟机参数详细文档:
JVM参数使用:
java [ options ] classname [ args ]
java [ options ] -jar filename [ args ]
javaw [ options ] classname [ args ]
javaw [ options ] -jar filename [ args ]
java/javaw 命令行选项由空格分隔 class/jar名字 传递给main函数的参数
描述:
用java命令启动程序.首先会启动java运行时环境(jre),然后加载指定的类,并调用该类的main方法.
该方法必须声明为public static void的,并且接受String数组作为参数.方法声明形式如:public static void main(String [] args)
java命令也可以用于加载有main方法或扩展的类来启动javaFX应用程序javafx.application.Application.在后一种情况下,启动器构造Application类的实例,调用init()方法,然后调用start(javafx.stage.Stage)方法
默认情况下,第一个不属于java命令选项的参数是要调用的类的完全限定名。如果指定了-jar选项,其参数是包含应用程序的类和资源文件的jar文件的名称。启动类必须由源代码中的Main-class清单头指示。
JRE在三个位置中搜索启动类(和应用程序使用的其他类):引导类路径、安装的扩展和用户的类路径。
将类文件名或JAR文件名后的参数传递给main()方法.
javaw命令与java相同,只是在javaw中没有关联的控制台窗口(后台启动)。当不希望出现命令提示符窗口时使用javaw。但是,如果启动失败,javaw启动器将显示一个包含错误信息的对话框。
java命令支持多种选项,可分为以下几类:
1标准选项
2非标准选项
3运行时选项
4JIT编译选项
5服务性选项
6垃圾收集选项
jvm的所有实现都保证标准选项得到支持,他们用以常见的操作,比如检查jre版本,设置类路径,启用详细输出等等
非标准选型是特定于Java HotSpot虚拟机的通用选项,所以不保证所有的jvm实现都支持他们,而且可能发生变化这些选项以-X开头
不建议随意使用高级选项。这些是用于优化Java HotSpot虚拟机操作的特定区域的开发人员选项,这些区域通常具有特定的系统需求,并且可能需要对系统配置参数进行特权访问。它们也不能保证能被所有JVM实现所支持,并且是可以更改的。高级选项以-XX开头。
文档末尾有一个名为Deprecated and Removed Options的部分,可以查看已弃用或删除的选项.
布尔值选项用于启用默认禁用的功能,或禁用默认启用的功能。这些选项不需要参数。选项是使用加号(-XX:+OptionName)启用的,并使用减号(-XX:-OptionName)禁用。
对于需要参数的选项,参数可以通过空格,冒号(:)或等号(=)与选项名称分隔,或者参数可以直接跟随选项(每个选项的确切语法不同) )。如果你想指定字节大小,你可以使用任何后缀,或者使用后缀k或K千字节(KB),m或M兆字节(MB)g或G千兆字节(GB)。例如,设置大小为8 GB,您可以指定8g,8192m,8388608k,或8589934592作为参数。如果要指定百分比,请使用0到1之间的数字(例如,指定0.2525%)。
一丶标准选项
这些是所有JVM实现所支持的最常用的选项。
1.-agentlib:libname[=options]
加载指定的本机代理库。在库名之后,可以使用一个逗号分隔的库选项列表(该库特有的选项列表)。
如果指定了选项-agentlib:foo,那么JVM会尝试在PATH系统变量指定的位置加载名为foo.dll的库。
下面的示例演示如何加载堆分析工具(HPROF)库,并每20ms获取一个样本CPU信息,堆栈深度为3:
-agentlib:hprof=cpu=samples,interval=20,depth=3
下面的示例演示如何加载Java Debug Wire Protocol (JDWP)库并侦听端口8000上的套接字连接,在主类加载之前挂起JVM:
-agentlib:jdwp=transport=dt_socket,server=y,address=8000
有关本机代理库的更多信息,请参考以下内容:
工具包的描述在:http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html
在JVM Tools Interface指南中的代理命令行选项:http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#starting
2.-agentpath:pathname [= options ]
加载由绝对路径名指定的本机代理库。此选项等效于-agentlib,不同的是它使用库的完整路径和文件名。
3.-client
选择Java HotSpot客户端VM。Java SE开发工具包(JDK)的64位版本目前忽略了这个选项,默认使用Server JVM。
有关默认JVM选择,请参阅服务器级机器检测: http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html
4.-Dproperty=value
设置系统属性值。属性变量是一个没有空格表示属性名称的字符串。值变量是表示属性值的字符串。如果值是有空格的字符串,则将其括在引号中(例如-Dfoo=“foo bar”)。
5.-disableassertions[:[packagename]...|:classname]
-da[:[packagename]...|:classname]
禁用断言。默认情况下,在所有包和类中禁用断言。
如果没有参数,-disableassertions(-da)将禁用所有包和类中的断言,如果指定了packagename,将禁用包下所有子类的断言,如果是...,将禁用当前目录的断言,如果是classname,将禁用指定类的断言.
-disableassertions(-da)选项适用于所有的类加载器和系统类,此规则有一个例外:如果选项没有参数,则它不适用于系统类。这使得在系统类之外的所有类中都可以轻松禁用断言。该-disablesystemassertions选项使你可以禁用所有系统类中的断言.
要在特定包或类中显式启用断言,请使用-enableassertions(-ea)选项。两个选项可以同时使用。例如,要MyClass在包com.wombat.fruitbat(包括子包)中启用断言但在类com.wombat.fruitbat.Brickbat中禁用的情况下运行应用程序,请使用以下命令:
java -ea:com.wombat.fruitbat ... -da:com.wombat.fruitbat.Brickbat MyClass
6.-disablesystemassertions
-dsa
禁用所有系统类中的断言。
7.-enableassertions [:[ packagename ] ... |:classname ]
-ea [:[ packagename ] ... |:classname ]
启用断言。默认情况下,在所有包和类中禁用断言。
用法同上...
9.-enablesystemassertions
-esa
在所有系统类中启用断言。
10.-help
-?
不启用jvm的情况下显示java命令的使用信息.
11.-jar 文件名
执行封装在JAR文件中的程序。需要在清单文件中包含Main-Class:classname启动类,定义与类public static void main(String[] args)相同.
有关JAR文件的更多信息,请参见以下资源:jar文件指南: http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html
JAR文件中的打包程序: http://docs.oracle.com/javase/tutorial/deployment/jar/index.html
12.-javaagent:jarpath[=options]
加载指定的Java编程语言代理程序。有关检测Java应用程序的更多信息,请参阅:http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html
13.-jre-restrict-search/-no-jre-restrict-search
在版本搜索中包含/排除用户私有jar包
14.-server
选择Java HotSpot Server VM。64位版本的JDK仅支持Server VM,因此在这种情况下,该选项是隐式的。
有关默认JVM选择,请参阅服务器级机器检测
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html
15.-showversion
显示版本信息并继续执行应用程序。此选项等同于该-version选项,但后者指示JVM在显示版本信息后退出。
16.-splash:imgname
使用imgname指定的图像显示启动画面。例如,要在启动应用程序时显示目录中的splash.gif文件images,请使用以下选项:
-splash:images/splash.gif
17.-verbose:class
显示有关每个已加载类的信息。
18.-verbose:GC
显示垃圾回收(GC)事件的信息。
19.-verbose:JNI
显示有关使用本机方法和其他Java Native Interface(JNI)活动的信息。
20.-version
显示版本信息,然后退出。此选项等同于该-showversion选项,但后者在显示版本信息后不指示JVM退出。
21.-version:release
指定jdk版本,不存在的话使用默认jdk,例如:
-version:“1.6.0_13 1.6 *&1.6.0_10 +”
二丶非标准选项
这些选项是特定于Java HotSpot虚拟机的通用选项。
1.-X
显示所有可用-X选项的帮助。
2.-Xbatch ?
禁用后台编译。默认情况下,JVM将该方法作为后台任务编译,在解释器模式下运行该方法,直到后台编译完成。Xbatch标志将禁用后台编译,以便所有方法的编译作为前台任务继续进行,直到完成。
此选项相当于-XX:-BackgroundCompilation。
3.-Xbootclasspath:path
用分号指定分隔的目录、JAR文件和ZIP存档的列表,以搜索引导类文件。它们用于替代JDK中包含的引导类文件。
不要部署使用此选项的应用程序来覆盖rt.jar中的类,因为这违反了JRE二进制代码许可证。
4.-Xbootclasspath/a:path
指定由分号(;)分隔的目录,JAR文件和ZIP存档的列表,以附加到默认引导程序类路径的末尾。
不要部署使用此选项的应用程序覆盖类rt.jar,因为这违反了JRE二进制代码许可证。
5.-Xcheck:JNI
对Java Native Interface(JNI)函数执行其他检查。具体来说,它在处理JNI请求之前验证传递给JNI函数的参数和运行时环境数据。遇到的任何无效数据都表明本机代码存在问题,在这种情况下,JVM将以无法恢复的错误终止。使用此选项时,预计性能会下降。
6.-Xcomp
强制第一次调用方法时编译。默认情况下,客户端VM(-Client)执行1000次解释方法调用,服务器VM(-Server)执行10000次解释方法调用来收集信息,以进行高效的编译。指定-Xcomp选项将禁用解释的方法调用,从而以效率为代价提高编译性能。
您还可以在使用-XX:CompileThreshold选项进行编译之前更改解释的方法调用的数量。
7.-Xdebug
什么也没做。提供向后兼容性。
8.-Xdiag
显示其他诊断消息。
9.-Xfuture
启用严格的类文件格式检查,以强制类与文件格式规范紧密一致。鼓励开发人员在开发新代码时使用此标志,因为更严格的检查将成为未来版本中的默认值。
10.-Xint
以仅解释模式运行应用程序。禁用对本机代码的编译,并且解释器将执行所有字节码。此时(JIT)编译器提供的性能优势在此模式下不存在。
11.-Xinternalversion
显示比该-version选项更详细的JVM版本信息,然后退出。
12.-Xloggc:filename
输出gc信息到文本文件,例如:
-Xloggc:garbage-collection.log
13.-Xmaxjitcodesize=size
指定JIT编译代码的最大代码缓存大小(以字节为单位)。默认的最大代码缓存大小为240MB;如果使用选项-XX:-tiered compilation禁用分层编译,则默认大小为48MB:
例如:-Xmaxjitcodesize=240m
14.-Xmixed
除了热方法之外,解释器执行所有字节码,热方法被编译为本机代码。
15.-Xmnsize
设置新生代堆的初始和最大大小.新生代用于新对象。GC在该区域比在其他区域更频繁地进行。如果年轻一代的规模太小,那么将会频繁进行新生代垃圾收集。如果大小太大,则相当于执行了完整的垃圾收集,这可能需要很长时间才能完成。Oracle建议您将新生代的大小保持在整个堆大小的一半到四分之一之间。
以下示例显示如何使用各种单位将新生代的初始和最大大小设置为256 MB:
-Xmn256m
-Xmn262144k
-Xmn268435456
可以使用-XX:NewSize设置初始大小和-XX:MaxNewSize设置的最大尺寸来代替这个参数
16.-Xmssize
设置堆的初始大小(以字节为单位)。该值必须是1024的倍数且大于1 MB。
以下示例显示如何使用各种单位将分配的内存大小设置为6 MB:
-Xms6291456
-Xms6144k
-Xms6m
如果没有设置,则堆大小为新生代与老年代的总和.
17.-Xmxsize
最大堆内存.该值必须是1024的倍数且大于2 MB.根据系统配置在运行时选择默认值。对于服务器部署,-Xms与-Xmx经常设置为相同的值.
请参阅Java SE HotSpot虚拟机垃圾收集调优指南: http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html。
18.-Xnoclassgc
禁用类的垃圾收集(GC)。这可以节省一些GC时间,从而缩短应用程序运行期间的中断。
-Xnoclassgc在启动时指定时,应用程序中的类对象将在GC期间保持不变,并始终被视为实时。这可能导致更多的内存被永久占用,如果不小心使用,将导致内存不足异常。
19.-Xprof
分析运行的程序,并将分析数据发送到标准输出。此选项是作为一种实用程序提供的,在程序开发中很有用,不适用于生产系统。
17.-Xrs
减少JVM对操作系统信号的使用。
通过关闭挂钩在关闭时运行用户清理代码(例如关闭数据库连接)来实现Java应用程序的有序关闭,即使JVM突然终止也是如此。
JVM监视控制台控制事件,以实现意外终止的关闭挂钩。具体而言,JVM将注册开始关闭的挂机处理,并返回一个控制台控制处理程序TRUE用于CTRL_C_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT,和CTRL_SHUTDOWN_EVENT。
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()来运行。
18.-Xshare:mode
设置类数据共享(CDS)模式。此选项的mode参数包括以下内容:
(1)auto
尽可能使用CDS。这是Java HotSpot 32位客户端VM的默认值。
(2)on
需要使用CDS。如果无法使用类数据共享,则打印错误消息并退出。
(3)off
不要使用CDS。这是Java HotSpot 32位Server VM,Java HotSpot 64位ClientVM和Java HotSpot 64位Server VM的默认值。
(4)dump
手动生成CDS存档。按照“设置类路径”中的说明指定应用程序类路径。
您应该使用每个新的JDK版本重新生成CDS存档。
19.-XshowSettings:category
显示设置并继续,此选项category参数包括以下内容:
(1)all
显示所有类别的设置。默认值。
(2)local
显示与区域设置相关的设置。
(3)properties
显示与系统属性相关的设置。
(4)vm
显示JVM的设置。
20.-Xsssize
设置线程堆栈大小(以字节为单位),默认值取决于虚拟内存。此选项相当于-XX:ThreadStackSize。
21.-Xverify: