gpt4 book ai didi

java - SoftReference 过早地收集垃圾

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:41 27 4
gpt4 key购买 nike

我正在为我的 Android 应用程序实现缓存机制。

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

因此,每次我回滚到较早的位置(我之前真正下载过图像的位置)我都必须再次下载图像 - 它们不是 缓存

我也研究过这个话题。 According to Mark Murphy in this article ,似乎存在(或曾经存在?)SoftReference 的错误。其他一些结果表示相同的事情(或相同的结果); SoftReference 清除得太早了。

有什么可行的解决方案吗?

最佳答案

SoftReference 是可怜的缓存。 JVM 可以让这些引用存活更长时间,但不是必须的。一旦不再有硬引用,JVM 就可以对软引用的对象进行垃圾回收。您遇到的 JVM 的行为是正确的,因为 JVM 不必长时间保留此类对象。当然,大多数 JVM 都试图在某种程度上让软引用对象保持 Activity 状态。

因此 SoftReferences 是一种危险的缓存。如果你真的想确保缓存行为,你需要一个真正的缓存。喜欢 LRU-cache .尤其是当缓存对性能至关重要时,您应该使用适当的缓存。

关于java - SoftReference 过早地收集垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5757969/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com