¿Qué es una referencia débil?
Una referencia débil es una referencia a un objeto en la memoria que no evita que un objeto sea limpiado por las rutinas de recolección de basura debido a su asociación con el objeto. Este tipo de referencia se usa comúnmente para ayudar a eliminar las fugas de memoria cuando existen condiciones especiales que eviten que ocurra la recolección de basura normal. Algoritmos de programación que utilizan una referencia circular o mantienen información extraña en un beneficio de caché o estructura especial mediante el uso de referencias débiles. La utilización de referencias débiles en este tipo de situaciones permite la limpieza de objetos referentes no utilizados y sus referencias débiles asociadas.
En la programación de computadoras, una referencia fuerte se crea típicamente de forma predeterminada cuando se crea un objeto, y la memoria ocupada por el objeto permanece asignada siempre que la fuerte referencia permanezca viable. Una referencia fuerte se anula y se asociaLa memoria de Object se libera poco después de una referencia fuerte y su objeto se marcan como un programa que ya no lo usa. En ciertas situaciones, como la programación de socket o las aplicaciones de manipulación de imágenes, las clases utilizadas para crear objetos de trabajo no tienen la capacidad incorporada para almacenar información adicional que requiere una aplicación específica. Los detalles adicionales de los objetos transitorios, como las conexiones o las imágenes, deben almacenarse en objetos de caché suplementarios y vinculados a los objetos transitorios por referencias. Cuando se usa una referencia débil en lugar de una referencia fuerte, la información adicional no está vinculada por la referencia y puede ser eliminada del caché por el recolector de basura una vez que el objeto referente ha sido marcado como no viable.
Las clases de referencia débiles normalmente están disponibles en idiomas que se aumentan por los subsistemas de recolección de basura, incluidos Java, Python, Perl, C#y .NET Framework. En C ++, sin embargo, los programadores suelen ser RESPonible para garantizar la limpieza de la memoria. Este idioma ha implementado una clase de puntero inteligente que proporciona algunas de las mismas funcionalidades que proporcionan las referencias débiles y la recolección de basura, lo que ayuda a reducir las fugas de memoria causadas por la limpieza inadecuada del puntero.
Para facilitar aún más la gestión de la memoria, los idiomas con las instalaciones de recolección de basura también pueden mejorar la funcionalidad de un idioma al proporcionar gradientes más finos de referencias distintas de la referencia fuerte o débil. Los tipos de datos, como las referencias suaves y las referencias fantasmas, se pueden incluir en estos idiomas, lo que permite diferentes niveles de recuperación de objetos o notificación de desacuerdo. Los programadores que usan idiomas con recolección de basura automatizada deben familiarizarse con todas las clases de referencia disponibles para mejorar el rendimiento de la aplicación.