没有GC历史记录的OutOfMemory线程转储

时间:2013-07-20 09:11:08

标签: java memory-leaks garbage-collection websphere out-of-memory

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

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

环境:IBM WebSphere 7.0.0.19

有人知道为什么这个转储没有这个信息吗? GC根本没有开始?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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