memoria collection javascript garbage-collection html5-canvas kineticjs

javascript - memoria - js garbage collection



Cuál es la diferencia entre eliminar y destruir en kinetic.js (1)

Creo que tienes razón, pero solo para agregar a lo que dijiste, pensaría que usarías:

remove () - para eliminar un nodo y posiblemente usar ese nodo más tarde

destroy () - para destruir un nodo por completo si sabes que ya no necesitarás este nodo

Además, aquí hay algunos beneficios y desventajas de Garbage Collection tomados directamente de la wiki: http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29

Beneficios

La recolección de basura libera al programador de ocuparse manualmente de la desasignación de memoria. Como resultado, ciertas categorías de errores se eliminan o se reducen sustancialmente:

  • Errores de puntero colgando, que se producen cuando se libera un trozo de memoria mientras todavía hay punteros a él, y uno de esos punteros se desreferencia. Para entonces, la memoria puede haber sido reasignada a otro uso, con resultados impredecibles.
  • Doble error libre, que ocurre cuando el programa intenta liberar una región de la memoria que ya ha sido liberada, y que quizás ya haya sido asignada de nuevo.
  • Ciertos tipos de pérdidas de memoria, en las que un programa no puede liberar la memoria ocupada por objetos que se han vuelto inalcanzables, lo que puede provocar el agotamiento de la memoria. (Por lo general, la recolección de basura no se ocupa de la acumulación ilimitada de datos a los que se puede acceder, pero el programa no los utilizará realmente).
  • Implementaciones eficientes de estructuras de datos persistentes Algunos de los errores abordados por la recolección de basura pueden tener implicaciones de seguridad.

Desventajas

Por lo general, la recolección de basura tiene ciertas desventajas:

  • La recolección de elementos no utilizados consume recursos informáticos para decidir qué memoria liberar, aunque el programador ya haya conocido esta información. La penalización por la conveniencia de no anotar manualmente la duración del objeto en el código fuente es superior, lo que puede provocar un rendimiento reducido o desigual. La interacción con los efectos de jerarquía de memoria puede hacer que esta sobrecarga sea intolerable en circunstancias que son difíciles de predecir o detectar en las pruebas de rutina.
  • El momento en que se recoge realmente la basura puede ser impredecible, lo que da lugar a puestos dispersos por una sesión. Los puestos impredecibles pueden ser inaceptables en entornos de tiempo real, en el procesamiento de transacciones o en programas interactivos. Colectores de basura incrementales, concurrentes y en tiempo real abordan estos problemas, con diferentes intercambios.
  • GC no determinista es incompatible con la administración basada en RAII de recursos no GCed. Como resultado, la necesidad de una gestión de recursos manual explícita (lanzamiento / cierre) para recursos no GCed se vuelve transitiva a la composición. Es decir: en un sistema GC no determinista, si un recurso o un recurso como un objeto requiere administración manual de recursos (liberación / cierre), y este objeto se usa como "parte de" otro objeto, entonces el objeto compuesto también se convertirá en un recurso como objeto que requiere administración manual de recursos (lanzamiento / cierre).

Y también aquí hay otra referencia de SO: ¿Cómo funciona el mecanismo de recolección de basura?

Leí la documentación en KineticJS Docs y dice que:

destroy () - eliminar y destruir a uno mismo

remove () - eliminar self del padre, pero no destruir

Si lo que entiendo es correcto, la función remove () elimina el nodo de la matriz, pero todavía está asignado en la memoria. Mientras que destroy () libera completamente la memoria, ¿es correcto? ¿Alguien puede explicar en términos sencillos cuáles son algunas complicaciones si utilicé destroy over remove?

Gracias de antemano.

Un cordial saludo, Dandy Ling