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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