Java中不同引用类型的使用

时间:2011-01-21 00:35:35

标签: java reference weak-references soft-references phantom-reference

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

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

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

1 个答案:

答案 0 :(得分:1)

两个奇怪的想法:

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

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