Компания Facebook (забранена в Русия) е публикувала изходния код на инструмента memlab, създаден за анализ на състоянието на динамично разпределената памет (купчини), определяне на стратегии за оптимизация на работа с паметта и откриване на утечки на памет, възникващи при изпълнение на код на JavaScript. Кодът е отворен под MIT лиценз.
Фреймворкът е създаден за анализ на причините за високото потребление на памет при работа с уебсайтове и уебприложения. Например, с memlab е проведен анализ на потреблението на памет при използване на новата версия на сайта Facebook.com, което е позволило да се открият утечки, водещи до аварийно приключване на браузъра на страната на клиента поради изчерпване на свободната памет.
Причините за утечки на памет при изпълнение на JavaScript код могат да бъдат наличието на скрити референции към обекти, поради които събиращият боклука не може да освободи заетата от обекта памет, неразумно кеширане на стойности или реализация на безкрайна превъртане без изхвърляне на стари елементи от списъка. Например, в следния код в Chrome утечка на памет възниква поради обекта "obj", въпреки че му се присвоява стойност null, тъй като Chrome съхранява вътрешни референции към извежданите обекти, за да предостави възможност за последваща проверка в уебконзолата. var obj = {}; console.log(obj); obj = null;
Основни възможности на memlab:
- Откриване на утечки на памет в браузъра. Memlab позволява автоматично сравняване на снимки на състоянието на динамичната памет, откриване на утечки на памет и агрегация на резултати.
- Обектно-ориентиран API за итерация върху купчината, позволяващ реализиране на собствени алгоритми за откриване на утечки и внедряване на системи за анализ на снимки на състоянието на купчината. Подпомага анализ на купчината за браузъри, базирани на движка Chromium, както и за платформи Node.js, Electron и Hermes.
- Интерфейс на командния ред и API за търсене на възможности за оптимизация на употребата на паметта.
- Система за assert-ове за Node.js, позволяваща създаване на unit-тестове и изпълнение на програми на база Node.js за създаване на собствени снимки на състоянието, проверка на собствената памет или написване на разширени assert проверки.
Източник: opennet.ru
