- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我刚看到这个answer in SO其中提到 Google Collection MapMaker太棒了。我仔细阅读了文档,但无法真正弄清楚我可以在哪里使用它。任何人都可以指出一些适合使用 MapMaker 的场景。
最佳答案
这是我使用 MapMaker
的一种方式的快速示例:
private final ConcurrentMap<Long, Foo> fooCache = new MapMaker()
.softValues()
.makeComputingMap(new Function<Long, Foo>() {
public Foo apply(Long id) {
return getFooFromServer(id);
}
});
public Foo getFoo(Long id) {
return fooCache.get(id);
}
当在 map 上调用 get(id)
时,它将返回 map 中该 ID 的 Foo
或从中检索它服务器,缓存它,并返回它。一旦设置好,我就不必再考虑这个了。另外,由于我设置了 softValues()
,因此缓存无法填满并导致内存问题,因为系统能够根据内存需求清除缓存中的条目。但是,如果从映射中清除缓存值,它可以在下次需要时再次向服务器请求!
事实是,这只是它的一种使用方式。让 map 使用强键、弱键或软键和/或值的选项,以及在特定时间后删除条目的选项,让您可以用它做很多事情。
关于java - 使用 Google Collection MapMaker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737140/
我对谷歌的 MapMaker 印象深刻设计。我想知道这里使用的模式的名称是什么? (我认为它有点像装饰器模式,但我们不必将对象包装在其他对象中以扩展功能,但我无法弄清楚它到底是哪种模式。) MapMa
我想使用 MapMaker 创建一个缓存大对象的 map , 如果没有足够的内存,应该从缓存中删除它。 这个小演示程序似乎工作正常: public class TestValue { priv
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Why is softKeys() deprecated in Guava 10? 原因MapMaker.softK
MapMaker maximumSize 在 google guava 库中被标记为 @Beta。当您将它用作缓存时设置最大大小是一个非常有用的功能,我想在生产代码中使用它。从使用其他谷歌产品的经验来
我需要一个带有弱键或软键的并发 HashMap ,其中等式是 equals 而不是 ==。 对于此类键,Google Collection 默认选择 ==。 有没有办法覆盖这个选择?我应该如何进行?
我刚看到这个answer in SO其中提到 Google Collection MapMaker太棒了。我仔细阅读了文档,但无法真正弄清楚我可以在哪里使用它。任何人都可以指出一些适合使用 MapMa
当映射中的条目具有弱键引用时,该条目将在下一次垃圾收集时被删除,对吗? 可以理解为MapMaker类提供了weakKeys方法。但我对 weakValue() 感到困惑。我什么时候应该在 MapMak
我想知道目前是否有一种方法可以使用 Guava MapMaker 或将使用 CacheBuilder 来提供计算缓存是否在最大大小范围内的函数? 看起来目前的驱逐只是基于缓存中的元素数量与 .maxi
我需要获取慢速方法的结果slowResult()对于类 Something 的实例。单独缓存并没有什么帮助,因为实例几乎不会重复。幸运的是,我知道结果实际上只取决于一些容易获得的Attributes的
我们有一台缓慢的后端服务器,正在被负载压垮,并且我们希望中间层 Scala 服务器对于每个唯一的查找只有一个对后端的未完成请求。 后端服务器只存储不可变的数据,但当有新数据添加时,中间层服务器会代表客
我读过很多人真的很喜欢 MapMaker Google Guava(集合),但是我看不到它有任何好的用途。 我已经阅读了 javadoc,它说它的行为类似于 ConcurrentHashMap .它还
我尝试使用 MapMaker/CacheBuilder 制作缓存,但我不明白如何正确处理空值。 ConcurrentMap graphs = new MapMaker() .concu
我正在使用 MapMaker 在我的应用程序中实现数据对象的缓存: public class DataObjectCache { private final ConcurrentMap inn
我刚刚下载了最新版本的 Guava com.google.guava guava 20.0-hal 我发现 MapMaker 类不再有方法 expiration,我发现它
我们有一个 Scala 服务器,它通过套接字使用 Protocol Buffers 获取节点树,我们需要将额外的数据附加到每个节点。 在单线程上下文中,当节点树和关联数据将同时删除它们的强引用时(由于
我不习惯处理 Java 中的软引用和弱引用,但我理解其中的原理,因为我习惯处理像 Gemfire 这样的数据网格,它在内存已满时提供溢出到硬盘功能,可能使用软引用或我猜是类似的东西。 我在 Guava
我正在尝试将 apache Spark 与 spring-boot cassandra 项目集成。但在运行项目时出现以下错误: Servlet.service() for servlet [d
这可能是预期的行为,但我找不到任何这样说明的文档。我正在使用 Guava 14.0.1。在下面的示例中, map 中没有对键的强引用的条目被删除,这是我所期望的,但 map 的大小变得不同步。 在第一
我用的是 Guava 17.0 private static final ConcurrentMap imageMap = new MapMaker().softValues().ma
我在使用 google-guava 的 MapMaker 时遇到问题。这是代码: package test; import java.lang.ref.SoftReference; import ja
我是一名优秀的程序员,十分优秀!