我知道-XX:+HeapDumpOnOutOfMemoryError
将在OutOfMemoryError上启用堆转储。
线程转储有什么类似的吗?如果服务器上发生错误,我需要这样做 - 当它发生时我没有访问权限
答案 0 :(得分:3)
引发OutOfMemoryError的确切执行点非常随机(除非你有一个线程应用程序),所以我认为在OOM上获取线程转储没有多大意义。如果它是'Java堆空间'类型的OOM,至少也是如此,但也可能是其他类型的OOM错误。
无论如何,请看this older post解决同一问题。
然而,解决OOM错误的更好方法是使用Eclipse Memory Analyzer Tool来检查堆转储。它可以帮助您通过将对象图转换为所谓的dominator tree来识别内存泄漏。这种结构揭示了对象之间的保持活动依赖关系,因此很容易识别出负责保留最大内存块的那些(参见Shallow vs. Retained Heap)。