精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-12
为什么要用HashMap呢?按照楼主用softReference的思路,用WeakHashMap不更合适么。
而且楼主好像也没处理并发问题,至少要加个读写锁才能用吧…… |
|
返回顶楼 | |
发表时间:2011-05-12
fmjsjx 写道 为什么要用HashMap呢?按照楼主用softReference的思路,用WeakHashMap不更合适么。
而且楼主好像也没处理并发问题,至少要加个读写锁才能用吧…… 写来玩玩而已,并发的方面我没有考虑,只是个想法,提供基本的cache功能,然后提供一个Handler来处理对象被回收的情况。 |
|
返回顶楼 | |
发表时间:2011-05-12
您好 我想请教下
在第七行代码 # if(obj == null) # { # this.cachedReference.remove(((InnerReference<K, T>)reference).getKey()); # } 为什么要在obj为空时候才remove? 还有就是while 循环里ref = this.queue.poll() 怎么就能确定获取的就是当前要删除的 ref呢? |
|
返回顶楼 | |
发表时间:2011-05-12
snwz 写道 您好 我想请教下
在第七行代码 # if(obj == null) # { # this.cachedReference.remove(((InnerReference<K, T>)reference).getKey()); # } 为什么要在obj为空时候才remove? 还有就是while 循环里ref = this.queue.poll() 怎么就能确定获取的就是当前要删除的 ref呢? 这个跟gc有关,对于软引用当gc去回收软引用所引用的对象同时,也会去将软引用本身放到所谓的referceQueue中,来回收,不然虽然回收了软引用所引用的对象,但是产生了额外的SoftReference的垃圾 |
|
返回顶楼 | |
发表时间:2011-08-01
最后修改:2011-08-01
我对使用软引用缓存的场景不是很清除,应该将什么数据放到软引用缓存啦?请指教。
我觉得使用软引用缓存不好的地方: (1)放入缓存的数据不能经常新增和删除,因为删除一个软引用对象,软引用对象的垃圾收集是在需要在抛出OutOfMemoryError之前清除软引用。这样就会造成很多垃圾数据在内存中。(2)如果是常量数据如属性文件等,我为啥不用一个Property常量类来存储啦,并且不需要维护软引用数据是否被回收。 |
|
返回顶楼 | |