??xml version="1.0" encoding="utf-8" standalone="yes"?> G1不必明确讄新生代大,其自动调优也十分可靠Q对于停时间往往在长旉q行后可以达到预期效果;对吞吐量优先的应用,可能不是那么明显?/p>-verbose:gc
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=512K
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-XX:+PrintTenuringDistribution
-XX:+PrintGCApplicationStoppedTime
-Xloggc:/var/app/log/Push-server/gc.log
-XX:SurvivorRatio=xx
来控Ӟ对应的大ؓ(f)-Xmn<value>/(ratio+2)
Q?/li>-XX:MaxTenuringThreshold=<n>
来指定晋升阈|q龄Q,n?~15之间Q?/li>-XX:CMSInitiatingOccupancyFraction=<percent>
的|老年代大?该比?gt;1.5*老年代活跃数据大?/code>Q?/li>
)Q通过-XX:+ExplicitGCInvokesConcurrentAndUnloadsCloasses
可以使用CMSq行昑ּ垃圾回收Q?code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">System.gc()-XX:+DisableExplicitGC
关闭昄垃圾回收Q慎用)(j)Q?/li>-XX:+CMSClassUnloadingEnabled
打开怹带垃圑֛Ӟ使用-XX:+CMSPermGenSweepingEnabled
打开CMSҎ(gu)久带的扫描;使用-XX:CMSInitiatingPermOccupancyFraction=<perscent>
Ȁzd收比例阈|-XX:ParallelGCThreads=<n>
控制扫描U程敎ͼ使用-XX:+CMSScavengeBeforeRemark
强制重新标记前进行一ơMinorGCQ如果由大量的引用对象或可终l对象要处理Q?code style="border-bottom: 0px; border-left: 0px; padding-bottom: 2px; background-color: rgb(214,219,223); padding-left: 4px; padding-right: 4px; font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; white-space: nowrap; color: rgb(44,62,80); font-size: 14px; border-top: 0px; border-right: 0px; padding-top: 2px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px">-XX:+ParallelRefProcEnabledQ?/li>-d64
-Xmx5g
-Xms5g
-XX:PermSize=100m
-XX:MaxPermSize=100m
-XX:MaxDirectMemorySize=1g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=80
生成下面日志使用的选项Q?span class="Apple-converted-space"> -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:d:/GClogs/tomcat6-gc.log
?/p>
4.231: [GC 4.231: [DefNew: 4928K->512K(4928K), 0.0044047 secs] 6835K->3468K(15872K), 0.0045291 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 4.445: [Full GC (System) 4.445: [Tenured: 2956K->3043K(10944K), 0.1869806 secs] 4034K->3043K(15872K), [Perm : 3400K->3400K(12288K)], 0.1870847 secs] [Times: user=0.05 sys=0.00, real=0.19 secs]
最前面的数?span class="Apple-converted-space"> 4.231
?span class="Apple-converted-space"> 4.445
代表虚拟机启动以来的U数?/p>
[GC
?span class="Apple-converted-space"> [Full GC
是垃圑֛收的停顿cdQ而不是区分是新生代还是年老代Q如果有 Full
说明发生?span class="Apple-converted-space"> Stop-The-World
。如果是调用 System.gc()
触发的,那么显C的?span class="Apple-converted-space"> [Full GC (System)
?/p>
接下来的 [DefNew
, [Tenured
, [Perm
表示 GC 发生的区域,区域的名UC使用?GC 攉器相兟?Serial 攉器中新生代名?"Default New Generation"Q显C的名字?"[DefNew"。对于ParNew攉器,昄的是 "[ParNew"Q表C?“Parallel New Generation”?对于 Parallel Scavenge 攉器,新生代名?"PSYoungGen"。年老代和永久代也相同,名称都由攉器决定?/p>
Ҏ(gu)号内部显C的 “4928K->512K(4928K)” 表示 “GC 前该区域已用容?-> GC 后该区域已用容?(该区域内存d? ”?/p>
再往后的 “0.0044047 secs” 表示该区域GC所用时_(d)单位是秒?/p>
再往后的 “6835K->3468K(15872K)” 表示 “GC 前Java堆已使用定w -> GC后Java堆已使用定w QJava堆d量)(j)”?/p>
再往后的 “0.0045291 secs” 是Java堆GC所用的L间?/p>
最后的 “[Times: user=0.00 sys=0.00, real=0.00 secs]” 分别代表 用户态消耗的CPU旉、内核态消耗的CPU旉 ?操作从开始到l束所l过的墙钟时间。墙钟时间包括各U非q算的等待耗时Q如IO{待、线E阻塞。CPU旉不包括等待时_(d)当系l有多核Ӟ多线E操作会(x)叠加q些CPU旉Q所以user或sys旉?x)超qreal旉?/p>
在上图中Q?/p>
当GC发生在新生代ӞUCؓ(f)Minor GCQ次攉Q当GC发生在年老代ӞUCؓ(f)Major GCQ主攉?一般的QMinor GC的发生频率要比Major GC高很多?/p>