精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-11
想法是挺好的. 不过貌似大伙都不喜欢画图说话.
|
|
返回顶楼 | |
发表时间: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的映射,看来写的有问题呵呵,感谢提出建议 |
|
返回顶楼 | |
发表时间:2011-05-11
yeswoyaofei 写道 private void cleanReference(K key) 这个函数没看懂。能解释一下吗
代码已经修改了,之前考虑的不周到,尽请见谅 |
|
返回顶楼 | |
发表时间:2011-05-11
beneo 写道 this.referenceQueue.poll() 出来的 reference 与你的 key 应该不是对应的,这么写是为什么?
referenceQueue只是一个node-list,而且enqueue顺序与gc有关,LZ如何拿key与reference关联? 代码已经修改了,我将创建软引用的时候就去记录这个Key,遍历整个queue的时候就可以去删除对应的key-SoftReference的映射了 |
|
返回顶楼 | |
发表时间:2011-05-11
最后修改:2011-05-11
其实你不知道object reference 何时 enqueue,所以你的代码还是有问题
|
|
返回顶楼 | |
发表时间:2011-05-11
最后修改:2011-05-11
beneo 写道 其实你不知道object reference 何时 enqueue,所以你的代码还是有问题
为什么要关注 合适进去queue里呢?我只关心,弱引用被放入queue,检查object有没有被回收,被回收就删除映射,就好啦 |
|
返回顶楼 | |
发表时间:2011-05-11
你在那里的上班啊? 华星路? 还是滨江
|
|
返回顶楼 | |
发表时间:2011-05-11
何处烤地瓜 写道 你在那里的上班啊? 华星路? 还是滨江
不告诉你哈哈 |
|
返回顶楼 | |
发表时间: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,结果本来就出问题了 |
|
返回顶楼 | |
发表时间:2011-05-12
闲来无事 是亮点。
|
|
返回顶楼 | |