什么是幽灵引用?

3

我在想什么是幽灵引用?这是指您不必引用对象吗?编辑:抱歉,我的表述不够清晰,这是关于Java的问题,我在阅读有关链表的内容时看到了它。当编写LinkedQueue迭代器以支持remove方法时,您将会遇到幽灵引用。


这个概念来自哪种编程语言? - R. Martinho Fernandes
你需要提供更多的上下文信息——你在哪里遇到了“ghost reference”这个术语?我能想到的最接近的是DBMS中的“Phantom Rows”——一些行在某个时刻存在,但在下一个时刻消失了,因为你没有运行在足够高的隔离级别(SQL术语中的SERIALIZABLE)。 - Jonathan Leffler
3
就像这样:“记得有个电影,帕特里克·斯威茨和胡普·戈德堡演的?” - Beska
1
Java有软引用、弱引用和虚引用。前两者是给开发人员使用的。虚引用涉及GC的内部。您是指这些中的任何一个吗? - Michael Easter
是的!这就是我想要理解的。 - Roxy
4个回答

3

我不确定这是否相同,但我认为您可能是指弱引用

在具有垃圾回收功能的语言中,使用弱引用可以引用对象,而不会阻止垃圾回收删除该对象(如果不存在非弱引用,则删除该对象)。

不同的语言对此功能有不同的语义。Java定义了软引用、弱引用和虚引用,每种引用都有略微不同的机制。

这在许多情况下非常有用。例如,在Blackberry上,您可以定义一个Listener对象,监听系统事件(例如来电)。当您向系统注册侦听器时,它会保留对它的弱引用。这样,当所有其他对该对象的引用消失时(例如当应用程序关闭时),弱引用不再指向侦听器,并且该侦听器的内存将被释放,程序员无需记住注销它。


值得一试 - 在我们获得更多有关主题领域的信息之前,很难说。 - Jonathan Leffler

1

我认为你可能指的是PhantomReference。


0
正如我在评论中所述,我不知道“ghost”引用,但是this article对各种弱引用(弱引用、软引用和虚引用)进行了很好的阐述。它甚至提到了ReferenceQueue问题,尽管我之前没有听说过这个问题。

0

GhostReference 是我所知道的最新概念,但如果你想了解它,根据我的经验,你应该先理解 Strong reference,然后是 weak referencesoft reference。在掌握这些知识之后,你可能更容易理解 PhantomReference

简而言之,这些引用只是帮助垃圾回收器更好地工作。(这意味着有时候你不需要了解这些概念,你的程序仍然可以在短时间内运行...)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接