加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – SoftReference太早收集垃圾

发布时间:2020-12-14 16:29:29 所属栏目:Java 来源:网络整理
导读:我正在为我的 Android应用程序实现一个缓存机制. 我使用SoftReference,就像我发现的很多例子.问题是,当我在ListView中向上或向下滚动时,大部分图像已被清除.我可以在LogCat中看到,每次应用程序加载新的图像时,我的应用程序都是垃圾回收的.这意味着ListView中
我正在为我的 Android应用程序实现一个缓存机制.

我使用SoftReference,就像我发现的很多例子.问题是,当我在ListView中向上或向下滚动时,大部分图像已被清除.我可以在LogCat中看到,每次应用程序加载新的图像时,我的应用程序都是垃圾回收的.这意味着ListView中大部分不可见的图像都会消失.

所以,每次我回到一个更早的位置(我真的下载图像之前),我必须再次下载图像 – 它们没有被缓存.

我也研究了这个话题. According to Mark Murphy in this article,似乎有(或是?)与SoftReference的错误.一些其他结果表明同样的事情(或相同的结果); SoftReferences太早了.

有没有工作解决方案?

解决方法

SoftReference是可怜的人Cache. JVM可以保留这些引用更长时间,但不必.一旦没有硬引用,JVM就可以垃圾收集软引用的对象.您所遇到的JVM的行为是正确的,因为JVM不需要持续这样的对象.当然,大多数JVM尝试在一定程度上保持软参考对象的存在.

所以SoftReferences是一种危险的缓存.如果您真的想确保缓存行为,则需要一个真正的缓存.像一个LRU-cache.特别是如果你的缓存是关键的性能,你应该使用适当的缓存.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读