1

通常在 OutOfMemoryError 之后生成的线程转储包括有关最后几个垃圾收集器周期的信息(GC 历史部分)。但是我有 OutOfMemory 线程转储没有这些信息。

1STGCHTYPE     GC History  
NULL           
NULL           ------------------------------------------------------------------------
0SECTION       LOCKS subcomponent dump routine
NULL           ===============================

环境:IBM WebSphere 7.0.0.19

有人知道为什么这个转储没有这些信息吗?GC根本没有启动?

4

2 回答 2

2

如果您的程序一次性请求足够大的内存(例如大型数组分配等)而 JVM 无法满足,则可能会发生这种情况。

于 2013-07-20T09:18:26.727 回答
2

在这种情况下,您应该查看Snap.*.trcJVM 与转储一起生成的文件。它是一个二进制文件,但 IBM 提供了一个工具来解码该跟踪文件。

上次我看到一个javacore没有 GC 历史记录的文件,那是因为它OutOfMemoryError不是由堆(或本机内存)饥饿触发的,而是由过多的垃圾收集开销触发的。跟踪文件中清楚地表明了这一点。

于 2013-07-22T17:23:23.100 回答