java - 如何在内存不足错误时进行线程转储

标签 java jvm out-of-memory sun

我知道-XX:+HeapDumpOnOutOfMemoryError将在发生 OutOfMemoryError 时启用堆转储。

线程转储有类似的东西吗?我需要这个以防服务器上发生错误 - 当错误发生时我无权处理本身

最佳答案

引发 OutOfMemoryError 的确切执行点是非常随机的(除非您有单线程应用程序),所以我认为在 OOM 时获取线程转储没有太大意义。至少如果是“Java 堆空间”类型的 OOM,情况是这样,但对于其他类型的 OOM 错误也可能如此。

无论如何,看看this older post解决同样的问题。

然而,解决 OOM 错误的更好方法是使用 Eclipse Memory Analyzer Tool检查堆转储。它通过将对象图转换为所谓的 dominator tree 来帮助您识别内存泄漏。 。这种结构揭示了对象之间的保持 Activity 依赖关系,因此很容易识别负责保留最大内存块的对象(请参阅 Shallow vs. Retained Heap )。

关于java - 如何在内存不足错误时进行线程转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15191999/

相关文章:

c++ - set_new_handler (std::new_handler func) 失败后构造函数调用,内存分配失败?

java - Realm不保存属性,对象虽然复制到Realm但不被管理

c# - java是否像c#一样支持显式接口(interface)实现?

java - Android:无法实例化应用程序

.net - Sun 是使用 JVM 的 .NET 的竞争对手

java - 非法访问错误 : Method is inaccessible to class

java - Safepoint+stats log with None vmop operation in output JDK12

c# - 将数据库中的所有图像 (BLOB) 保存到文件夹 ('Out of memory.' )

c# - 在 C# 中使用多线程时出现内存不足异常

c# - 如何使类只允许创建 3 个对象