其中常用回收组合
新生代GC策略 | 年老代GC策略 | 说明 | |
组合1 | Serial | Serial Old | Serial和Serial Old都是单线程进行GC,特点就是GC时暂停所有应用线程。 |
组合2 | Serial | CMS+Serial Old | CMS(Concurrent Mark Sweep)是并发GC,实现GC线程和应用线程并发工作,不需要暂停所有应用线程。另外,当CMS进行GC失败时,会自动使用Serial Old策略进行GC。 |
组合3 | ParNew |
CMS | 使用-XX:+UseParNewGC选项来开启。ParNew是Serial的并行版本,可以指定GC线程数,默认GC线程数为CPU的数量。可以使用-XX:ParallelGCThreads选项指定GC的线程数。 如果指定了选项-XX:+UseConcMarkSweepGC选项,则新生代默认使用ParNew GC策略。 |
组合4 | ParNew |
Serial Old | 使用-XX:+UseParNewGC选项来开启。新生代使用ParNew GC策略,年老代默认使用Serial Old GC策略。 |
组合5 | Parallel Scavenge |
Serial Old | Parallel Scavenge策略主要是关注一个可控的吞吐量:应用程序运行时间 / (应用程序运行时间 + GC时间),可见这会使得CPU的利用率尽可能的高,适用于后台持久运行的应用程序,而不适用于交互较多的应用程序。 |
组合6 | Parallel Scavenge |
Parallel Old | Parallel Old是Serial Old的并行版本 |
组合7 | G1GC |
G1GC | -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC #开启 |
JAVA_OPTS="-server -Xms100m -Xmx100m -XX:PermSize=600m -XX:MaxPermSize=600m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/XXX/testdump -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=4 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/liuhua/tomcat_gc.log -Dcom.sun.management.jmxremote -Dfile.encoding=utf-8"
以上使用的 组合3 jdk7和tomcat7使用以上配置 建议
JAVA_OPTS="-server -Xms100m -Xmx100m -XX:PermSize=600m -XX:MaxPermSize=600m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/XXX/testdump -XX:+UseG1GC -XX:MaxGCPauseMillis=300 -XX:ParallelGCThreads=4 -XX:ConcGCThreads=4 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/liuhua/tomcat_gc.log -Dcom.sun.management.jmxremote -Dfile.encoding=utf-8"
以上是 组合7 jdk8和tomcat9使用以上配置 建议
其中g1日志的说明 参考https://blog.csdn.net/weitry/article/details/53170138
JVM GC参数配置说明 参考https://blog.csdn.net/jenny_sun1989/article/details/40785897
JVM 之 ParNew 和 CMS 日志分析 参考 http://ju.outofmemory.cn/entry/363883
JVM参数设置、分析 参考https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
ES(Elasticsearch)的JVM配置 参考https://blog.csdn.net/u013673976/article/details/73549924
GC算法 垃圾收集器 参考http://www.ityouknow.com/jvm/2017/08/29/GC-garbage-collection.html