是否可以查看已设为 null 且为
的 java 对象(及其类类型)- 尚未收集/清理垃圾
- 收集/清理垃圾。
这一统计数据将有助于了解有多少对象被重复创建(通过错误的逻辑)而不是一次性创建。
最佳答案
我认为这在理论上是可能的,但坦率地说,你会疯狂地尝试它。
查找不可访问对象的途径是使用 Java VM Tool Interface (JVMTI) 迭代堆中的所有对象(可访问或不可访问),以便找到您要查找的对象。然后,您通过 JVMTI 提取其状态并(以某种方式)具体化它,以便可以显示它。
通常您会在单独的 JVM 中执行此操作;例如运行调试器或分析工具的那个。但应用程序可以将代理附加到自身,并使用它在 JVM 中进行挖掘。然而,这不是 JVMTI 的预期用途,我预计这样做可能会存在“危险”。
您可以在这里阅读更多内容:
- Creating a Debugging and Profiling Agent with JVMTI
- Own your heap: Iterate class instances with JVMTI
但是,如果你疯狂地试图让这个工作正常运行,请不要责怪我。
<小时/>更新我同意 Marko 的观点,即你不太可能通过查看无法访问的对象来学到任何重要的东西。
关于java - 如何获取垃圾收集对象的统计信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28657834/