Linux操作系统下内存4G,配置JAVA8 JVM:
-server -Xms2G -Xmx2G -Xmn256m -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -Xss256k -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/appl/gc.log -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly
参数含义说明:
- -server:设置JVM使用server模式,server模式启动慢,运行性能和内存效率高,适用于生产服务器;相对应的有-client模式,client模式启动速度快,运行性能和内存效率不高,适用于应用开发和调试
- -Xms2G:设置JVM初始分配的堆内存,默认值为物理内存的1/64,建议修改为与-Xmx一致
- -Xmx2G:设置JVM最大允许使用的堆内存,默认值为物理内存的1/4,建议修改为物理内存的2/3-1/4。
- -Xmn256m:设置JVM年轻代的大小,建议不要太大,过大可能会导致YGC时间过长,影响吞吐量
- -Xss256k:设置JVM中每个JAVA线程堆栈的大小,一般默认512~1024kb,建议值设置在默认范围内
- -XX:MetaspaceSize=512M:设置JVM初始元空间大小,JAVA8以上才有该字段。当达到该值将触发垃圾收集进行类型卸载。同时,如果释放了大量的空间,GC将适当降低该值;如果释放了很少的空间,GC则会在不超过MaxMetaspaceSize时,适当提高该值。由于GC每次调整元空间的代价很昂贵,因此建议该值与MaxMetaspaceSize一致
- -XX:MaxMetaspaceSize=512M:设置JVM初始元空间最大值
- -XX:+UseParNewGC:设置JVM开启并发串行垃圾收集器,该收集器与CMS收集器配合工作。相对应的还有:UseParallelGC并行垃圾收集器,该收集器最大化的提高程序吞吐量,同时缩短程序停顿时间,但不与CMS收集器配合工作
- -XX:+UseConcMarkSweepGC:设置JVM开启并发标记清除收集器,即开启CMS收集器,一般和 XX:+UseParNewGC 一起设置使用
- -XX:+CMSClassUnloadingEnabled:设置JVM中CMS收集器对元空间(永久代)进行回收
- -XX:+HeapDumpOnOutOfMemoryError:设置JVM发生OOM时,自动生成DUMP文件。
- -XX:HeapDumpPath=./java_heapdump.hprof:设置JVM生成DUMP文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=./java_heapdump.hprof,如果不指定文件名,默认为:java_<pid><date><time>_heapDump.hprof。
- -verbose:gc:设置JVM输出GC日志 , -XX:+PrintGC 与 -verbose:gc 是一样的,可以认为-verbose:gc 是 -XX:+PrintGC的别名.
- -XX:+PrintGCDetails:设置JVM打印GC详细信息
- -XX:+PrintGCTimeStamps:设置JVM打印gc时间戳(以基准时间的形式)
- -XX:+PrintGCDateStamps:设置JVM打印GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
- -Xloggc:/appl/gc.log:设置JVM打印GC日志目录
- -XX:CMSInitiatingOccupancyFraction=75:设置CMS收集器在对内存占用率达到75%的时候开始GC(因为CMS会有浮动垃圾,所以一般都较早启动GC);
- -XX:+UseCMSInitiatingOccupancyOnly:设置CMS收集器只使用设定的回收阈值(上面指定的75%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整