GC log的一点疑惑

fxl545826 2014-06-20
2014-06-06T00:06:50.916+0800: 25204.374: [Full GC (System) 25204.374: [CMS: 10274K->10269K(13421824K), 0.5398260 secs] 285000K->10269K(16441728K), [CMS Perm : 41934K->41930K(524288K)], 0.5399750 secs] [Times: user=0.59 sys=0.00, real=0.54 secs] 

这个是一条GC的日志,其中10274K我理解应该是老年代回收前的值,10269K是老年代回收后的值,13421824K应该是老年代总共的大小,0.5398260这个是回收老年代的时间。285000K是整个heap的回收前的值,依次下去,但是我发现每次回收的结果老年的回收后的值永远等于heap回收后的值这个合理么?

第二个问题是:这次整个的花费时间是两个时间加起来么?

另外我服务器是配置了CMS,但是由于服务器可能由于RMI注册了MBean的问题触发了Tomcat的JreMemoryLeakPreventionListener。这个问题也挺奇怪的,因为这个容器只是部署了Solr,还是没明白为啥会导致触发这个JreMemoryLeakPreventionListener。

之所以我确定是JreMemoryLeakPreventionListener是因为我把server.xml中配置为<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" gcDaemonProtection="false"/>就没这个日志了。
fh63045 2014-06-20
1.不一定 , heap回收包括 new, perm
2.整体时间应该是 0.59
以上是我的理解
fxl545826 2014-06-20
fh63045 写道
1.不一定 , heap回收包括 new, perm
2.整体时间应该是 0.59
以上是我的理解

1、我拿了好几天的数据,对比发现是完全一致的,应该不是偶然,更大可能是我理解的部分应该有错误
2、这俩时间还不太一样呢,比较疑惑
RednaxelaFX 2014-06-22
HotSpot VM的full GC会尽可能把Java堆里所有活对象都放到old gen里。所以正常完成full GC后就应该看到Java堆的使用量跟old gen使用量一致。不然就意味着堆实在太满而回收不了多少空间于是old gen放不下所有活对象,那样就需要放一部分对象到young gen里了。

显示回收前后状态的那三个数字的意思是:
used before GC -> used after GC (capacity after GC)

fxl545826 2014-06-22
RednaxelaFX 写道
HotSpot VM的full GC会尽可能把Java堆里所有活对象都放到old gen里。所以正常完成full GC后就应该看到Java堆的使用量跟old gen使用量一致。不然就意味着堆实在太满而回收不了多少空间于是old gen放不下所有活对象,那样就需要放一部分对象到young gen里了。

显示回收前后状态的那三个数字的意思是:
used before GC -> used after GC (capacity after GC)


懂了
Global site tag (gtag.js) - Google Analytics