[javascript] Las instancias a las que hace referencia 'bound_this' solo no son basura recolectada


0 Answers

He referido esto en EcmaScript , este término " liga esto" con clase,

Los métodos de clase han "enlazado esto", donde esto en el cuerpo del método siempre está vinculado a la instancia de clase de la que se extrajo el método, independientemente de qué este parámetro se pase al método (se ignora este parámetro para el método) .

Ahora, aquí, en su ejemplo, no hay una secuencia de comandos de muestra, así que no puede ser específico para la pregunta,

Tengo que decir si esto no es una fuga ...

entonces, con cualquier objeto, la clase del script está limitada, no llamará a basura hasta que exista la clase / objeto, ya que esta función está limitada con el mismo objeto ... solo se recolectará basura después de la de su padre (el objeto / clase con la que es limitado) finaliza el alcance.

Ahora bien, si la referencia circular cuando la tarea finalizará llegará a su fin, >> esto funciona como concepto de recursión (mente, concepto, no lo mismo que) ... así que el final comenzará desde la última llamada ... en reversa ... el la llamada más interna (última llamada) se lanzará primero ... y así sucesivamente

El código debe tener errores, ya que no deben vincular y definir la función y reutilizar cada vez ... pero si son vinculantes, entonces también debería funcionar bien y no debería perderse hasta que la huella salga del límite del explorador del grupo de memoria.

Espero que esto explique ...

Question

Tengo una pregunta sobre la recolección de basura en google chrome (Versión 20.0.1132.47, Ubuntu 11.04 64bit).

Mientras comparaba los volcados de pila y comprobaba si había fugas de memoria, descubrí algunas instancias que nunca se limpian. Normalmente este comportamiento se puede rastrear hasta un error de programador, pero en este caso no tengo ni idea.

Eche un vistazo a la siguiente captura de pantalla

La instancia 'child @ 610739' es referenciada solo por las instancias 'bound_this' que pertenecen a las funciones de la instancia child misma. Por lo tanto, a mi entender, la instancia hija debe ser recolectada como basura, ya que la única otra referencia que lo mantiene es la instancia hija misma (a través de las funciones 'bound_this').

Estoy usando la función de utilidad underscore.js '' bindAll '( underscore.js#bindAll ) que se asigna a la función' native_bind 'de chrome ( wiki de ECMA Script en bound_this )

¿Me estoy perdiendo algo obvio aquí y, si es así, alguien podría explicar qué es lo que mantiene estas instancias con vida?

ACTUALIZAR:
Mientras tanto probé la misma aplicación en chrominium (18.0.1025.168 (Desarrollador Build 134367 Linux) Ubuntu 11.10) que no muestra estas instancias colgantes.

ACTUALIZACIÓN 2:
Siguiendo la sugerencia de Esailijas de proporcionar un fragmento jsfiddle, creé uno ( http://jsfiddle.net/8gSTR/1/ ) que imita lo que estoy haciendo básicamente. La ejecución de este violín desafortunadamente no muestra la mala conducta que estoy experimentando en mi aplicación. Un heap-dump tomado mientras se siguen haciendo referencia a 'a'-instances parece similar aunque a pesar de la referencia de la matriz window.o que mantiene activas las instancias:

Como tal, falta una referencia en mi caso (captura de pantalla 1). No sé qué impide que Chrome libere estas instancias ...

ACTUALIZACIÓN 3:
Seguido loislos consejos para habilitar propiedades ocultas. El resultado (con una de las ramas expandidas) se puede ver en la siguiente captura de pantalla, pero no me lleva más lejos.






Related