java高分局之JVM命令参数大全(高级运行时选项)

java高分局之JVM命令参数大全(高级运行时选项)

这些选项控制hotspotVM运行时的行为

  • -XX:+CheckEndorsedAndExtDirs
    这个选项将会阻止java命令运行应用,除非没有用到endorsed-standards override机制和扩展机制。这个选项会检查应用是否使用了下面
    的机制之一
  • java.ext.dirs或者java.endorsed.dirs属性被设置
  • lib/endorsed目录存在且不为空
  • lib/ext目录中包含除了JDK中之外的JAR
  • 系统范围的特定于平台的扩展目录包含任何JAR文件
  • -XX:+DisableAttachMechanism
    此选项将禁止工具连接到JVM,默认,这个选项是关闭的。也就是说允许工具连接之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飞行记录(JFR)。这是一个商业特性,和-XX:+UnlockCommercialFeatures 选项一起使用,像下面这样:

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder

如果这个选项开启了,那么JVM的飞行记录是不可用的。
- -XX:FlightRecorderOptions=parameter=value
设置JFR的参数,来控制JFR的行为, 这是一个商业特性,和-XX:+UnlockCommercialFeatures 选项一起使用,这个选项仅仅当JFR可用的时候才能使用,也就是
指定了-XX:+FlightRecorder选项。
下面的列表展示了所有可用的JFR参数:

  • defaultrecording={true|false}
    指定是否在后台一直记录还是只运行一段时间。默认,这个参数的值是false,也就是运行一段时间。如果要一直运行就设置这个参数的值为true。
  • disk={true|false}
    指定是否JFR持续的吧记录写到硬盘,默认这个参数值是false(不会持续)。也可以通过defaultrecording=true这个选项来设置。
  • dumponexit={true|false}
    指定是否在JVM终止的时候记录JFR数据。默认是false。也可以通过defaultrecording=true这个选项设置。
  • dumponexitpath=path
    指定JFR数据的存储路径,当JVM终止且指定了dumponexit=true参数。只有设置了defaultrecording=true时这个路径才有意义。
    如果指定的是一个目录,JVM会把当前的日期和时间作为文件名,如果指定的是一个文件名,而且这个文件已存在,那么就会加上时间后缀。
  • globalbuffersize=size
    指定保留数据的总大小。可以使用单位后缀k(K),m(M),g(G)。默认大小是462848 个字节。
  • loglevel={quiet|error|warning|info|debug|trace}
    指定JFR的日志级别,默认是info
  • maxage=time
    设置数据最大保留时间,s是秒,m是分钟,h是小时,d是天(例如:30s是30秒),默认。最大保留时间是15分钟。
    仅仅当disk=true 的时候,此选项可用。
  • maxchunksize=size
    设置数据最大块的大小,可以使用单位后缀k(K),m(M),g(G)。默认最大值是12M。
  • maxsize=size
    设置数据在硬盘的最大容量,可以使用单位后缀k(K),m(M),g(G)。默认容量没有限制。
    仅仅当disk=true 的时候,此选项可用。
  • repository=path
    设置临时仓库,默认使用系统临时路径。
  • samplethreads={true|false}
    设置是否进行线程抽样,默认这个选项是true;
  • settings=path
    设置事件配置文件,默认使用default.jfc.这个文件在JAVA_HOME/jre/lib/jfr
  • stackdepth=depth
    栈追踪的深度,默认深度是64个方法调用,最大是2048,最小是1。
  • threadbuffersize=size
    指定每个线程的本地缓冲小大,可以使用单位后缀k(K),m(M),g(G)。值越大就说明在写磁盘之前可以容纳更多的数据。默认大小是5K。

    我们可以指定多个参数,用逗号分开,比如,设置一直记录,并且最大块是10M,如下:

    -XX:FlightRecorderOptions=defaultrecording=true,disk=true,maxchunksize=10M
  • -XX:LargePageSizeInBytes=size
    在Solaris上,我们设置堆内存页的最大尺寸。这个参数必须是2的幂。可以使用后缀单位。k(K),m(M),g(G).默认值是0,JVM自动选择大小。
    下面的例子指定了内存页的大小是4M。
-XX:LargePageSizeInBytes=4m
  • -XX:MaxDirectMemorySize=size
    设置NIO的直接缓存最大容量。 可以使用后缀单位。k(K),m(M),g(G)。默认值是0,意味着JVM自动选择大小。
    下面的例子设置NIO直接缓存大小为1024KB:
    -XX:MaxDirectMemorySize=1m
    -XX:MaxDirectMemorySize=1024k
    -XX:MaxDirectMemorySize=1048576
  • -XX:NativeMemoryTracking=mode
    指定追踪JVM本地方法使用的模式,mode可用的参数如下所示:
  • off
    不跟踪本地方法的使用。这是默认的模式。
  • summary
    仅仅跟踪JVM子系统的内存使用,比如java堆,类,代码和线程。
  • detail
    除了跟踪内存使用的JVM子系统,通过单个调用CallSite跟踪内存使用量,单个虚拟内存区域和其委托的区域。
  • -XX:ObjectAlignmentInBytes=alignment
    设置java对象的内存对齐,默认是8字节,指定的值必须是2的幂,且必须在8和256之间。这个选项使得压缩指针成为可能。
    堆的大小限制计算:4GB * ObjectAlignmentInBytes
    注意:因为对齐值的增加,在对象之间未使用的空间也增加了,所以,在更大的堆中使用压缩指针不能获得任何好处。
  • -XX:OnError=string
    设置自定义的命令使用分号隔开,当发生不可恢复的错误时执行,如果命令包含空格就需要使用引号括起来。
    下面的例子展示了当发生错误的时候运行userdump.exe命令。
