论坛首页 Java企业应用论坛

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

浏览 13531 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-11  
想法是挺好的. 不过貌似大伙都不喜欢画图说话.
0 请登录后投票
   发表时间:2011-05-11  
kakaluyi 写道
假如key不存在,lz你用poll就强制把queue清空最老的数据,这个是你要的结果吗?
private void cleanReference(K key) {  
        Reference<? extends T> reference = null;  
        while((reference = this.referenceQueue.poll()) != null)  
        {  
            T obj = reference.get();  
            if(obj == null)  
            {  
                this.cachedReference.remove(key);  
            }  
        }  
    }  



恩这里考虑的不周到,意图是利用ReferenceQueue来断定软引用引用的对象是否被回收来决定删除key到Softreference的映射,看来写的有问题呵呵,感谢提出建议
0 请登录后投票
   发表时间:2011-05-11  
yeswoyaofei 写道
private void cleanReference(K key) 这个函数没看懂。能解释一下吗


代码已经修改了,之前考虑的不周到,尽请见谅
0 请登录后投票
   发表时间:2011-05-11  
beneo 写道
this.referenceQueue.poll() 出来的 reference 与你的 key 应该不是对应的,这么写是为什么?

referenceQueue只是一个node-list,而且enqueue顺序与gc有关,LZ如何拿key与reference关联?


代码已经修改了,我将创建软引用的时候就去记录这个Key,遍历整个queue的时候就可以去删除对应的key-SoftReference的映射了
0 请登录后投票
   发表时间:2011-05-11   最后修改:2011-05-11
其实你不知道object reference 何时 enqueue,所以你的代码还是有问题
0 请登录后投票
   发表时间:2011-05-11   最后修改:2011-05-11
beneo 写道
其实你不知道object reference 何时 enqueue,所以你的代码还是有问题

为什么要关注 合适进去queue里呢?我只关心,弱引用被放入queue,检查object有没有被回收,被回收就删除映射,就好啦
0 请登录后投票
   发表时间:2011-05-11  
你在那里的上班啊?     华星路?   还是滨江
0 请登录后投票
   发表时间:2011-05-11  
何处烤地瓜 写道
你在那里的上班啊?     华星路?   还是滨江

不告诉你哈哈
0 请登录后投票
   发表时间:2011-05-11   最后修改:2011-05-12
blackbeans 写道
beneo 写道
其实你不知道object reference 何时 enqueue,所以你的代码还是有问题

为什么要关注 合适进去queue里呢?


1. 创建一个 object 并且放入 reference
2. put key, reference, referenceQueue in your cache
3. the object = null, and if the softreference do not enqueue

问题 reference,object = null,此时并没有enqueu, 调用cachedReference,结果本来就出问题了
0 请登录后投票
   发表时间:2011-05-12  
闲来无事 是亮点。
0 请登录后投票
论坛首页 Java企业应用版

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