java - Java中如何查找一个对象的所有引用者?

标签 java memory-leaks jvm

我们遇到内存泄漏问题,我们不知道某个类的太多实例是从什么/哪里创建/引用的。这种情况发生在生产负载较重且我们无法获取堆转储(获取堆转储会导致 HA 服务器挂起时间过长)的情况下。由于性能下降,运行时分析在生产站点上也不是一个选项,客户对随机崩溃更满意,而不是在监控过程中试图捕捉崩溃瞬间而痛苦缓慢。我们不知道如何引发崩溃(泄漏),它只是有时会发生。

有没有办法在运行时从应用程序本身获取对象引用/实例化点?

我查看了http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ObjectReference.html它给出了这样的想法:这样的事情是可能的。

有什么指示如何最好使用自定义代码而不使用堆转储方式来实现此目的吗?已经尝试在测试环境中重现该问题,这似乎是彻底的徒劳无功。我们现在需要一种强力的方法来找到原因。

最佳答案

建议您尝试检查导致此类泄漏的代码。以下是一些有关相同内容的教程和帮助

关于处理 Java 中的内存泄漏的 IBM 文章 http://www.ibm.com/developerworks/library/j-leaks/

其他一些有用的文章 http://www.openlogic.com/wazi/bid/188158/How-to-Fix-Memory-Leaks-in-Java

还有一个Eclipse Memory Analyser Tool

但最推荐的解决方案是 尝试运行jvisualvm从与您的程序运行相同的计算机上的 JVM 并启用分析。

关于java - Java中如何查找一个对象的所有引用者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13157333/

相关文章:

objective-c - 仪器中出现奇怪的内存泄漏

javascript - 这是内存泄漏吗?

java - BorderLayout 的作用类似于流式布局

java - 为什么年轻代需要3个区域来进行垃圾收集?

java - 没有主要 list 属性 - IntelliJ

java - 让 Feign 客户端从自定义属性中获取信任库

程序异常终止导致的 C 潜在内存泄漏

java - 出于测试目的终止 Java 线程

java - 如何修复 java.lang.UnsupportedClassVersionError : Unsupported major. 次要版本

java - JVM 如何处理 RuntimeException(s)