Java中软引用LinkedHashMap?
Java中有基于软引用的LinkedHashMap吗? 如果没有,有人有一段我可以重用的代码吗? 我保证正确引用它。
谢谢。
Is there softreference-based LinkedHashMap in Java? If no, has anyone got a snippet of code that I can probably reuse? I promise to reference it correctly.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
WeakHashMap 不保留插入顺序。 因此不能将其视为 LinkedHashMap 的直接替代品。 此外,只有当键不再可用时,地图条目才会被释放。 这可能不是您正在寻找的。
如果您正在寻找的是内存友好的缓存,那么您可以使用以下简单的实现。
WeakHashMap doesn't preserve the insertion order. It thus cannot be considered as a direct replacement for LinkedHashMap. Moreover, the map entry is only released when the key is no longer reachable. Which may not be what you are looking for.
If what you are looking for is a memory-friendly cache, here is a naive implementation you could use.
我见过的最好的想法是包装
LinkedHashMap
,以便您放入
其中的所有内容都是 弱引用。更新:刚刚浏览了
WeakHashMap
的源代码,以及它处理使所有内容成为WeakReference
同时仍能很好地使用泛型的方式是可靠的。 这是它使用的核心类签名:我建议浏览 源代码< /a> 更深入地了解其他实现想法。
更新 2:kdgregory 在他的评论中提出了一个很好的观点 - 我的所有建议都是确保
Map
中的引用不会阻止所指对象被垃圾收集。 您仍然需要手动清除死引用。The best idea I've seen for this is wrapping
LinkedHashMap
so that everything youput
into it is a WeakReference.UPDATE: Just browsed the source of
WeakHashMap
and the way it handles making everything aWeakReference
while still playing nice with generics is solid. Here's the core class signature it uses:I suggest browsing the source more in depth for other implementation ideas.
UPDATE 2: kdgregory raises a good point in his comment - all my suggestion does is make sure the references in the
Map
won't keep the referent from being garbage-collected. You still need to clean out the dead references manually.看看这篇文章。 它展示了如何实现 SoftHashMap...
have a look at this post. It shows how to implement a SoftHashMap...