我正在运行jboss 5.1,我得到了这个GC数据
34.098: [GC 197635K->91639K(236480K), 0.0356348 secs]
37.139: [GC 217911K->100951K(239936K), 0.0541968 secs]
37.194: [Full GC 100951K->97239K(304704K), 0.3325776 secs]
38.602: [GC 214271K->97547K(285568K), 0.0488937 secs]
41.395: [GC 220811K->111699K(304512K), 0.0334592 secs]
42.734: [GC 235155K->115815K(304384K), 0.0208743 secs]
43.722: [GC 239271K->115801K(303872K), 0.0166861 secs]
44.373: [GC 241049K->118266K(304128K), 0.0106151 secs
有人可以解释当Full GC发生时,为什么在堆大小之前和之后存在如此小的差异,当完整GC时它不应该更大。完整GC之前的行是“普通”GC并且它有这么大的差异(和小的收集时间?),我只注意到这两行的时间戳非常接近
答案 0 :(得分:0)
你看到的是,年轻人/伊甸园空间和旧空间中的收藏品。这两个空间使用不同类型的收集器,因为这些区域中的对象具有不同的特征。 那些Full GC通常是最大的问题,因为它们很慢并且它们会停止你的VM。你幸运的是还没有一个大问题,但你的问题是它的原因。
不幸的是,这是不可能的。
如果您想了解更多信息,请激活开关-XX:+PrintGCDetails
然而,我们可以猜测。正如您正确指出的那样,堆未满(300MB中的100MB)并且它不会收集太多(30MB)。
所以我猜这个GC是由对System.GC()
的调用引起的。您应该使用 - XX:+DisableExplicitGC
来阻止它们发生,或者您找到实际执行此操作的代码并将其删除。