是否可以看到变为null且
的java对象(及其类类型)此统计信息将有助于了解重复创建的对象数量(通过错误的逻辑),而不是创建一次。
答案 0 :(得分:2)
我认为这在理论上是可行的,但坦率地说,你会疯狂地尝试它。
查找无法访问的对象的途径是使用Java VM工具接口(JVMTI)迭代堆中的所有对象(可访问或无法访问),以便找到您要查找的对象。然后你通过JVMTI提取它的状态并(以某种方式)重新启用它以便你可以显示它。
通常你会在一个单独的JVM中执行此操作;例如运行调试器或分析工具的那个。但是,应用程序可以将代理程序附加到自身,并使用它在JVM中进行挖掘。但是,这不是JVMTI的预期用途,我预计可能存在"危险"这样做。
您可以在这里阅读更多内容:
但是,如果你为了让这个工作变得疯狂,请不要责怪我。
更新我同意Marko的说明,通过查看无法访问的对象,您不太可能学到任何重要信息。
答案 1 :(得分:1)
显示未被java垃圾进程清理的不需要的或空的java对象
这不是一个定义明确的概念;至少没有有用的定义会给你任何相关的东西。
只要该对象无法访问,就可以认为分配对象的内存对于所有实际目的都是免费的。块表示的内存量可供JVM分配器使用,因为在某种意义上,由于该块被“忽略”,因此不会发生内存不足事件。
进一步注意,许多“垃圾收集”算法通常完全相反:它们找到 live 对象并重新定位它们,以便它们占用连续的内存块。这些算法完全忽略了“垃圾”对象,并将它们视为空白空间。
因此,即使您设法编写了一个基于Java代理的低级模块,它将枚举堆上的所有对象,您也不会获得任何有趣的洞察力:您遇到的无法访问的对象将碰巧徘徊因为JVM还没有觉得需要重用他们的内存。