2008年9月11日星期四

JVM_011:HotSpot JVM 参数介绍

参数相当的多,特别是-XX的参数,有近千个,都列出来有些疯狂,因此只列出了可能会用到的参数(有中文说明的),那些不常用的估计一辈子也用不到。这就不少了,这么多的参数,我的建议是:见一个,学一个,消灭一个。

 1. 标准参数(运行java,可以看详细说明) 
(1)-client:代码编译快速,JVM启动迅速,占用内存范围小,运行时间短。
-hotspot 即 -client,已经不推荐使用。JVM 默认值。
(2)-server:优化代码编译(启动JIT编译,
关于JIT,参见JIT 是啥东东?》),JVM启动较慢,占用内存范围大,运行时间长。 
(3)-verbose[:class|gc|jni]:打印详细的输出(class、gc、jni)
(4)-cp:类路径
(5)-classpath:类路径
(6)-version:打印
版本号
(7)-showversion:
打印版本号并显示参数说明
(8)-fullversion:打印详细的版本号
(9)-agentlib:[=]
(10)-agentpath:[=]
(11)-javaagent:[=]
(12)-d32
(13)-d64
(14)-ea[:packagename...|:classname]
(15)-enableassertions[:packagename...|:classname]
(16)-da[:packagename...|:classname]
(17)-disableassertions[:packagename...|:classname]
(18)-esa
(19)-enablesystemassertions
(20)-dsa
(21)-disablesystemassertions
(22)
-D[name]=[value]:设置一个系统属性
(23)-jre-restrict-search
(24)-jre-no-restrict-search

2. -X 参数
(运行java -X,可以看详细说明)
(1)-Xtm
(2)-Xbootclasspath[/a|/p]:<path>
(3)-Xdebug
(4)-Xfuture
(5)-Xcheck:jni
(6)-Xshare:off
(7)-Xshare:auto
(8)
-Xshare:on
(9)-Xnoclassgc
(10)
-Xss<size> 设置每个线程的堆栈大小。默认值:1M(JDK5.0),256k(JDK5.0之前)。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
(11)-Xoss<size>
(12)-Xms<size>:Heap的最小值。默认是物理内存的1/64。
(13)-Xmx<size>Heap的最大值。默认是物理内存的1/4。
(14)-Xmn<size>:直接指定年轻代的大小。此值对系统性能影响甚大,Sun官方推荐为Heap的3/8。
(15)-Xrs
(16)-Xrunhprof[:help]|[:option=value, ...]
(17)-Xmaxjitcodesize<size>
(18)
-Xsqnopause
(19)-Xoptimize
(20)-Xmixed
(21)-Xint
(22)-Xincgc
(23)-Xconcgc
(24)-Xprof
(25)-Xaprof
(26)-Xloggc:<file>:指定垃圾收集日志文件。
(27)-Xcomp
(28)-Xbatch
(29)-Xconcurrentio
(30)-Xgenconfig
(31)-Xverifyheap

3. -XX 参数 
(1)XX:MinHeapFreeRatio=:设定Heap剩余空间最小值百分比,如果小于此值,JVM会增大Heap空间直到-Xmx。默认值:40%。如果把-Xms和-Xmx设置成相等后,则不起作用。
(2)XX:MaxHeapFreeRatio=:设定Heap剩余空间最大值百分比,如果大于此值,JVM会减小Heap空间直到-Xms。默认值:70%。如果把-Xms和-Xmx设置成相等后,则不起作用。
(3)-XX:+PrintGCDetails:显示GC详细信息。
(4)-XX:+PrintGCTimeStamps:显示每次GC开始的时间戳。
(5)-XX:+PrintGCApplicationConcurrentTime:显示应用执行的时间。
(6)-XX:+PrintGCApplicationStoppedTime:显示应用被暂停的时间。
(7)-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。
 
(8)-XX:NewRatio=:设定年老代与年轻代(包括Eden和两个Survivor区)的比值。比如设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个Heap的1/5。
(9)-XX:SurvivorRatio=:设定年轻代中Eden区与Survivor区的比值。默认值32。比如设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个 Survivor区占整个年轻代的1/6。Survivio的空间过大会造成浪费,过小会使一些年轻对象潜逃到年老代。
(10)-XX:NewSize=:设置年轻代最小值。
(11)-XX:MaxNewSize=:设置年轻代最大值。
(12)-XX:+UseParNewGC:设置年轻代为并行收集。可与CMS收集同时使用。
(13)-XX:TargetSurvivorRatio:设置Survivor区使用的百分比。默认值是50%

(14)-XX:MaxTenuringThreshold=:设置熬过年轻代多少次收集后移入年老代,CMS中默 认为0,熬过第一次GC就转入,不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代的存活时间,增加在年轻代即被回收的概率。
(15)-XX:+PrintTenuringDistribution:查看年老代收集信息。
(16)-XX:+UseConcMarkSweepGC:设置年老代为并发收集。
 
(17)-XX:PermSize=:设定永久代最小值。
(18)-XX:MaxPermSize=:设定永久代最大值。


参考文献:
1. 《A Collection of JVM Options

没有评论: