锁定老帖子 主题:理解 Java 的 GC 与 幽灵引用
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-18
solonote 写道
ConcurrentHashMap<String, SoftReference> 我们使用SoftReference,必然要在获取SoftReference后需要检查SoftReference.get()是否为空,如果为空,就只有一种可能,在你没有手动Remove的情况下,虚拟机把它回收了,那么回收必然造成有一些无效的key,在这种情况下做一次清理就可以了。 另外通过继承ConcurrentHashMap 重写put/get几个方法,应该可以把这些操作封装到子类中,还是让子类作为一个Map<K, T>来使用。 感觉直接使用ConcurrentHashMap<String, SoftReference>还是别扭。
楼主,打拼音的吧。 |
|
返回顶楼 | |
发表时间:2009-09-18
看了boost的 Smart_ptr, 感觉很神似
|
|
返回顶楼 | |
发表时间:2009-10-13
jiyanliang 写道 patrickyao1988 写道 今天才知道原来还有这么多种引用类型的啊。。。请问有关这方面的什么书讲的比较好呢?
thinking in java中介绍 对象的集合 时在介绍持有引用时提到了一些,但是很可惜,不是很详细。。。 深入java虚拟机 第二版 第9章 也有讲到 |
|
返回顶楼 | |
发表时间:2009-12-04
看不懂啊 需要提前预备哪些知识吗?
|
|
返回顶楼 | |
发表时间:2010-05-19
taowen 写道 如果我用一个ConcurrentHashMap<String, SoftReference>来持有我的Cache。那么我是应该是Finalizer呢还是ReferenceQueue来把SoftReference从cache中清除出去?目的就是把缓存尽可能长的时间持有,除非内存不够了。
把这个老帖子翻出来是因为今天一个同事看到 google-collections MapMaker 已经提供了类似功能 ConcurrentMap<Key, Graph> graphs = new MapMaker() .concurrencyLevel(32) .softKeys() .weakValues() .expiration(30, TimeUnit.MINUTES) .makeComputingMap( new Function<Key, Graph>() { public Graph apply(Key key) { return createExpensiveGraph(key); } });} key 和 value 的 reference 类型以及 expiration strategy 都可以指定, 用起来很方便 |
|
返回顶楼 | |