Java HotSpot VM命名参数选项详解

jopen 11年前

Java Hotspot VM 可选参数选项可以划分为四类:

Ø  行为选项改变了基本VM的行为。

Ø  G1垃圾收集器选项(GarbageFirst (G1) Garbage Collection Options

Ø  性能调优选项就一个个能够用来调节VM性能的旋钮

Ø  调试选项一般跟踪、打印或是输出VM信息。在跟踪程序的处理流程非常有用,尤其对于不知道程序有问题而不知道问题到底处在哪里时就特别有用。

行为选项

Option and Default Value

Description

-XX:-AllowUserSignalHandlers

如果应用程序安装了信号处理器,就不会申诉(仅与Solaris和Linux系统有关)。

-XX:AltStackSize=16384

交替的信号栈大小(k 字节). (仅与Solaris 有关, 在5.0版本已经移除.)

-XX:-DisableExplicitGC

使方法System.gc()调用失效,当需要时 JVM 仍然执行垃圾回收。

-XX:+FailOverToOldVerifier

当新的类型检测器失败时切换到旧的认证器(jdk6引入此项)。

-XX:+HandlePromotionFailure

最年轻代集合不需要一个对所有存在对完全提升的保证。 (在1.4.2 升级到11引进) [5.0 和早期的版本为false]

-XX:+MaxFDLimit

猛烈将文件描写的数量增加到最大。 (仅与Solaris系统有关.)

-XX:PreBlockSpin=10

快速的旋运动变量数设定-XX:+UseSpinning.在进入操作系统线程同步代码前,控制最大旋转允许的跌代数。 (在1.4.2.引入)

-XX:-RelaxAccessControlCheck

放松访问控制检查验证 (在jdk6引入)

-XX:+ScavengeBeforeFullGC

年轻代GC优先于一个完全GC。 (在jdk1.4.1.引入)

-XX:+UseAltSigs

对于VM内部信号,应用轮换信号代替SIGUSR1 和SIGUSR2 . (仅与Solaris有关.)

-XX:+UseBoundThreads

绑定用户级别线程到kernel 线程. (仅与Solaris有关.)

-XX:-UseConcMarkSweepGC

为旧代(old generation)使用并发标记的搜索集合. (在1.4.1引入)

-XX:+UseGCOverheadLimit

使用一种策略,这种策略能够限制VM在内存溢出前花费在GC上的时间比例。 (在jdk 6进入.)

-XX:+UseLWPSynchronization

使用基于LWP-代替基于线程同步。(在jdk1.4.0. 仅针对Solaris)

-XX:-UseParallelGC

使用并行垃圾收集器对垃圾进行回收。 (在jdk 1.4.1引入)

-XX:-UseParallelOldGC

所有的集合使用并行垃圾收集器。能够自动化地设置这个选项 -XX:+UseParallelGC. (在jdk 5.0 升级到 6时引入.)

-XX:-UseSerialGC

使用序列的垃圾收集器. (在jdk 5引入.)

-XX:-UseSpinning

在同步进入到操作系统线程同步代码前,能够在Java监视器中单纯的旋转。 (仅与jdk1.4.2 到 5.0 有关.)

-XX:+UseTLAB

使用本地线程对象分配 (在jdk 1.4.0引入,众所周知的, UseTLE优先于那种.)

-XX:+UseSplitVerifier

使用StackMapTable 属性来作为新类型检测器。(在jdk 5.0引入.)[5.0: false]

-XX:+UseThreadPriorities

使用本地线程优先级。

-XX:+UseVMInterruptibleIO

线程中断前或是EINTR 在OS_INTRPT中对于I/O操作的结果 (在jdk 6 引入,仅与Solaris 有关)

G1(Garbage First)垃圾收集选项

Option and Default Value

Description

-XX:+UseG1GC

使用G1 (Garbage First) 收集器

-XX:MaxGCPauseMillis=n

对于最大GC停顿时间,设置一个目标。 这是一个软目标,于此同时JVM将会做最大努力去完成它。

-XX:InitiatingHeapOccupancyPercent=n

整个堆占据的百分比去开始一个并发GC循环。他被GC使用来触发一个基于整个堆占据的并发GC循环, 不仅仅只有一个地代(G1). 0值说明是“做实时GC循环”。默认值是45 。

-XX:NewRatio=n

旧/新代大小比例。默认是2.

-XX:SurvivorRatio=n

eden/survivor 空间大小比例。默认值是8

-XX:MaxTenuringThreshold=n

永久占用临界最大值。默认值是15.

-XX:ParallelGCThreads=n

在并行的垃圾收集阶段设置使用的线程数。默认值因JVM运行的平台的不同而不同。

-XX:ConcGCThreads=n

并发垃圾收集线程 将会使用默认值因JVM运行的平台的不同而不同.

-XX:G1ReservePercent=n

设置被保留作为吊顶的堆量,以减少可能的增量失败. 默认值是10.

-XX:G1HeapRegionSize=n

伴随G1 Java堆被子划分为统一的大小区域。这个参数的默认值取决于根据环境改造地基准堆得大小。最小是1M币,最大是32Mb。

性能优化选项

Option and Default Value

Description

-XX:+AggressiveOpts

打开点性能的编译器优化,它预计将在即将发布为默认. (在jdk 5 升级到6引入.)

-XX:CompileThreshold=10000

在编译之前,方法数量调用/分支[-client: 1,500]

-XX:LargePageSizeInBytes=4m

设置大页面使用Java堆的大小 (在1.4.0 更新中引入) [amd64: 2m.]

-XX:MaxHeapFreeRatio=70

在GC之后最大堆释放的百分比,这样来避免萎缩。

-XX:MaxNewSize=size

新代(字节)最大值自从1.4, MaxNewSize is 计算作为NewRatio一个方法. [1.3.1 Sparc: 32m; 1.3.1 x86: 2.5m.]

-XX:MaxPermSize=64m

永久代的大小[5.0 和 新的64 bit VMs 扩展了30%的大小; 1.4 amd64: 96m; 1.3.1 -client: 32m.]

-XX:MinHeapFreeRatio=40

GC之后,自由的堆得最小百分来避免扩展。

-XX:NewRatio=2

新/老代的比例[Sparc -client: 8; x86 -server: 8; x86 -client: 12.]-client: 4 (1.3) 8 (1.3.1+), x86: 12]

