一、先看一段JVM参数配置:
-
-XX:+UseCompressedOops
-Xms3096m
-Xmx3096m
-XX:PermSize=512
-XX:MaxPermSize=1024m
-XX:NewSize=2048m
-XX:MaxNewSize=2048m
-XX:SurvivorRatio=8-verbose:gc
-Xloggc:/data/dataLogs/gc/gc.log
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSClassUnloadingEnabled
-XX:+DisableExplicitGC-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/data/dataLogs/dump
参数介绍:
-XX:+UseCompressedOops 这个可以压缩指针,起到节约内存占用的新参数。
通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(更宽的寻址)。
对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内存占用,从JDK1.6开始支持。
-Xms 设置JVM初始堆内存。
-Xmx 设置JVM最大堆内存。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn:设置年轻代大小。
-Xss:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为128k.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
-XX:MaxTenuringThreshold:设置垃圾最大年龄.如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活 时间,增加在年轻代即被回收的概率。
-XX:MaxPermSize 设置持久代初始值。
-XX:MaxPermSize 设置持久代最大值。
-XX:NewSize 设置年轻代初始值。
-XX:MaxNewSize 设置年轻代最大值。
XX:NewRatio:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代).设置为2,则年轻代与年老代所占比值为1:2,年轻代占整个堆栈的1/3。
-XX:SurvivorRatio:设置年轻代中Eden区与Survivor区的大小比值.设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10。
-verbose:gc 表示输出虚拟机中GC的详细情况。
-Xloggc 设置gc日志路径。
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)。
-XX:+PrintGCDetails 输出GC的详细日志。
-XX:+UseConcMarkSweepGC CMS收集,设置年老代为并发收集。
-XX:+UseCMSCompactAtFullCollection 打开内存空间的压缩和整理,在Full GC后执行。可能会影响性能,但可