A empresa Facebook (proibida na Rússia) liberou os códigos-fonte da ferramenta memlab, destinada à análise de cortes do estado da memória dinâmica (heap), definição de estratégias de otimização do uso da memória e identificação de vazamentos de memória que ocorrem durante a execução de código em JavaScript. O código está aberto sob a licença MIT.
O framework foi criado para investigar as causas do alto consumo de memória durante o funcionamento de sites e aplicativos web. Por exemplo, com o memlab, foi realizada uma análise do consumo de memória ao utilizar a nova versão do Facebook.com, que permitiu identificar vazamentos que levavam ao encerramento inesperado do navegador do lado do cliente devido à falta de memória livre.
As causas de vazamentos de memória durante a execução de código JavaScript podem ser a presença de referências ocultas a objetos, que impedem o coletor de lixo de liberar a memória ocupada pelo objeto, cache inadequado de valores ou a implementação de rolagem infinita sem remoção de elementos antigos da lista. Por exemplo, no código abaixo, em Chrome, ocorre um vazamento de memória devido ao objeto "obj", mesmo que ele receba o valor null, pois o Chrome mantém referências internas aos objetos exibidos para permitir a inspeção posterior na console web. var obj = {}; console.log(obj); obj = null;
Principais recursos do memlab:
- Detecção de vazamentos de memória no navegador. O memlab permite comparar automaticamente instantâneas do estado da memória dinâmica, identificar vazamentos de memória e agregar resultados.
- API orientada a objetos para percorrer o heap, permitindo implementar algoritmos próprios de detecção de vazamentos e realizar sistemas de análise de instantâneas do heap. A análise do heap é suportada para navegadores baseados no mecanismo Chromium, assim como para plataformas Node.js, Electron e Hermes.
- Interface de linha de comando e API para buscar oportunidades de otimização do uso da memória.
- Sistema de asserts para Node.js, permitindo a criação de testes unitários e execução de programas baseados em Node.js para gerar instantâneas do seu próprio estado, verificar sua memória ou escrever asserts avançadas.
Fonte: opennet.ru
