Tag: phantom reference

为什么我的物体不会死?

我正在尝试实现一种机制,当持有它们的对象死亡时删除缓存文件,并决定使用PhantomReference来获取有关对象的垃圾收集的通知。 问题是我一直在体验ReferenceQueue怪异行为。 当我在代码中更改某些内容时,它突然不再获取对象。 所以我试着让这个例子进行测试,并遇到了同样的问题: public class DeathNotificationObject { private static ReferenceQueue refQueue = new ReferenceQueue(); static { Thread deathThread = new Thread(“Death notification”) { @Override public void run() { try { while (true) { refQueue.remove(); System.out.println(“I’m dying!”); } } catch (Throwable t) { t.printStackTrace(); } } }; deathThread.setDaemon(true); deathThread.start(); } public DeathNotificationObject() { System.out.println(“I’m born.”); […]

幻影参考对象

幻影参考用于验尸操作。 Java规范规定,在清除幻像引用本身之前,不会释放幻像引用的对象 。 我的问题是:此function(对象未解除分配)的用途是什么? (我提出的唯一想法是允许本机代码对对象进行事后清理,但这并不是很有说服力)。

何时在Java中使用Weak和Phantom引用

我阅读了很多文章,但我不明白 – 在实践中我需要在哪里使用Weak和Phantom参考? 软引用 – 正如我所理解的那样,是缓存的不错选择。 但弱和幻影,我不知道何时使用。 请提供我们需要使用它们的实际任务示例。

Java:PhantomReference,ReferenceQueue和finalize

我有PR,PR指向的对象O,以及为PR设置的RQ。 我有一个线程继续轮询RQ,并在它在RQ中找到的第一个引用,线程打印它找到它的时间,并退出。 事情很好,但是当O有一个finalize(无论多么微不足道)的时候,线程不再在RQ中找到引用并且无限期地继续运行。 问题:为什么会这样? 我正在使用Sun JDK 1.6。 这是代码: good case public class MyGCPhantom { public static void main(String[] args) throws InterruptedException { GCPhantomObject p = new GCPhantomObject(); ReferenceQueue phantomQueue = new ReferenceQueue(); PhantomReference pr = new PhantomReference(p, phantomQueue); new GCPhantomThread(phantomQueue, “Phantom”).start(); p = null; System.gc(); } } class GCPhantomObject { @Override protected void finalize() { […]

何时在Java中使用幻像引用?

可能重复: 你有没有在任何项目中使用Phantom参考? 我已经阅读了不同类型的参考资料。 我理解强大,软弱的参考是如何运作的。 但是,当我读到幻影参考时,我无法理解它们。 也许是因为我找不到任何好的例子来告诉我他们的目的是什么或何时使用它们。 你能告诉我一些使用幻像参考的代码示例吗?