¿Qué es una referencia blanda?

En el lenguaje de codificación Java®, constantemente se hacen referencias a objetos, cadenas y variables, incluso si el programador desconoce esas referencias. Estas referencias se comunican directamente con el recolector de basura, una función que recopila información innecesaria y la desecha para que ya no ocupe memoria. De forma predeterminada, todas las referencias son referencias sólidas y se establecen sin ningún código, lo que significa que no se envían al recolector de basura. Una referencia suave permite desechar los datos. Es la referencia de nivel medio para todas las referencias no sólidas.

Siempre que un programador hace algo con Java®, ya sea tan simple como crear una cadena o crear funciones complejas, se hace una referencia. El programador no tiene que escribir un comando de referencia; la referencia se hace automáticamente y es, por defecto, una referencia fuerte. Esto significa que los datos de la referencia no se pueden desechar, porque están vinculados a objetos integrales necesarios para todo el script.

Sin embargo, es necesario desechar algunos datos porque, de lo contrario, ocupan mucha memoria. Por ejemplo, si un programador crea un script en el que se utilizan números de serie o se recopilan o crean otras piezas temporales de información, retener esta información se vuelve perjudicial. El programa Java® se negaría a desechar la información, incluso cuando no fuera necesaria, y el script necesitaría cada vez más memoria para funcionar.

Al especificar una cadena o sección como referencia suave, que debe colocarse en la codificación, esto le dice al recolector de basura que los datos pueden ser liberados. Una vez liberada, la cadena o sección se leerá como «nula». El recolector de basura, dependiendo de su configuración, decidirá cuándo deben desecharse los datos.

Hay tres referencias no fuertes: referencia suave, referencia débil y referencia fantasma. La referencia débil es la más débil y sus datos se desechan rápidamente. Las referencias blandas, que son las mejores para scripts donde los datos temporales se pueden usar varias veces, son las siguientes en la fila. Una referencia fantasma se desecha casi automáticamente, en un segundo, y debe usarse con moderación.

El tiempo que permanece una referencia suave generalmente depende de la cantidad de memoria en la computadora. Si la memoria está llena, el recolector de basura primero destruirá todas las referencias débiles. Cuando desaparezcan todas las referencias débiles, y si la memoria aún necesita purgar datos, las referencias suaves se descartarán a continuación.