JVM-调优参数-JDK 1.7及以前版本

说明

  • ==在’-XX:’和具体参数之间是没有空格的,本文中出现了部分空格是因为MD(Markdown)语法原因,MD语法中冒号加大写P是:P(表情),所以冒号和大写 P之间要有空格才能表示正确意思,在使用中请避免空格==
  • ==此文档只是在JDK1.7以及更早版本中有效,JDK1.8请查看 【JVM-调优参数-JDK1.8】==
  • ==本文提供一些常规的命令行参数和一些环境变量,这些参数都会影响Java HotSpot虚拟机的性能,除了特殊说明,本文的这些参数都可以应用在Java HotSpot Client VM和Java HotSpot Server VM。==
  • ==由于本篇着重于JVM性能调优相关参数,为此省略了部分参数==
  • ==本文摘自【Java HotSpot VM Options】并转译==
  • ==本人水平有限,如有不正确的地方烦请指出,感激不尽==

Java HotSpot VM 参数选项目录

Java HotSpot VM公认的标准参数选项都可以在java程序的运行器引用页面(如java命令的帮助页面)找到,本文只是对Java HotSpot VM的一些非标准参数选项进行补充说明:
- 以 -X开头的参数就是非标准参数选项(并不保证在所有虚拟机的实现中都有效),如果有更改的话,在JDK的发布信息中可能没有说明。
- 以 -XX开头的参数表现不保证稳定而且如果有更改,在JDK的发布信息中也没有说明。

很有用的一些 -XX 参数

在Solaris Sparc的Java SE 6的-server模式下的默认值列表就可以查看到这些有用的参数,在不同的系统和不同的JVM版本中可能有一些小小的不同,平台的默认值都可以在(java命令的)描述中显示出来:
- 布尔选项类,可以通过-XX:+打开,通过-XX:-关闭
- 数字选项类,可以通过-XX:=来设置。一些度量单位可以使用’k’或’K’,’m’或’M’,’g’或’G’
- 字符串选项类,可以使用-XX:=,经常用在一些文件名、文件路径和命令列表中

有’manageable’标识的参数都是可以通过实现JDK的管理接口(com.sun.management.HotSpotDiagnosticMXBean API)或JConsole工具来动态写入。

下面的这些选项,分类比较自由:
- 基本选项,更改VM的一些基本操作
- 垃圾第一(G1),垃圾回收选项
- 性能调优选项,可以影响VM性能的选项
- 调试选项,通常是用来调试,打印堆栈和VM的一些信息

基本(行为)选项(选取部分)

选项和默认值 描述
-XX: -DisableExplicitGC 默认情况下只要调用System.gc()就可以开启(-XX: -DisableExplicitGC).使用-XX:+DisableExplicitGC关闭调用System.gc(),==注意,当内存不足时,JVM依然会产生垃圾回收动作==
-XX:-UseConcMarkSweepGC 老年代使用并行标记清理的垃圾回收器
-XX:-UseParallelGC 使用并行垃圾回收器(1.4.1版本以后声明)
-XX:-UseParallelOldGC 全部垃圾器使用并行垃圾回收算法,在使用-XX:+UseParallelGC时自动开启此选项(版本5.0更新6以后声明)
-XX:-UseSerialGC 使用串行垃圾回收器(5.0版本以后声明)

垃圾第一(G1),垃圾回收选项

选项和默认值 描述
-XX:+UseG1GC 使用垃圾优先(G1)回收器
-XX:MaxGCPauseMillis=n 设置回收器的最大停顿时间,这是一个比较简单的目标,JVM将尽最大努力去实现它
-XX:InitiatingHeapOccupancyPercent=n 在并行GC模式下的堆占用率,它影响的是全部运行并行GC的回收器,默认值是45
-XX:NewRatio=n 老年代和新生代的空间比例,默认值是2,计算公式是NewRatio=老年代/新生代
-XX:SurvivorRatio=n 对象出生地(eden)和幸存区(s0/s1)的的空间比例,默认值是8,计算公式是SurvivorRation=eden/(s0+s1)
-XX:MaxTenuringThreshold=n 最大临界值,默认是15
-XX: ParallelGCThreads=n 设置垃圾回收器并行阶段中使用的线程数,默认值跟平台相关
-XX:ConcGCThreads=n 并行垃圾回收器的线程数量,默认值跟平台有关
-XX:G1ReservePercent=n 设置堆的临时上限,以防止因堆扩大失败而导致的错误。默认值是10
-XX:G1HeapRegionSize=n 使用G1的Java堆细分为均匀大小的区域,这个选项是设置单个区域的大小,这个选项的默认值是基于堆大小进行效率划分的值来决定(The default value of this parameter is determined ergonomically based upon heap size)。最小值是1Mb并且最大值是32Mb.

