内存调优的目的:对于JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,重点是减少
Full GC的次数,因为它会对整个堆进行整理,导致Full GC一般由以下几种情况:
①:年老代空间不足
②:Permanet Generation空间不足
③:统计得到的GC后晋升到年老代的平均大小大于年老代剩余空间
④:System.gc()被显示调用
内存调优的手段:通过控制堆内存的各个部分的比例和GC策略来实现的。
JVM的常见配置:
-Xms:初始堆大小
-Xmx:最大堆大小
-XX:NewSize=n:设置年轻代大小
-XX:newRatio:设置年轻代和年老代的比例。如:为3,表示年轻代与年老代比值为3(一般
年轻代占堆内存的三分之一比较合适),此时年轻代占整个年轻代和年老代和的四分之一
-XX:SurvivorRatio=n:年轻代中有Eden区与两个Survivor区(From space和To space)的比
值,如:3,表示Eden:Survivor=3:2,因此一个Suuvivor区占整个年轻代的五分之一
-XX:MaxPermSize=n:设置持久代(用于存放方法区数据)的大小。
收集器的设置:
-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器
垃圾回收统计信息:
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
并行收集器设置:
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式:1/(N+1)
并发收集器设置
-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况
-XX:+ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时使用的CPU数。并行收集线程数