Java JVM启动参数大全

摘要已经使用了一段时间的JAVA,期间也了解和用过一些JVM(Java Virtual machine)参数,但是没有仔细去整理过每个参数代表的意义,为此整理成文 。
Java使用方式
java [options] classname [args]
java [options] -jar filename [args]
options: 命令行选项,空格分隔
classname: 启动的class名称
filename: Jar包名称(JAR)
args: main()方法参数,空格隔开
加载的class的main()方法必须定义为public static,并且无返回值,参数是字符串列表
public static void main(String[] args)
如果使用-jar选项,则args是JAR包包含的class 。启动class必须通过Main-Class的manifest指定,示例如下:
jar {
manifest {
attributes 'Main-Class': 'com.xx.xx'
}
}
OptionsJava 命令行提供了以下几种类型的选项
标准选项
非标准选项
高级运行选项
高级JIT编译选项
高级垃圾回收选项
高级可用性选项
(1) 标准选项被所有类型的JVM支持 。标准选项用来做常规操作,如查看版本,设定class path等 。
(2) 非标准选项一般是指Java HotSpot Virtual Machine特定的选项,不能保证被所有类型的JVM支持,该类选项使用时,以-X开头 。
(3) 高级选项是用于Java HotSpot Virtual Machine特定区域调优的选项,同样不能保证被所有的JVM支持 。该类选择使用时,以-XX开头 。对于Boolean类型的选项,通过使用+表示选项生效,- 来标示选项无效 。如-XX:+OptionName表示选项OptionName生效,-XX:-OptionName表示选项OptionName无效 。
标准选项所有类型的JVM均支持标准选项,为此简单列举经常用到的几个选项 。
-d32
将应用运行在32bit的环境,如果32bit环境未初始化或不支持,则报错 。默认是运行在32bit环境 。
-d64
将应用运行在64bit环境 。如果64bit环境未初始化或不支持,则报错 。默认是运行在32bit环境 。
-help/-?
显示帮助文档
-verbose:class
显示每个加载的class
-verbose:gc
显示每次垃圾回收事件
-version
显示当前java 版本
-disableassertions[:[packagename]…|:classname] / -da[:[packagename]…|:classname]
禁用断言(assert),可以指定禁用断言的package和class 。
-disablesystemassertions / -dsa
禁用全部断言(assert)
-enableassertions[:[packagename]…|:classname] / -ea[:[packagename]…|:classname]
启用断言,可以指定package和class 。默认断言是禁用的 。
-enablesystemassertions / -esa
启用全部断言(assert)
-server
选择Java HotSpot Server VM 。64bit版本隐含设置-server 。
-D[property]=value
定义系统属性值 。property变量是一个字符串代表属性名,value代表设定的属性值 。
以设置系统的文件编码为utf-8为例:
-Dfile.encoding=utf-8
?
非标准选项非标准选项一般是指Java HotSpot Virtual Machine特定的选项 。列举经常用到的几个选项 。
-X
显示有效的-X选项的帮助信息
-Xbatch
禁用后台编译 。默认情况下JVM是后台编译 。该选项等同于 -XX:-BackgroundCompilation
-Xloggc:filename
将GC(garbage collection)信息重定向到filename 。当-Xloggc和-verbose:gc同时给出时,-Xloggc将重载-verbose:gc
-Xmnsize
设置堆中年轻代(young generation)的初始值和最大值大小 。单位是bytes,常用K,M,G (不区分大小写)
年轻代主要放置新对象,这块区域也是GC执行比较频繁的区域 。如果该区域设置较小,可能导致频繁minor GC,如果设置过大,只有Full GC执行则每次GC耗时较长 。Oracle建议的大小是整个堆大小的1/4 - 1/2之间 。
以设置大小为256 MB为例:
? -Xmn256m
不同于-Xmn同时设置初始值和最大值,可通过-XX:NewSize设置初始,-XX:MaxNewSize设置最大值 。
-Xmssize
设置堆的初始值,该值必须是1024的倍数并且大于1MB 。
以设置初始值6 MB的堆为例:
? -Xms6m
如果该值不设置,则通过计算年轻代和老年代的和作为堆的初始值
-Xmxsize
指定应用的最大内存大小,该值必须是1024的倍数并且大于2MB 。对于服务型应用,-Xms和-Xmx常设置为相同,至于原因涉及垃圾回收机制,如果两者设置相同则应用占据的内存不进行动态扩展 。
以设置最大内存大小1G为例:
? -Xmx1g
-Xmx等价于高级选项-XX:MaxHeapSize
-Xsssize
设置线程栈的大小 。
以设置大小为1024KB的线程栈为例:
? -Xss1024k
-Xss等价于高级选项-XX:ThreadStackSize
高级运行选项
该类选项控制Java HotSpot VM运行时的情况 。列举经常用到的几个选项 。


推荐阅读