El problema del oyente caducado es una fuente común de pérdidas de memoria para los lenguajes de programación orientados a objetos, entre los más comunes para los lenguajes de recolección de basura . [1]
Se origina en el patrón del observador , donde los observadores (u oyentes) se registran con un sujeto (o editor) para recibir eventos. En la implementación básica, esto requiere tanto el registro explícito como el desregistro explícito, como en el patrón de disposición , porque el sujeto tiene fuertes referencias a los observadores, manteniéndolos vivos. La filtración ocurre cuando un observador no puede darse de baja del sujeto cuando ya no necesita escuchar. En consecuencia, el sujeto todavía tiene una referencia al observador que evita que se recolecte basura, incluidos todos los demás objetos a los que se refiere, mientras el sujeto esté vivo, que podría ser hasta el final de la aplicación.
Esto provoca no sólo una pérdida de memoria, sino también una degradación del rendimiento con un observador "desinteresado" que recibe y actúa sobre eventos no deseados. Esto puede evitarse si el sujeto tiene referencias débiles a los observadores, lo que les permite ser recolectados como basura de forma normal sin necesidad de anular el registro.
Referencias
- ↑ Memory Loiterers in Java , Ethan Henry y Ed Lycklama