Llegué anteriormente a la conclusión de que si necesita una igualdad basada en el valor de SoftReference (igual), entonces uno tenía un diseño incorrecto, excepto un interno de este. Esto sigue a Google Collections y Guava sin incluir dicha clase. Pero me he encontrado con un problema que creo que podría usar un objeto así.Uso potencial para SoftReference con igualdad de valor (igual)
Tenemos un sistema de gestión de activos en una granja de renderizado de efectos visuales con cientos de procesos ejecutando el mismo trabajo que solo difieren en el número de fotograma que representa. Tenemos una base de datos Oracle que necesita registrar todos los activos utilizados. En lugar de golpear a Oracle con insertos idénticos donde solo uno tendrá éxito en todos los trabajos, en el sistema de administración de activos de nivel medio podemos usar un HashSet para registrar si el objeto que se insertará en Oracle.
Podría utilizar un MapMaker de Google con un vencimiento, pero no quiero tener que preocuparme de que la caducidad sea correcta, hemos procesado en horas y algunos días. El uso de una referencia suave con igual igualdad suena como una forma mucho mejor para que la JVM administre la recolección de basura automáticamente.
Para otros problemas que queremos resolver con un ConcurrentHashMap con la recolección de basura, me gustaría utilizar una fuerte referencia en el HashMap como la clave para conseguir iguales() de igualdad y un SoftReference como el valor por lo que la JVM puede recoger la basura algo , pero en este caso, el valor no importa y no tengo un valor para ajustar en una referencia suave para poner allí. Por lo tanto, parece que usar una referencia suave con iguales() haría el truco.
¿Alguna otra sugerencia sobre esto?
Me encanta su pregunta, me he estado preguntando sobre eso también hace poco – nanda
¿No hace 'ResourceBundle' hacer algo como esto? –
@nanda lo que se agrega a Oracle es una lista de activos (digamos nombres de archivos en un servidor NFS) generados dinámicamente; ResourceBundle no parece ser el adecuado. Solo necesito un HashSet para registrar que el nombre de archivo fue grabado en Oracle, así que otros 99 intentos de insertarlo no desperdician ciclos de CPU en Oracle. –