Facebook відкрив код фреймворку для виявлення витоків пам'яті у JavaScript

Компанія Facebook (заборонена в РФ) відкрила вихідні тексти інструментарію memlab, призначеного для аналізу зрізів стану пам'яті (купи), що динамічно розподіляється, визначення стратегії оптимізації роботи з пам'яттю та виявлення витоків пам'яті, що виникають при виконанні коду мовою JavaScript. Код відкрито під ліцензією MIT.

Фреймворк було створено для аналізу причин великого споживання пам'яті під час роботи з web-сайтами і web-додатками. Наприклад, за допомогою memlab проводився аналіз споживання пам'яті під час використання нової версії сайту Facebook.com, який дозволив виявити витоку, що призводило до аварійного завершення браузера на стороні клієнта через вичерпання вільної пам'яті.

Причинами витоків пам'яті при виконанні JavaScript-коду може бути наявність прихованих посилань на об'єкти, через які збирач сміття не може звільнити пам'ять, що займається об'єктом, нерозумне кешування значень або реалізація нескінченної прокрутки без витіснення старих елементів списку. Наприклад у наведеному нижче коді в Chrome витік пам'яті виникає через об'єкт «obj», незважаючи на те, що йому присвоюється значення null, так як Chrome зберігає внутрішні посилання на об'єкти, що виводяться для надання можливості їх подальшого інспектування в web-консолі. 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

Додати коментар або відгук