La empresa Facebook (prohibida en la RF) ha abierto los códigos fuente de la herramienta memlab, destinada al análisis de instantáneas del estado de la memoria dinámicamente distribuida (montón), a la determinación de estrategias de optimización del uso de la memoria y a la identificación de fugas de memoria que surgen al ejecutar código en JavaScript. El código se ha abierto bajo la licencia MIT.
El marco fue creado para investigar las causas de un alto consumo de memoria al trabajar con sitios web y aplicaciones web. Por ejemplo, mediante memlab se llevó a cabo un análisis del consumo de memoria al utilizar una nueva versión del sitio Facebook.com, que permitió identificar fugas que provocaban el cierre inesperado del navegador del lado del cliente debido a la falta de memoria libre.
Las causas de las fugas de memoria al ejecutar código JavaScript pueden incluir la existencia de referencias ocultas a objetos, lo que impide que el recolector de basura libere la memoria ocupada por el objeto, la caché ineficiente de valores o la implementación de un desplazamiento infinito sin deshacerse de los elementos antiguos de la lista. Por ejemplo, en el código a continuación en Chrome, se produce una fuga de memoria debido al objeto «obj», a pesar de que se le asigna el valor null, ya que Chrome mantiene referencias internas a los objetos mostrados para permitir su posterior inspección en la consola web. var obj = {}; console.log(obj); obj = null;
Principales características de memlab:
- Identificación de fugas de memoria en el navegador. Memlab permite comparar automáticamente instantáneas del estado de la memoria dinámica, identificar fugas de memoria y agregar resultados.
- API orientada a objetos para recorrer el montón, lo que permite implementar sus propios algoritmos de detección de fugas y realizar sistemas de análisis de instantáneas del montón. El análisis del montón se soporta para navegadores basados en el motor Chromium, así como para las plataformas Node.js, Electron y Hermes.
- Interfaz de línea de comandos y API para buscar oportunidades de optimización en el uso de memoria.
- Sistema de aserciones para Node.js, que permite crear pruebas unitarias y ejecutar programas basados en Node.js para crear instantáneas de su propio estado, verificar su memoria o escribir aserciones avanzadas.
Fuente: opennet.ru