-XX:OnError="userdump.exe %p"

这个例子假设已经指定了userdump.exe的环境变量。
- -XX:OnOutOfMemoryError=string
设置自定义的命令使用分号隔开,当发生内存溢出错误时执行,如果命令包含空格就需要使用引号括起来。
- -XX:+PerfDataSaveToFile
如果这个选项开启了,那么当应用退出的时候,保存jstat的二进制数据,保存文件的名称是hsperfdata_, pid是进程号。
也可以使用jstat命令来保存此数据,如下所示 :
jstat -class file:////hsperfdata_
jstat -gc file:////hsperfdata_
- -XX:+PrintCommandLineFlags
输出JVM设置的选项和值,比如:堆大小、垃圾回收器等。默认这个选项是关闭的。
- -XX:+PrintNMTStatistics
如果-XX:NativeMemoryTracking选项开启,那么这个选项会在JVM退出的时候打印本地内存的收集数据。默认这个选项是关闭的。
- -XX:+RelaxAccessControlCheck
减少访问控制检查,默认这个选项是关闭的。
- -XX:+ResourceManagement
在程序运行期间,启动资源管理。
这是一个商业特性,所以需要你开启-XX:+UnlockCommercialFeatures选项,如下:
java -XX:+UnlockCommercialFeatures -XX:+ResourceManagement
- -XX:ResourceManagementSampleInterval=value (milliseconds)
设置资源管理的采样间隔。
只有在 -XX:+ResourceManagement 选项开启的情况下,才能使用这个选项。
- -XX:SharedArchiveFile=path
指定类数据分享文档目录。
- -XX:SharedClassListFile=file_name
指定一个文本文件,其中包含要存储到类共享文档中的类名。这个文件中的类名使用”/”代替”.”。比如要指定java.lang.Object和hello.Main两个类,如下:
java/lang/Object
hello/Main
这些在文件中指定的类是被应用经常使用的类,他们可能是应用路径、扩展路径和引导路径下的类。
- -XX:+ShowMessageBoxOnError
当JVM发生不可恢复的错误的时候,弹出一个框。这会阻止JVM退出,这时我们可以连接JVM来调试引发JVM退出的原因。默认这个选项是关闭的。
- -XX:StartFlightRecording=parameter=value
为应用开启飞行记录。 这时一个商业特性和-XX:+UnlockCommercialFeatures选项一起使用。这个选项类似JFR.start命令。你可以设置一下参数:

  • compress={true|false}
    指定是否压缩
  • defaultrecording={true|false}
    指定后台的飞行记录是一直运行还是只运行一段时间。默认这个参数的值是false,也就是运行一段时间,
  • delay=time
    指定再启动JVM后多长时间开始记录飞行记录。默认没有延迟时间。
  • dumponexit={true|false}
    指定在JVM退出的时候是否生成飞行记录数据。默认这个参数是false。如果需要生成如下所示:
    -XX:StartFlightRecording=name=test,filename=D:\test.jfr,dumponexit=true
  • duration=time
    指定飞行记录执行的时间。默认没有限制。
  • filename=path
    指定JFR记录的路径和文件
  • name=identifier
    指定JFR记录的标识。默认Recording 是x。
  • maxage=time
    指定飞行记录保存的时间。默认是15分钟
  • settings=path
    设置事件配置文件,默认使用default.jfc.这个文件在JAVA_HOME/jre/lib/jfr
    你可以指定多个参数使用逗号分开,如下:
    -XX:StartFlightRecording=filename=test.jfr,compress=true

  • -XX:ThreadStackSize=size
    设置线程栈大小。默认值依赖于机器内存。下面的例子展示了怎样把线程栈设置为1024KB:
    -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 高级或Oracle Java SE包。看这个网址:
    http://www.oracle.com/technetwork/java/javase/terms/products/index.html
    默认这个选项是关闭的,也就是JVM没有商业特性。
  • -XX:+UseAppCDS
    启动应用类数据共享(AppCDS),为了使用AppCDS,必须制定-XX:SharedClassListFile和-XX:SharedArchiveFile 两个选项。
    这是一个商业特性,所以也需要指定-XX:+UnlockCommercialFeatures 选项。这是一个体检特性,在未来的版本中可能会改变。
  • -XX:-UseBiasedLocking
    禁止使用偏向锁。有一些应用中用到了大量的没有竞争的同步,这时使用这个选项会提升性能。反之应用可能因为特性的锁模式而降低性能。
    更多的信息关于偏向锁技术,请看这个网址:http://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5
    默认这个选项是开启的。
  • -XX:-UseCompressedOops
    不适用压缩指针,默认压缩指针开启的。当这个选项开启的时候,对象引用是32位的而不是64位。这就会减少内存的使用。这个选项只用在64位操作系统下。
  • -XX:+UseLargePages
    启用大的内存分页。默认这个选项是关闭的。
  • -XX:+UseMembar
    在线程状态转化时使用内存栅栏。这个值默认是关闭的,也就是使用独立的内存页来设置状态。
  • -XX:+UsePerfData
    使用perfdata 特性,默认是开启的。如果要关闭则使用-XX:-UsePerfData.
  • -XX:+AllowUserSignalHandlers
    允许应用使用信号处理器, 默认是不允许的。

你可能感兴趣的:(jvm,参数,选项,高级选项)