SoftReference可能用于值(等于)相等

Bla*_*jac 9 java concurrency concurrenthashmap guava

我之前得出的结论是,如果你需要一个基于值(等于)相等的SoftReference,那么一个设计不好,除了这个内容之外.这是关注Google Collections和Guava不包括这样的类.但我遇到了一个我认为可以使用这样一个对象的问题.

我们在视觉效果渲染场中有一个资产管理系统,其中100个进程运行相同的作业,只有它渲染的帧数不同.我们有一个Oracle数据库需要记录所有使用的资产.在中间层资产管理系统中,我们可以使用HashSet来记录是否将插入到Oracle中的对象,而不是使用相同的插入来冲击Oracle,其中只有一个将从所有作业中成功.

我可以使用过期的Google MapMaker,但我不想担心过期是正确的,我们会在几小时内和几天内渲染.使用等于等于的SoftReference听起来是一种更好的方式,因此JVM将自动管理垃圾收集.

对于我想用ConcurrentHashMap和垃圾收集解决的其他问题,我会在HashMap中使用强引用作为获取equals()相等性的关键,并使用SoftReference作为值,以便JVM可以垃圾收集内容,但是在此在这种情况下,值无关紧要,我没有在SoftReference中包装的值.所以似乎使用带有equals()的SoftReference就可以了.

还有其他建议吗?

Jar*_*evy 1

在大多数情况下,当您想要对 Google Collections 使用软引用时,您应该调用

MapMaker.softValues()
Run Code Online (Sandbox Code Playgroud)

对于强键但软值,查找将使用相等,并且当内存紧张时键值对将被垃圾收集。