我遇到与脚本库交互的问题,并验证我怀疑我想跟踪某些类的实例是否为GCd(在Eclipse或JVisualVM中或通过命令行JVM选项)。我不需要区分类的实例,因为我可以将问题限制在一个实例中。
这可以用股票VM吗?
答案 0 :(得分:3)
我不认为你可以从外面做到这一点。通常情况下,GC会运行,以便保留实时实例以及"集合"垃圾只是隐含的:内存区域只是被确定为可用于分配。
当对象到达已确定的状态时,会通知您最接近的状态,该状态仍然在实际收集之前。为此,您可以添加一些代码,这些代码将为您感兴趣的对象创建PhantomReference
,并使用ReferenceQueue
进行注册。您可以监视已完成对象的队列。请注意,当时或之后的某些时间有很多"这些机制的说明中的短语;你不能指望实时准确性。
另请注意,上述机制本身会干扰观察到的系统,并且在没有幻像引用的情况下它将不会起作用。
答案 1 :(得分:1)
您可以创建一个java.lang.ref.WeakReference对象的集合,每个对象对应您要监视的每个对象。您可以使用ReferenceQueue机制在GC声明目标对象时收到通知。