性能参数

选项和默认值 描述
-XX:+AggressiveOpts 打开点性能编译器优化,在未来版本中可能是默认打开(版本5.0更新6中声明)
-XX:CompileThreshold=10000 在编译前的方法调用数[-client:1500]
-XX:LargePageSizeInBytes=4m 设置java堆的大页容量(版本1.4.0更新1中声明)[amd64:2m]
-XX:MaxHeapFreeRatio=70 GC过后堆的最大空闲空间比例,避免过于压缩
-XX:MaxNewSize=size 新生代的最大容量,版本1.4后,通过NewRatio函数来计算(1.3.1 Sparc: 32m; 1.3.1 x86: 2.5m)
-XX:MaxPermSize=64M 老年代的最大容量,[5.0以后,64位的VM都扩容了30%,1.4 amd64:96m,1.3.1 -client:32m]
-XX:MinHeapFreeRatio=40 GC过后堆的最小空闲空间比例,避免过于膨胀
-XX:NewRatio=2 老年代和新生代的空间比例,计算公式:NewRatio=老年代/新生代。[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位VM扩张30%;x86:1m;x86,5.0之前:640k]
-XX:ReservedCodeCacheSize=32m 保留代码缓存大小–代码缓存容量的最大值[Solaris 64位,amd64和 x86 -server:2048m;版本5.0_06以后,Solaris 64位和amd64:1024m]
-XX:SurvivorRatio=8 对象出生地(eden)和幸存区(s0/s1)的空间比例,计算公式:SurvivorRatio=eden/(s0+s1)。[Solaris amd64:6;1.3.1版的Sparc:25;其他Solaris平台,5.0以前:32]
-XX:TargetSurvivorRatio=50 清理过后幸存区的期望空间大小
-XX:ThreadStackSize=512 线程栈大小.(0表示使用默认值)[Sparc:512;Solaris x86:320(5.0以前的256系列);Sparc 64位:1024;Linux amd64:1024(5.0以前是0);其他都是0]
-XX:+UseBiasedLocking 使用偏向锁(版本5.0更新6中声明)[5.0 false]
-XX:+UseFastAccessorMethods 使用Get<基本类型>字段的优化版本
-XX:-UselSM 使用私有共享内存[非Solaris平台不允许使用]
-XX:+UseLargePages 使用大页内存(版本5.0更新5中声明)
-XX:+UseMPSS 使用多页大小支持W/4MB页的堆,不要使用ISM,因为这取代了ISM的需要。
-XX:+UseStringCache 启用对常用分配字符串的缓存
-XX:AllocatePrefetchLines=1 使用JIT编译代码生成的预取指令在最后一个对象分配后加载的缓存行数。如果最后一个分配对象是实例,则默认值是1,是数组则为3
-XX:AllocatePrefetchStyle=1 生成预取指令的代码样式:0,没有预取指令生成;1,在每次分配之后执行预取指令; 2,当预取指令执行的时候,使用TLAB分配水印指针(use TLAB allocation watermark pointer to gate )
-XX:+UseCompressedStrings 使用字符串的字节数组来表示ASCII
-XX:+OptimizeStringConcat 尽可能的优化字符串的相关操作

调试选项

