先前我得出的结论是,如果您需要一个基于值(value)(等于)的平等的SoftReference,那么除了这方面的合作者之外,它的设计还很糟糕。这是继Google Collections和Guava之外的此类类(class)。但是我遇到了一个问题,我认为可以使用这样的对象。
我们在视觉效果渲染场中拥有一个 Assets 管理系统,其中有100多个进程运行相同的作业,只是其渲染的帧数不同。我们有一个Oracle数据库,需要记录所有使用的 Assets 。在中间层 Assets 管理系统中,我们可以使用HashSet来记录是否将要插入到Oracle中的对象,而不是用相同的插入方法来捣碎Oracle,而在插入操作中只有一个方法会成功完成所有工作。
我可以使用带有到期时间的Google MapMaker,但是我不必担心正确设置到期时间,因为我们可以在数小时甚至数天的时间内运行渲染。使用具有相等相等性的SoftReference听起来是一种更好的方法,因此JVM将自动管理垃圾收集。
对于我想使用带有垃圾收集的ConcurrentHashMap解决的其他问题,我将在HashMap中使用强引用作为获取equals()相等性的键,并使用SoftReference作为值,以便JVM可以进行垃圾收集。情况下,该值无所谓,并且我没有要包装在其中的SoftReference中的值。因此,将SoftReference与equals()结合使用似乎可以解决问题。
还有其他建议吗?
最佳答案
在大多数情况下,如果您想在Google Collection 夹中使用软引用,则应致电
MapMaker.softValues()
如果使用强键但软值,则查询将使用相等性,并且在内存紧张时将对键值对进行垃圾回收。