Java中不同引用类型的使用

我最近一直在玩 Java中的soft,weak和phantom引用类型,并且一直在想是否有任何用途,我还没有遇到过.我过去曾经使用它们来处理各种事情,它们总是属于以下类别:

>使用幻像引用代替终结器 – 我更喜欢这个,因为死对象有0次复活的可能性
>使用散列映射中的弱引用来保存object =>值映射,其中映射应该仅在其他地方存在对象时才有效(在需要向库中的对象添加额外信息时很有用,例如其源可以’被修改)
>使用软引用进行缓存(比弱引用要好得多,因为JVM可以将它们保留更长时间,只有在感觉需要时才会使用.)

然而,那里只有3种用途,我敢说有很多东西可能对我有用而且我从来没有遇到过.欢迎所有建议!

解决方法

两个奇怪的想法:

>您可以使用软引用来查找内存不足并手动释放一些本身无法使用软引用的缓存.
>您可以使用弱引用来查找GC何时运行,这可能对您遇到可能与GC相关或可能与GC无关的奇怪程序暂停有用.

恕我直言,在一些(罕见的)情况下,弱引用对于缓存可能更好,例如,您可能弱地引用值,一旦它们从使用它们的结构中移除(即,它们变得强烈不可达),则不可能再次需要它们.此外,JVM中有一个关于软引用的严重bug,这可能会迫使您这样做.

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...