垃圾收集器监听器

时间:2014-02-06 00:47:53

标签: java weak-references

我在某篇文章中读到了一篇关于向WeakReference对象添加一些回调的文章,这些回调将在垃圾回收时触发。现在,没有我搜索多少,我找不到它。

每当弱引用对象被销毁时,我需要一种方法来执行一些代码。我知道它可以完成,我只是不记得我是否需要WeakReference或其他类似WeakHasMap的东西?

1 个答案:

答案 0 :(得分:3)

使用ReferenceQueue来实现这一目标。您可能也想查看PhantomReference s,具体取决于您实际尝试做什么(但WeakReference也可以使用队列)。只需创建一个引用队列并将其作为第二个参数传递给reference-constructor。当GC删除对象时,引用会排队,您可以使用队列中的remove()(阻止)或poll()(非阻塞)来获取它。

还有另一种选择:实施finalize。它虽然不那么灵活,但也在另一个线程中运行(所以你仍然有并发性 - 加上甚至不知道哪个线程会执行它)。 ReferenceQueue在所有方面都是优秀的。