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模式下是默认开启的,因此在频繁抛出某个异常一段时间后,该优化开始起作用,即只抛出没有堆栈的异常信息。
但由于该优化是JIT编译后才启用的,所以开始该异常的抛出是有完整堆栈信息的,但运行一段时间可能发现没有任何堆栈信息,很难定位,初次遇到很容易摸不到头脑。

-XX:+PrintGCDetails

 

打印GC详细记录

     

-Xloggc

 

gc日志输出到指定文件

   -Xloggc:logs/gc.log  

-XX:+PrintGCTimeStamps

       

显示的时间代表JVM启动至记录日志的时间。

-XX:+PrintGCDateStamps

       

会添加上每行信息的绝对日期。

 

posted @ 2020-03-03 10:04  April.Chen  阅读(7943)  评论(2编辑  收藏  举报