JVM启动参数建议如下:
-server -Xmx8000M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:PrintHeapAtGC
java启动参数共分为三类;
其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
-server ## 服务器模式,不配置默认是-client,一定要作为第一个参数
-Xms2g ## 初始化堆内存大小
-Xmx2g ## 堆内存最大值
-Xmn256m ## 年轻代内存大小
-XX:PermSize=256m ## 永久代初始值, 默认是物理内存的1/64
-XX:MaxPermSize=256m ## 永久代最大值,默认是物理内存的1/4。建议分别设置为128、512
-XX:NewRatio=3 ## 表示年轻代与年老代的比值,去掉-Xmn这个参数后,默认使用这个参数,比如为3,则新生代占堆的1/4,年老代占3/4。
-XX:+UseParNewGC ## 对年轻代采用多线程并行回收
-XX:+UseConcMarkSweepGC ## 对年老代采用并发标记清除(CMS)收集器
-XX:+CMSParallelRemarkEnabled ## 启用并行标记,降低标记停顿
-XX:+ScavengeBeforeFullGC ## FullGC前回收年轻代内存,默认开启
-XX:+CMSScavengeBeforeRemark ## CMS remark前回收年轻代内存
-XX:+UseCMSInitiatingOccupancyOnly ## 使用设定的回收阈值(下面指定的70%)开始CMS收集,如果不指定,JVM仅在第一次使用设定值,后续则自动调整
-XX:CMSInitiatingOccupancyFraction=70 ## 使用cms作为垃圾回收使用70%后开始CMS收集
-XX:+UseCMSCompactAtFullCollection ## Full GC后会进行内存碎片整理、压缩
-XX:CMSFullGCsBeforeCompaction=0 ## 设置在几次CMS垃圾收集后,触发一次内存整理
-XX:+PrintGCApplicationConcurrentTime ## 打印每次垃圾回收前,程序未中断的执行时间
-XX:+PrintGCApplicationStoppedTime ## 打印垃圾回收期间程序暂停的时间。
-XX:PrintHeapAtGC ## 打印GC前后的详细堆栈信息
-XX:+HeapDumpOnOutOfMemoryError ## 当OOM发生时自动生成 Heap Dump 文件
-XX:+HeapDumpBeforeFullGC ## 当 JVM 执行 FullGC 前执行 dump
-XX:+HeapDumpAfterFullGC ## 当 JVM 执行 FullGC 后执行 dump
-XX:+HeapDumpOnCtrlBreak ## 交互式获取dump。在控制台按下快捷键Ctrl + Break时,JVM就会转存一下堆快照。
-XX:HeapDumpPath=c:\test.hprof ## 指定 dump 文件存储路径