跟踪垃圾收集

时间:2014-10-17 17:39:10

标签: java garbage-collection jvm

我遇到与脚本库交互的问题,并验证我怀疑我想跟踪某些类的实例是否为GCd(在Eclipse或JVisualVM中或通过命令行JVM选项)。我不需要区分类的实例,因为我可以将问题限制在一个实例中。

这可以用股票VM吗?

2 个答案:

答案 0 :(得分:3)

我不认为你可以从外面做到这一点。通常情况下,GC会运行,以便保留实时实例以及"集合"垃圾只是隐含的:内存区域只是被确定为可用于分配。

当对象到达已确定的状态时,会通知您最接近的状态,该状态仍然在实际收集之前。为此,您可以添加一些代码,这些代码将为您感兴趣的对象创建PhantomReference,并使用ReferenceQueue进行注册。您可以监视已完成对象的队列。请注意,当时或之后的某些时间有很多"这些机制的说明中的短语;你不能指望实时准确性。

另请注意,上述机制本身会干扰观察到的系统,并且在没有幻像引用的情况下它将不会起作用。

答案 1 :(得分:1)

您可以创建一个java.lang.ref.WeakReference对象的集合,每个对象对应您要监视的每个对象。您可以使用ReferenceQueue机制在GC声明目标对象时收到通知。