the*_*nce 1 java memory caching guava
我试图以这种方式为LRU驱逐策略创建一组字符串的缓存.
private static final Boolean PLACEHOLDER = true;
LoadingCache<String, Boolean> scannedIDsCache = CacheBuilder.newBuilder()
.build(new CacheLoader<String, Boolean>() {
@Override
public Boolean load(String key) throws Exception {
return PLACEHOLDER;
}
});
Run Code Online (Sandbox Code Playgroud)
我想我只使用一个对象作为所有元素的值来节省空间,我是否正确?你知道其他任何节省空间的方法吗?谢谢.
不,你没有节省空间.
当JVM*自动装箱时,boolean它会调用Boolean.valueOf(boolean)哪个返回Boolean.TRUE或Boolean.FALSE哪个是static final Boolean字段.它不会创建新Boolean实例.因此,PLACEHOLDER您所定义的实际上是一个参考,Boolean.TRUE并且是多余的.
此外,我不会将Guava Cache用于LRU,除非我愿意接受这样的事实:"缓存可能会因为最近或非常常使用而逐出条目"(CacheBuilder.maximumSize(long),强调添加).
如果你想要一个直线上升的LRU可以使用Collections.newSetFromMap(Map)具有LinkedHashMap:
Set<String> cache = Collections.newSetFromMap(new LinkedHashMap<String, Boolean>() {
@Override
protected boolean removeEldestEntry(Map.Entry<String, Boolean> eldest) {
return size() > MAX_ENTRIES;
}
});
Run Code Online (Sandbox Code Playgroud)
你定义的地方MAX_ENTRIES.
*注意:理论上可能有一些JVM实现Boolean.valueOf(boolean)在运行时在自动装箱boolean原语时没有调用(或类似的东西),但是如果存在这样的实现,我相信你没有使用它而且很少有任何个人都是.来自Boolean(boolean):
注意:使用此构造函数很少是合适的.除非需要新实例,否则静态工厂
valueOf(boolean)通常是更好的选择.它可能会产生明显更好的空间和时间性能.
| 归档时间: |
|
| 查看次数: |
676 次 |
| 最近记录: |