1

我正在运行 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,为什么堆大小之前和之后的差异如此之小,Full GC 时不应该更大。完全 GC 之前的行是“正常”GC,它有这么大的差异(和小的收集时间?),我只注意到这两行的时间戳非常接近

4

1 回答 1

0

你所看到的是在年轻/伊甸园空间和旧空间中发生的收集。这两个空间使用不同类型的收集器,因为这些区域中的对象具有不同的特征。那些 Full GC 通常是最大的问题,因为它们很慢并且会停止你的 VM。幸运的是,您还没有大问题,但您的问题是它是为什么引起的。

不幸的是,这是不可能的。如果你想知道更多,你应该激活开关-XX:+PrintGCDetails

不过,我们可以猜测。正如您正确指出的那样,堆未满(300MB 中的 100MB)并且它收集的不多(30MB)。所以我猜这个GC是由调用引起的System.GC()。您应该使用 -XX:+DisableExplicitGC来防止它们发生,或者您找到实际执行此操作的代码并将其删除。

于 2012-11-27T20:17:29.780 回答