-XX:NewSize=2m

新代的默认大小 (字节) [5.0 和新的64 bit VMs 扩展了30% larger; x86: 1m; x86, 5.0 and older: 640k]

-XX:ReservedCodeCacheSize=32m

预留的缓存代码大小 (字节) – 最大代码缓冲大小. [Solaris 64-bit, amd64, and -server x86: 48m; in 1.5.0_06 and earlier, Solaris 64-bit and amd64: 1024m.]

-XX:SurvivorRatio=8

活跃区/幸免区(eden/survivor)的空间大小比例[Solaris amd64: 6; Sparc in 1.3.1: 25; other Solaris platforms in 5.0 and earlier: 32]

-XX:TargetSurvivorRatio=50

在清理完后幸存空间的百分率。.

-XX:ThreadStackSize=512

线程栈的大小(字节). (0 意味着使用默认的栈大小[Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc 64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all others 0.]

-XX:+UseBiasedLocking

能使用带有偏见的锁,更多的细节,查看优化例子 ( 5.0 更新到 6引入.) [5.0: false]

-XX:+UseFastAccessorMethods

使用优化了Get GetField版本.

-XX:-UseISM

使用内部的共享内存. [仅对Solaris 平台] 更多的细节,查阅内部的共享内存 .

-XX:+UseLargePages

使用大的内存页 (5.0 更行引入.),更多的细节,请查阅Java对大内存页 支持

-XX:+UseMPSS

使用多个页大小来支持对于栈w/4mb页.  不用伴随使用ISM,由于这取代了对于ISM的需要。 (1.4.0 更新引进,进对Solaris 9+支持.) [1.4.1 and earlier: false]

-XX:+UseStringCache

能够缓存一般分配的字符串。
 

-XX:AllocatePrefetchLines=1

最后一个对象分配使用在JIT编译代码产生的预取指令后,加载缓存线数默认的值是1. 最后分配的对象是一个实例以及如果它是一个数组便是值3. 
 

-XX:AllocatePrefetchStyle=1

产生预取指令的代码样式.
0 – 没有预取指令产生,
1 – 在每个分配后,执行预取指令,
2 – 当预取指令执行了,使用TLAB 分配水印指针到闸门。
 

-XX:+UseCompressedStrings

使用字节数组能够以纯ASCII码来描述字符串。(JDK 6 更新版本21 性能发布时引入) 
 

-XX:+OptimizeStringConcat

那儿有可能实现优化了字符串的拼接操作。(JDK 6升级到20时引入) 
 

调试选项

   略...

 JVM 工作流概述图
Java HotSpot VM命名参数选项详解

Java HotSpot VM命名参数选项详解