JVM启动参数建议

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: est.hprof                ##  指定 dump 文件存储路径

内存溢出的三种类型:
1.第一种OutOfMemoryError: PermGen space,发生这种问题的原意是程序中使用了大量的jar或class
2.第二种OutOfMemoryError: Java heap space,发生这种问题的原因是java虚拟机创建的对象太多
3.第三种OutOfMemoryError:unable to create new native thread,创建线程数量太多,占用内存过大
原文地址:https://www.cnblogs.com/zhaoguan_wang/p/13406891.html