JVM参数详解
内存参数
参数 | 含义 | 默认值 | 示例 | 说明 |
-Xms | 初始堆大小 | 物理内存的1/64(<1GB) | -Xms1g | 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制. |
-Xmx | 最大堆大小 | 物理内存的1/4(<1GB) | -Xmx1g | 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制 |
-Xmn | 年轻代大小 | -Xmn512m | 注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小. 增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8 |
|
-XX:NewRatio | 年轻代与年老代的比值 | -XX:NewRatio=1 | -XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。 |
|
-XX:SurvivorRatio | Eden区与Survivor区的大小比值 | 默认8:1:1 | 设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10 | |
-Xss | 每个线程的堆栈大小 | JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右 一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。 |
||
-XX:MetaspaceSize | 初始元数据空间大小 | |||
-XX:MaxMetaspaceSize=128m | 最大元数据空间大小 | |||
-XX:MaxTenuringThreshold |
晋升到老年代的对象年龄 |
-XX:MaxTenuringThreshold=15 |
每个对象坚持过一次MinorGC后对象年龄+1,默认值是15,年龄超过15进入到老年代,该参数在串行GC时有效 |
|
-XX:MaxDirectMemorySize |
跟堆内存大小保持一致 |
-XX:MaxDirectMemorySize=1G |
堆内存大小如果不设置的话,默认为操作系统的 1/4, 所以 DirectMemory的大小限制JVM的Runtime.getRuntime().maxMemory()内存大小 . |
|
-XX:+HeapDumpOnOutOfMemoryError |
OOM时dump快照 |
|
||
-XX:HeapDumpPath |
-XX:HeapDumpPath={path} |
OOM的时候会输出dump快照到{path}目录,只需要指向目录,文件名JVM会保持唯一性。 | ||
-XX:+DisableExplicitGC |
忽略手动调用GC |
忽略手动调用GC, System.gc()的调用就会变成一个空调用,完全不触发GC |
||
-XX:+UseConcMarkSweepGC |
使用
CMS垃圾收集器 |
|||
-XX:+CMSParallelRemarkEnabled |
降低标记停顿 |
|||
-XX:LargePageSizeInBytes |
内存页的大小 |
-XX:LargePageSizeInBytes=128m |
||
-XX:+UseFastAccessorMethods |
原始类型的快速优化 |
|||
-XX:+UseCMSInitiatingOccupancyOnly |
使用手动定义初始化定义开始CMS收集 |
|||
-XX:CMSInitiatingOccupancyFraction |
-XX:CMSInitiatingOccupancyFraction=70 |
使用CMS作为垃圾回收内存使用70%后开始CMS收集 |
||
-Duser.timezone |
-Duser.timezone=GMT+8 |
设定GMT区域,避免CentOS坑爹的时区设置 |
||
-XX:-OmitStackTraceInFastThrow |
JDK5之后JVM对异常做了一个优化,对于一些频繁抛出的异常,JIT重新编译后会抛出没有堆栈信息的异常,-server模式下是默认开启的,因此在频繁抛出某个异常一段时间后,该优化开始起作用,即只抛出没有堆栈的异常信息。 |
|||
-XX:+PrintGCDetails |
打印GC详细记录 |
|||
-Xloggc |
把gc日志输出到指定文件 |
-Xloggc:logs/gc.log | ||
-XX:+PrintGCTimeStamps |
显示的时间代表JVM启动至记录日志的时间。 |
|||
-XX:+PrintGCDateStamps |
会添加上每行信息的绝对日期。 |