JVM配置参数
笔者将所有JVM参数整合并仔细梳理后,将我们无法感知的参数剔除,提取出较有用的参数。如果想查看所有GC配置参数,可在容器中添加参数 -XX:+PrintFlagsFinal 启动容器即可查阅。
堆配置
参数 | 说明 |
---|
-Xms64M | 初始堆占用,InitialHeapSize(初始堆占用) = NewSize(初始化新生代占用) + OldSize(初始化老年代占用),默认64M |
-Xmx150M | 堆最大占用,MaxHeapSize,默认150M |
-Xmn32M | 新生代最大占用,MaxNewSize,默认32M ;NewSize(初始新生代大小)默认等于MaxNewSize |
auto compute | 老年代大小,OldSize(老年代大小) , 默认等于 InitialHeapSize(初始堆占用) - MaxNewSize(新生代最大占用),自动计算,无需配置 ; |
栈配置
参数 | 说明 |
---|
-Xss1M | 整体栈大小,与ThreadStackSize选其一即可,整体栈大小一般2M足够,默认使用-XX:ThreadStackSize,不对总体大小做限制,对单个线程栈做限制 |
-XX:ThreadStackSize=16k | 每个线程的栈大小,一般局部变量数组占用绝大部分空间,默认值:16k |
GC配置
参数 | 说明 |
---|
-XX:+UseSerialGC | Serial + Serial Old,CS下的默认值 |
-XX:+UseParNewGC | ParNew + Serial Old |
-XX:+UseConcMarkSweepGC | ParNew + CMS - Serial Old(后备收集器) |
-XX:+UseParallelGC | Parallel Scavenge,BS下的默认值(java 7 |
-XX:+UseParallelOldGC | Parallel Scavenge,BS下的默认值(java 7 |
-XX:+UseG1GC | G1 BS下的默认值(java 9) |
详细配置
参数 | 说明 |
---|
-XX:SurvivorRatio=8 | eden和survivor的存活比,默认是1:8 (survivor : eden) |
-XX:PretenureSizeThreshold=0 | 直接晋升到老年代的对象大小,单位为M,默认无限制 |
-XX:MaxTenuringThreshold=15 | 晋升到老年代的对象年龄,每次Minor GC,survivor中对象的年龄+1,为0时移除survivor |
-XX:UseAdaptiveSizePolicy=false | 动态调整java堆中各个区域的大小及进入老年代的年龄。Parallel Scavenge时生效 |
-XX:HandlePromotionFailure=false | 是否允许分配担保失败,老年代不足应付新生代要移动过来的对象时的风险控制策略,(JDK 6 Update 24后已失效,默认打开) |
-XX:ParallelGCThreads=0 | 设置并行GC时进行内存回收的线程数 |
-XX:GCTimeRatio=99 | GC时间占总时间的比率,默认99,即允许1%的GC时间。 Parallel Scavenge时生效(选其一) |
-XX:MaxGCPamuseMillis=0 | 设置GC的最大停顿时间。 Parallel Scavenge时生效(选其一) |
-XX:CMSInitiatingOccupancyFraction=68 | 设置CMS收集器在老年代空间被使用多少后出发垃圾收集。 CMS时生效 |
-XX:UseCMSCompactAtFullCollection=false | 设置CMS收集器在完成垃圾收集后是否要尽心工艺瓷内存碎片整理。 CMS时生效 |
-XX:CMSFullGCsBeforeCompaction=0 | 设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片整理。 CMS时生效 |
-XX:PermSize=10M | 方法区默认大小(已失效) |
-XX:MaxPermSize=10M | 方法区最大大小(已失效) |
调试专用配置
参数 | 说明 |
---|
-XX:+PrintGCDetails | 打印gc详情 |
-XX:+PrintGCApplicationStoppedTime | 打印GCStop The World时间 |
-XX:+PrintGCDateStamps | 打印时间戳 |
-XX:+PrintReferenceGC | 打印 |
-Xloggc:gclog.log | 将日志存进gclog.log |
-XX:+HeapDumpOnOutOfMemoryError | dump出当前的内存堆转储快照 |
-XX:HeapDumpPath=E:\jvm | dump出当前的内存堆转储快照的url |
-XX:+PrintFlagsFinal | 启动打印JVM所有参数,包括默认参数 |
-Dcom.sun.management.jmxremote | 开启JMX管理功能,启动VisualVM支持,早于java6的平台 |
JEE容器中配置参数方法,以tomcat为例
- 在catalina.bat中,开头添加 set “JAVA_OPTS=-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:+PrintFlagsFinal”
- 在catalina.sh中,开头添加 JAVA_OPTS="-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:+PrintFlagsFinal"
堆栈设定比例
- JVM堆栈的设定比例一般采用默认设定比例即可,是较为合理的。当系统出现内存溢出或其它问题时,可根据具体情况调配。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e4b0679e5b424df1ae8d5d635bcb932a.png)