4

我最近一直在玩 Java 中的软、弱和幻像引用类型,并且一直想知道它们是否有任何我没有遇到过的用途。我过去曾将它们用于各种事情,它们总是属于以下类别:

  • 使用幻像引用代替终结器 - 我更喜欢这个,因为死对象复活的可能性为 0
  • 在 hashmap 中使用弱引用来保存 object=>value 映射,其中仅当对象存在于其他地方时映射才应存在(当需要向库中的对象添加额外信息时很有用,例如其源不能是修改的)
  • 使用软引用进行缓存(比弱引用效果更好,因为 JVM 将它们保留更长时间,并且只有在需要时才放手。)

但是,那里只有 3 种用途,我敢说还有很多我从未遇到过的可能有用的东西。欢迎所有建议!

4

1 回答 1

1

两个奇怪的想法:

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

恕我直言,在某些(极少数)情况下,弱引用可能更适合缓存,例如,您可能会弱引用值,一旦将它们从使用它们的结构中删除(即它们变得非常不可访问),就不可能再次需要这些值。此外,JVM 中有一个关于软引用的严重错误,这可能会迫使您这样做。

于 2011-01-21T01:50:27.980 回答