选项和默认值 描述
-XX:-CITime 打印JIT编译器的时间消耗
-XX:ErrorFile=./hs_err_pid.log 如果有错误产生,则把错误数据保存在对应文件中
-XX:-ExtendedDTraceProbes 打开影响性能追踪检测
-XX:HeapDumpPath=./java_pid/hprof 设置导出堆大小的目录或文件名的路径
-XX:-HeapDumpOnOutOfMemoryError 当产生内存溢出的时候导出堆信息到文件中
-XX: OnError=”;” 当发生致命错误的时候运行用户定义的命令
-XX: OnOoutOfMemoryError=”;” 当产生内存溢出的时候运行用户定义的命令
-XX: -PrintClassHistogram 使用Ctrl-Break打断的时候打印类实例的直方图
-XX: -PrintConcurrentLocks 使用Ctrl-Break打断的时候打印java.util.concurrent.Lock信息
-XX: -PrintCommandLineFlags 打印随命令行而来的标识
-XX: -PrintCompilation 打印方法被编译时的信息
-XX: -PrintGC 打印进行垃圾回收时的信息
-XX: -PrintGCDetails 打印进行垃圾回收时的详细信息
-XX: -PrintGCTimeStamps 打印进行垃圾回收时的时间戳
-XX: -PrintTenuringDistribution 打印期限年龄信息(Print tenuring age information)
-XX: -PrintAdaptiveSizePolicy 打印自适应生成大小的信息
-XX:-TraceClassLoading 追踪类加载信息
-XX:-TraceClassLoadingPreorder 当按引用顺序加载的时候追踪所有类
-XX:-TraceClassResolution 追踪常量池分解
-XX:-TraceClassUnloading 追踪卸载类
-XX:-TraceLoaderConstraints 追踪加载器约束的记录
-XX:+PerfDataSaveToFile 在退出时保存jvmstat的二进制数据
-XX: ParallelGCThreads=n 设置新生代和老年代中的并行回收器的垃圾回收线程数量,默认值跟平台有关
-XX:+UserCompressedOops 开启压缩指针的使用(对象引用使用32位的偏移量来表示,而不是64位的指针)来优化64位的性能,使得java堆容量小于32gb(Enables the use of compressed pointers (object references represented as 32 bit offsets instead of 64-bit pointers) for optimized 64-bit performance with Java heap sizes less than 32gb)
-XX:+AlwarysPreTouch 在JVM初始化区间预触摸Java堆,在初始化区间,堆的每一页都进行了类似的调零,相当于在程序运行时进行增量变化
-XX:AllocatePrefetchDistance=n 设置对象分配的预取间隔。新对象写入时所用的内存空间都是根据这个值从缓存中来分配,除了最后分配的对象。每个java线程都有自己的分配点。这个选项的默认值跟平台有关
-XX:InlineSmallCode=n 仅在方法生成的本地字节码大小小于此之前,内联先前编译的方法(Inline a previously compiled method only if its generated native code size is less than this)。默认值跟平台有关
-XX:MaxInlineSize=35 内联方法的最大字节码容量
-XX:FreqInlineSize=n 内联方法被频繁执行时的最大字节码容量
-XX:LoopUnrooLimit=n 在Server模式下的编译器展开循环体的节点要小于这个选项的值,这个选项的值,在Server模式下的编译器中是一个函数,而不是一个具体值,这个参数的默认跟平台有关。
-XX:InitialTenuringThreshold=7 设置年轻代中使用自适应GC大小的并行收集器的初始临界值(threshold),这个值是一个对象在被推进老年代之前,在年轻代中的幸存次数。
-XX:MaxTenuringThreshold=n 设置使用自定义GC大小的最大临界值,这个选项的最大值是15,并行收集器的默认值是15而CMS的默认值是4
-Xloggc: 输出GC详细日志到指定文件,具体详细输出内容由GC标签参数决定
-XX:-UseGCLogFileRotation 打开循环输出GC日志,同时需要-Xloggc支持
-XX:NumberOfGClogFiles=1 设置循环输出GC日志的文件名,必须有一个以上,循环日志文件的命名需遵从以下规则:.0,.1,…,.n-1。
-XX:GCLogFileSize=8K 日志文件循环的条件,日志文件的大小,必须大于等于8k

猜你喜欢

转载自blog.csdn.net/Android_app/article/details/76019789