作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Java 堆转储中,我如何确切知道代码中的哪个位置/哪个线程导致了转储?
最佳答案
读取内存转储:
我建议您尝试“eclipse 内存分析器” 来自 here
另一个选项(免费)是用 JVisualVM 打开它(在 $JAVA_HOME/bin 中可用)jhat 也很酷,但已经被推荐了:)
现在,您询问的是导致内存堆转储的线程,而不是询问如何进行内存转储...这取决于您如何获得内存转储。有多种获取转储的方法。
在您的进程中,您可以指示 JVM 在遇到 OutOfMemory 错误时生成内存转储,在这种情况下,我相信这将是 JVM 本身。
如果您有一个与 JVM 一起运行的 JMX 服务器,您可以从 MBean 触发堆转储创建 Example
您甚至可以在您的应用程序外部使用系统调用(在 Linux 上):kill -3 _YOUR_JAVA_PROCESS_ID_
将生成堆转储。
但我很难想象你为什么需要这样的信息。稍后在评论中你提到了“确切的代码行”,但这些方法通常在你的 JVM 外部......你确定你需要一行代码本身生成堆转储,或者你正在尝试确定真正的问题?
希望对你有帮助
关于java - 在 Java 中检测堆转储中的根本原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11790787/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!