Java Guava文件缓存
我在Android应用程序中使用Guava加载图像并缓存文件名 这是我的缓存:Java Guava文件缓存,java,android,caching,guava,Java,Android,Caching,Guava,我在Android应用程序中使用Guava加载图像并缓存文件名 这是我的缓存: private static final LoadingCache<String, String> imageCache = CacheBuilder.newBuilder() .softValues() .initialCapacity(3000) .maximumSize(3000) .concurrencyLevel(12) .expireAfterAcces
private static final LoadingCache<String, String> imageCache = CacheBuilder.newBuilder()
.softValues()
.initialCapacity(3000)
.maximumSize(3000)
.concurrencyLevel(12)
.expireAfterAccess(IMAGE_EXPIRATION_TIMEOUT, TimeUnit.SECONDS)
.build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
Log.d(TAG, "load " + key);
Bitmap bitmap = null;
final File imageFile = new File(cacheDir, "http---com-jWs-jpg");
return imageFile.getPath();
}
});
我的问题是:我的列表中有12个唯一的URL,但我的错误计数太大:
i:cache size :6:CacheStats{hitCount=36, missCount=48, loadSuccessCount=48, loadExceptionCount=0, totalLoadTime=46569827...)
当我返回简单字符串(如文件路径或简单的空字符串)时,我只有12次未命中,其他get
是命中率。我做错了什么?好的,明白了
.softValues()
是原因,我的值由垃圾收集器收集。当我对此进行评论时,一切都正常了。这段代码看起来不错。您确定它没有因正常原因过期吗?公共静态最终int映像\u过期\u超时=7200;-我认为,在几秒钟内过期太多了超时时间是以毫秒为单位的——也就是7秒——如果您使用了大量内存,softValues
可能会获取GC'd项。尝试添加一个RemovalListener来记录逐出和原因。expireAfterAccess(IMAGE\u EXPIRATION\u TIMEOUT,TimeUnit.SECONDS)-我已经指定了以秒为单位的超时时间,当我尝试增加它时,没有发生任何事情等待。正确的。嗯,对不起。不过,还是要使用RemovalListener
查看是否发生了逐出以及原因。不管怎样,同时使用三种不同的过期策略有点过分。(每个条目都会消耗额外的内存。)
i:cache size :6:CacheStats{hitCount=36, missCount=48, loadSuccessCount=48, loadExceptionCount=0, totalLoadTime=46569827...)