Articulo de referencia

Problema de oyentes inactivos

En programación informática , el problema del oyente lapso es una fuente común de fugas de memoria para los lenguajes de programación orientados a objetos , y una de las más com...

En programación informática , el problema del oyente lapso es una fuente común de fugas de memoria para los lenguajes de programación orientados a objetos , y una de las más comunes para los lenguajes con recolección de basura . [ 1 ]

Se origina en el patrón observador , donde los observadores (o oyentes) se registran con un sujeto (o publicador) para recibir eventos . En la implementación básica, esto requiere tanto el registro explícito como la cancelación explícita del registro, como en el patrón Dispose , ya que el sujeto mantiene referencias fuertes a los observadores, manteniéndolos activos. La fuga de memoria ocurre cuando un observador no se da de baja del sujeto al dejar de escuchar. En consecuencia, el sujeto aún mantiene una referencia al observador, lo que impide que se elimine mediante el recolector de basura —incluidos todos los demás objetos a los que hace referencia— mientras el sujeto esté activo, lo que podría ser hasta el final de la aplicación.

Esto provoca no solo una fuga de memoria, sino también una degradación del rendimiento, ya que un observador "desinteresado" recibe y actúa sobre eventos no deseados. Esto se puede evitar si el sujeto mantiene referencias débiles a los observadores, lo que permite que se eliminen mediante el recolector de basura de forma normal sin necesidad de anular su registro.

Referencias

  1. Recuperación de memoria en Java , Ethan Henry y Ed Lycklama