|
JVM调优总是和内存模型、GC息息相关的 传统堆内存模型分成三个部分: Young(年轻代):分成以下三个部分 Eden 存放新创建的对象 Survivor0 存放经过YGC还存活的对象 Survivor1 和S0一样 Old(年老代):年轻代经过N轮的YGC后还存活,转入年老代 Perm(永久代):存放class G1内存模型分成三个部分: Eden Space:新生代 Survivor Space:存活代 Old Generation:老年代
JVM参数调优: 1、堆设置:整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小 -Xmx1g 设置JVM最大可用内存1g -Xms1g 设置初始内存1g,一般初始内存设置成与-Xmx相同可用防止GC后JVM重新分配内存 -Xmn64m 设置年轻代大小,默认64m,推荐为整个JVM大小的3/8 -Xss128k 每个线程堆栈大小,jdk5.0后默认1m,一个进程内,线程数一般为3000-5000,可调整该数值进行设定 -XX:NewRatio=4 设置Young与Old之间的比值,该设置Young的大小为整个堆栈的1/5 -XX:SurvivorRatio=4 设置Young中Eden与Survivor之间的比值,该设置Survivor占整个Young的1/6(有两个Survivor) -XX:MaxPermSize=16m 设置永久代大小 -XX:MaxTenuringThreshold=0 设置垃圾最大年龄,该设置Eden将不会进入Survivor,直接进入Old 2、回收器设置:串行(小数据量)、并行(吞吐量优先)、并发(响应时间优先) -XX:+UseSerialGC 使用串行回收器 -XX:+UseParallelGC 使用并行回收器(只对Young有效,Old使用的是串行) -XX:ParallelGCThreads=8 设置并行回收器线程数8,该设置最好设置与处理器数量一致 -XX:+UseParallelOldGC 老年代使用并行回收器(jdk6.0以上支持) -XX:GCTimeRatio=n 设置垃圾回收时间占程序运行时间百分比(1/(1+n)) -XX:MaxGCPauseMillis=100 设置年轻代垃圾回收的最长时间 -XX:+UseAdaptiveSizePolicy 自动调整年轻代大小与Survivor的比例,使用并行回收器时,推荐开启 -XX:+UseConcMarkSweepGC 设置老年代并发回收,该设置会导致新生代比值-XX:NewRatio的设置失效 -XX:UseParNewGC 设置新生代为并发回收,可与CMS回收同时设置,jdk5.0以上JVM根据系统自动设置 -XX:CMSFullGCBeforeCompaction=5 运行5次GC后,对内存进行压缩、整理,减少碎片化 -XX:+UseCMSCompactAtFullCollection 该设置会对老年代进行压缩、整理,弊端是影响性能 应用: 吞吐量优先的应用,一般设置一个很大的Young和一个较小的Old,可以尽可能回收短期的对象,减少中期对象,年老代尽量只存放长期存活的对象 响应优先的应用,年老代使用并发收集器,年轻代尽量设置得较大 碎片处理: -XX:+UseCMSCompactAtFullCollection 启用设置对老年代进行压缩整理
-XX:CMSFullGCBeforeCompaction=n 设置内存压缩整理的频率,每n次GC整理一次
GC算法 标记清除(Mark-Sweep):最基本的GC算法,先标记,后清除,算法简单,效率低,且会产生大量的碎片 标记复制(HotSpot新生代采用的算法):Double内存,复制的时候进行清理,算法简单高效,但是需要额外一倍内存,且在对象存活率低的时候高效,在对象存活率高的时候就变得低效 标记整理(老年代采用的算法)
新生代GC Serail GC ParNew GC
Parallel Scanvenge GC 年老代GC Serail Old GC Parallel Old GC Concurrent Mark Sweep
串行: 单线程,只有一个GC线程执行任务 并行: 多线程,多个GC线程执行任务,不能与用户线程同时进行
并发: 能与用户线程同时进行的GC
例子: -Xms6g -Xmx6g -Xmn4g -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=3 -XX:SurvivorRatio=6 -XX:MaxTenuringThreshold=15 -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:CMSInitiatingOccupancyFraction=80
|