dev*_*per 144 java collections weakhashmap
什么是什么WeakHashMap时候应该使用它?a WeakHashMap和a 之间有什么区别HashMap?
vic*_*irk 80
如果没有对密钥对象的其他强引用,则垃圾收集器可以回收弱hashmap中的元素,这使得它们对缓存/查找存储很有用.
弱引用不限于这些哈希表,您可以将WeakReference用于单个对象.它们对于保存资源非常有用,您可以保留对某些内容的引用,但允许在没有其他内容引用时对其进行收集.(顺便说一下,强引用是一个普通的java引用).也有弱引用,往往不像软引用那样容易收集(在最后一个强引用消失后不会长时间持续存在)
mmc*_*omb 45
正如其他人已经指出的那样,弱引用提供了一种将对象用作键而不创建对它的强引用的方法.这在您不希望损害JVM垃圾收集对象的能力的情况下非常有用,但仍然希望能够跟踪对象的某些方面,这使得弱引用非常适合缓存或存储有关对象的元数据.
我建议阅读"理解弱引用"(Oracle博客文章),关于Java中的强引用和弱引用.如果不了解差异,数据结构本身就没有多大意义.
Hao*_*eng 20
checkout Effective Java,Edition 2,page 26.
内存泄漏的另一个常见原因是缓存.一旦将对象引用放入缓存中,就很容易忘记它就在那里并在它变得无关紧要之后很久就将它留在缓存中.这个问题有几种解决方案.如果你足够幸运地实现一个条目相关的缓存,只要在缓存之外有对其密钥的引用,就将缓存表示为WeakHashMap ; 条目将在过时后自动删除.请记住,只有当缓存条目的所需生存期由对键的外部引用而不是值确定时,WeakHashMap才有用.
弱引用是关于可达性,让垃圾收集器(GC)为您工作.我认为最好理解弱引用试图解决的问题,并在实际中看到它:
一篇IBM文章:
Java理论与实践:使用弱引用来堵塞内存泄漏.内存泄漏全局映射,识别内存泄漏,对救援的弱引用,......
一个博客文章有关何时使用WeakHashMap中:
...如果WeakHashMap对缓存没有好处,那么它有什么用呢?实现规范地图是很好的.假设您想要将一些额外信息与您强烈引用的对象相关联.您将一个条目放在WeakHashMap中,并将对象作为键,将额外信息作为映射值.然后,只要您保持对对象的强引用,您就可以检查地图以检索额外信息.一旦释放对象,将清除映射条目,并释放额外信息使用的内存....
有关java.lang.ref的Java 文档
| 归档时间: |
|
| 查看次数: |
93198 次 |
| 最近记录: |