2013-02-25 46 views
0

我想分析使用eclipse MAT应用程序的内存使用情况,因此我使用-XX:+HeapDumpOnOutOfMemoryError创建一个堆转储。现在,如果我在MAT中打开它,它会告诉我堆转储的大小为127mb,这显然不是万能的,因为jvm以-Xmx1024m运行。堆转储是不完整的

+1

什么是确切的'OutOfMemoryError'您收到?你可以发布堆栈跟踪吗?? – 2013-02-25 13:36:10

+0

是的,究竟是什么?请注意,您可以为堆内存以外的资源获取“OutOfMemoryError”! (permgen是Oracle/Sun/OpenJDK JVM中的经典示例)。 – 2013-02-25 14:00:26

回答

0

通常有在Java虚拟机(育苗和堆)存储两个段,每一个都可以导致内存不足。因此,您不能断定转储文件的大小应等于或超过-Xmx设置。

阅读更多关于主题 - 例如在这里:http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/garbage_collect.html

+0

该文档是关于JRockit虚拟机(看起来并不是很新,因为它从2008年开始)。垃圾收集的细节非常依赖于实现,所以这通常不适用于其他JVM。 – 2013-02-25 13:59:34

+0

同意。但是我最近在OutOfMemory上经历了这个经历,并且意外地发现了托儿所的概念。那么,增加它的空间帮助我。我正在使用IBM JVM/Websphere,并使用-Xmn选项来设置托儿所空间。文章可能比较陈旧,但我相信它适用于许多现在的情况。但你是对的 - 这是非常特定于JVM的。 – tbsalling 2013-02-25 14:22:30