jvm调优

虚拟机参数简述:
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:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值