来自J. Bloch
内存泄漏的来源是监听器......确保回调被及时垃圾回收的最佳方法是仅存储对它们的弱引用,例如,通过仅将它们存储为WeakHashMap中的键 .
那么,为什么Java Collections框架中没有任何WeakSet ?
我知道有一个WeakHashMap
in java.util
,但由于它只使用了WeakReference
s,只有这个Map
引用,引用的对象将在下一个GC循环中丢失.因此,如果您想要缓存随机数据,这几乎是无用的,这很可能会再次被请求而不会在其余时间进行硬链接.最好的解决方案是使用SoftReference
s代替的地图,但我没有在Java RT Package中找到一个.
Java中的哪种数据结构最适合实现内存中对象缓存,其中对象具有单独的到期时间?
基本上对于缓存我可以使用Map(其中key可以是String),它提供put和get方法,并使用"timestamp"+"object"对的有序列表来管理到期时间.因此,清理线程可以检查第一个列表条目,并在其到期时间过后删除该对象.(删除第一个元素应该在O(1)时间内)