我运行的是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有人能解释一下为什么在完全GC发生时,堆大小会有这么小的差异吗?当完全GC时,它不应该更大吗?full GC之前的一行是“普通”GC,它有这么大的差异(和很小的收集时间?),我只是注意到这两行的时间戳非常接近
发布于 2012-11-28 04:17:30
你所看到的都是发生在年轻/伊甸园空间和旧空间的集合。这两个空间使用不同类型的收集器,因为这些区域中的对象具有不同的特征。这些完整的GC通常是最大的问题,因为它们很慢,并且会停止您的VM。幸运的是,你还没有遇到大问题,但你的问题是为什么会发生这种情况。
不幸的是,这是不可能的。如果您想了解更多信息,您应该激活交换机-XX:+PrintGCDetails
然而,我们可以猜测。正如您正确指出的,堆并未满(300MB中的100MB),并且收集的空间也不大(30MB)。因此,我猜测这种GC是由对System.GC()的调用引起的。您应该使用-XX:+DisableExplicitGC来防止它们的发生,或者找到实际执行此操作的代码并将其删除。
https://stackoverflow.com/questions/13581802
复制相似问题