JVM学习笔记(四)

  1. 云栖社区>
  2. 博客>
  3. 正文

JVM学习笔记(四)

科技小先锋 2017-11-14 15:35:00 浏览986
展开阅读全文

我们前面说了很多原理,现在我们就开始实战,说一下JVM的调优参数:

一般情况JVM调优参数如下:

set JAVA_OPTS=-server -Xms1400M -Xmx1400M -Xmn768M -Xss128k -XX:PermSize=256M -XX:MaxPermSize=256M  -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -XX:+UseParNewGC -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled  -XX:+CMSClassUnloadingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0 -Xnoclassgc -XX:+DisableExplicitGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -Xloggc:../logs/gc.log
下面对这些参数做一个详细的解释:

-server 启用能够执行优化的编译器, 显著提高服务器的性能,但使用能够执行优化的编译器时,服务器的预备时间将会较长。

-Xms1548M 初始化堆大小

-Xss128k  线程的栈大小

-Xmx1548M 最大堆大小

-Xmn768M 年轻代大小

-XX:PermSize=128M 初始化持久代大小

-XX:MaxPermSize=128M 最大持久代大小

-XX:SurvivorRatio=5 年轻代中Eden区与两个Survivor区的比值,Survivor是两个,所以Eden与Survivor的比值是5:2,Eden区占了5/7.

-XX:MaxTenuringThreshold=7 表示一个对象如果在救助空间移动7次还没有被回收就放入年老代

-Xnoclassgc 缺省情况下,当一个类没有任何活动实例时,JVM 就会从内存中卸装该类,但是这样会使性能下降。如果关闭类垃圾回收,就可以消除由于多次装入和卸装同一个类而造成的开销

-XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled  -XX:+CMSClassUnloadingEnabled 由于使用的框架是Spring/Hibernate大量采用cglib,导致生成的Proxy会比较多,而这些是存放在PermGen区域,sun JDK默认情况下不会去回收,必须加上-XX:+CMSClassUnloadingEnabled  -XX:+CMSPermGenSweepingEnabled参数,JDK才会去回收这部分数据

-XX:+DisableExplicitGC 加了這個參數會停止掉WLS或是程式內直接呼叫GC,減少不必要的GC,將GC交由JVM去執行

-XX:+UseParNewGC   设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值

-XX:+UseCMSCompactAtFullCollection 打开对年老代的压缩。可能会影响性能,但是可以消除碎片(老年代才会有full gc)

-XX:CMSFullGCsBeforeCompaction=5  CMSFullGCsBeforeCompaction=N表示执行N次Full GC后执行内存压缩

-XX:-CMSParallelRemarkEnabled  降低标记停顿

-XX:CMSInitiatingOccupancyFraction=50 CMS堆上, 使用50%后开始CMS收集

-XX:SoftRefLRUPolicyMSPerMB=0 "softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap"

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:../logs/gc.log

-XX:+PrintGCDetails:输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]

-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可与上面两个混合使用

输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]



本文转自guoli0813 51CTO博客,原文链接:http://blog.51cto.com/guoli0813/303035,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
科技小先锋
+ 关注