论坛首页 Java企业应用论坛

闲来无事,用Java的软引用写了一个山寨的缓存

浏览 13558 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-12  
为什么要用HashMap呢?按照楼主用softReference的思路,用WeakHashMap不更合适么。
而且楼主好像也没处理并发问题,至少要加个读写锁才能用吧……
0 请登录后投票
   发表时间:2011-05-12  
fmjsjx 写道
为什么要用HashMap呢?按照楼主用softReference的思路,用WeakHashMap不更合适么。
而且楼主好像也没处理并发问题,至少要加个读写锁才能用吧……

写来玩玩而已,并发的方面我没有考虑,只是个想法,提供基本的cache功能,然后提供一个Handler来处理对象被回收的情况。
0 请登录后投票
   发表时间:2011-05-12  
您好 我想请教下
在第七行代码
# if(obj == null) 
#             { 
#                 this.cachedReference.remove(((InnerReference<K, T>)reference).getKey()); 
#             } 

为什么要在obj为空时候才remove?
还有就是while 循环里ref = this.queue.poll()  怎么就能确定获取的就是当前要删除的 ref呢?
0 请登录后投票
   发表时间: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的垃圾
0 请登录后投票
   发表时间:2011-08-01   最后修改:2011-08-01
我对使用软引用缓存的场景不是很清除,应该将什么数据放到软引用缓存啦?请指教。
我觉得使用软引用缓存不好的地方:
(1)放入缓存的数据不能经常新增和删除,因为删除一个软引用对象,软引用对象的垃圾收集是在需要在抛出OutOfMemoryError之前清除软引用。这样就会造成很多垃圾数据在内存中。(2)如果是常量数据如属性文件等,我为啥不用一个Property常量类来存储啦,并且不需要维护软引用数据是否被回收。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics