- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当映射中的条目具有弱键引用时,该条目将在下一次垃圾收集时被删除,对吗?
可以理解为MapMaker
类提供了weakKeys
方法。但我对 weakValue()
感到困惑。我什么时候应该在 MapMaker
中使用 weakValue
或 softValue
?
最佳答案
你会使用 weakValues()
当您希望对其值难以访问的条目进行垃圾回收时。例如,这可能何时有用...假设您有一个类,允许用户向其添加对象并将它们作为值存储在 Map
中。无论出于何种原因。此类通常用作单例,因此它会在您的应用程序运行的整个过程中一直存在。但是,用户添加到其中的对象不一定是长期存在的。该应用程序将在完成之前很久就与他们一起完成。您不希望用户在完成这些对象时必须从您的类中手动删除这些对象,但是您不希望通过在您的类中永远保留对它们的引用而导致内存泄漏(换句话说,垃圾收集应该只是像平常一样工作,忽略你的类(class))。解决方法是给 map weakValues()
一切都会如您所愿。
softValues()
适合缓存...如果你有 Map<Integer, Foo>
并且您希望条目可以根据内存需求移动,您会想要使用它。你不想使用 weakKeys()
或 softKeys()
因为他们都使用 ==
identity,这会给您带来问题(无法使用键 300
获取值,因为您传入的键可能不是 ==
映射中的键)。
关于java - 什么时候应该使用 MapMaker 类的 weakValues()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5363212/
我对谷歌的 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
我是一名优秀的程序员,十分优秀!