The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

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

19.09.2022 20:01

Компания 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-проверок.


  1. Главная ссылка к новости (https://engineering.fb.com/202...)
  2. OpenNews: Facebook выделил C++, Rust, Python и Hack в качестве предпочтительных языков программирования
  3. OpenNews: Facebook опубликовал модель для машинного перевода, поддерживающую 200 языков
  4. OpenNews: Facebook представил механизм TMO, позволяющий экономить 20-32% памяти на серверах
  5. OpenNews: Facebook открыл код Lexical, библиотеки для создания редакторов текста
  6. OpenNews: Facebook открыл код статического анализатора Mariana Trench
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/57802-facebook
Ключевые слова: facebook, memory, debug, javascript
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (117) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, ip1982 (ok), 20:39, 19/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > obj = null;

    Это утечка памяти в Яваскрипте. Ок. После "1" + 1 и т. п. я ничему не удивляюсь. А также filter(None, ...) в питоне.

     
     
  • 2.28, Аноним (28), 21:23, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • –8 +/
    > А также filter(None, ...) в питоне.

    И что ты там не осилил понять? Прочитать одно предложение из документации?

     
  • 2.32, Аноним (32), 21:28, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +6 +/
    В С# и Java тоже почему-то "1" + 1 равно "11"
    И в C++ для std::string
    Почему?
     
     
  • 3.36, Аноним (36), 21:33, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что любят обмазываться неявным и несвежим и искать потом трудноуловимые баги)
     
     
  • 4.40, Аноним (32), 21:39, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Это что за неуловимый бог от автоматического вызова toString() при конкатенации со строкой?
    Приведите реальный пример такого бага, например на java.
     
     
  • 5.66, Аноним (32), 22:13, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    *неуловимый баг
     
     
  • 6.121, Аноним (121), 00:10, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    и так нормально было
     
  • 5.170, _kp (ok), 11:23, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Причину таких "неуловимых" багов лучше искать в зеркале.
    Да, грамотных программистов на всё не хватит, но тут можно или повышать грамотность и требования, или обложить "макаку" костылями и поощрять массовое невежество.
     
     
  • 6.190, длиннохвостая мартыха (?), 15:00, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Или изобрести другой оператор для соединения строк, например:
    "1" || 1
    Дал бы строку "11", а вот:
    "1" + 1
    Дал бы число 2.
     
     
  • 7.208, _kp (ok), 11:19, 21/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Или изобрести другой оператор для соединения строк

    В php используется отдельный оператор для конкатенации строк. При его типизации это полезная идея.

    А языки с со строгой типизацией и приведением типов, приводят типы по первому операнду или к явно заданному типу результата. Трудно не запомнить.
    И то, если предупреждения не отключать, g++ выдаст предупреждение на местах где может быть потенциальная ошибка.

     
  • 4.159, bOOster (ok), 08:33, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    rust?
     
  • 3.90, Аноним (90), 23:11, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В C/C++ "1" + 1 равно "" (пустой строке).
     
     
  • 4.94, Аноним (90), 23:15, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А std::string("1") + 1 не скомпилируется.
     
  • 4.148, Аноним (121), 01:49, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    не равно, вот содержимое по указателю равно (и то - если сравнивать до \0)
     
  • 3.132, trdm (ok), 00:23, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    в 1С тоже "1"+1 = "11";
    а 1 + "1" = 2
     
  • 2.34, Аноним (36), 21:30, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Раскройте мысль про фильтр в питоне? задокументированное поведение - которое оставит тру-объекты. не очень читаемо - да, но так и все фп в питоне по построению такое чтобы больше использовали классы и объекты с компрехеншнами. т.е. тут явная философия прослеживается
     
     
  • 3.41, Атятя (?), 21:44, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >Раскройте мысль про фильтр в питоне?

    Дело функции высшего порядка - принимать функции. Например, identity.

    >не очень читаемо - да, но так и все фп в питоне по построению

    Это не проблема фп и тут это не проблема фп в питоне. Это проблема питоняш, которым сложна выучить три с половиной функции и проблема того, кто выпилил из питона expressions, заменив их statements (а потом судорожно впиливающего expressions назад в виде :=). То, что в питоне угробила ООП - это вина Россума, в это ФП не умеющего.

    >больше использовали классы

    Добро пожаловать на руби и смоллток, да и common lisp тут полущ будет.

    >философия

    Васик нашего времени как-то слабо тянет на философию.

     

  • 1.2, Аноним (2), 20:45, 19/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
      var obj = {};
      console.log(obj);
      obj = null;

    И где тут утечка? Память, на к-ю указывал obj больше никем не используется, спокойно можно её удалять.

     
     
  • 2.4, Дубльджва (?), 20:47, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • –7 +/
    Типа должен появиться джин и исполнить твоё желание? Залезай в код движка и освобождай.
     
     
  • 3.7, Аноним (2), 20:51, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Типа gc вообще никогда там память не чистит, что даже в таком простейшем случае лажает?
     
     
  • 4.74, Дубльджва (?), 22:25, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • –7 +/
    Кек, какой ещё gc?
    V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++
     
     
  • 5.92, Аноним (92), 23:14, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну ок, а джаве тоже нету GC, она ведь тоже на С++ написана. Я тебя понял.
     
     
  • 6.117, Дубльджва (?), 00:04, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Тебе сказали лезь в движок и исправляй код.
     
     
  • 7.176, Аноним (176), 13:25, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А не пошёл бы ты в жoпy? Если даже гугл не осилил пофиксить утечки в своём собственном движке - это фактически расписка в том, что сделать это невозможно.
     
  • 5.135, trdm (ok), 00:24, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    в С++ в Qt есть GC
     
     
  • 6.149, Аноним (121), 01:50, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    нет
     
     
  • 7.171, _kp (ok), 11:26, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если включить компоненты с GC, то будет. И не только с QT.
     
  • 3.47, Аноним (32), 21:49, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Этот волшебный джин называется Garbage collection
     
     
  • 4.48, Аноним (32), 21:51, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Garbage collector
     
  • 2.14, Аноним (14), 21:07, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >Например в нижеприведённом коде в Chrome утечка памяти возникает из-за объекта "obj", несмотря на то, что ему присваивается значение null, так как Chrome сохраняет внутренние ссылки на выводимые объекты для предоставления возможности их последующего инспектирования в web-консоли.

    В новости написано же.

     
     
  • 3.18, НяшМяш (ok), 21:16, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Это скорее не утечка, а поведение платформы. В принципе, чего ещё от хромиумных ожидать. /s
     
     
     
    Часть нити удалена модератором

  • 5.44, Аноним (32), 21:47, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А в чем ограничен мозг у предыдущего комментатора?
    Ни одной ссылки на обьект внутри js кода в примере из новости нет и сборщик мусора его должен удалить.
    Но не удаляет так как так как браузеру зачем-то нужно хранить вечную ссылку чтобы показать что-то в отладочной консоли.

    И вообще где в стандарте написано что console.log создаёт неудаляемый объект?

     
     
  • 6.51, Аноним (-), 21:58, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Та вроде пишут что-то непонашему:

    Please be warned that if you log objects in the latest versions of Chrome and Firefox what you get logged on the console is a reference to the object, which is not necessarily the 'value' of the object at the moment in time you call console.log(), but it is the value of the object at the moment you open the console.

     
     
  • 7.64, Аноним (32), 22:11, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Это в стандарте ecmascript так и написано Firefox и chrome должны навсегда сохранять объекты для которых был вызван console.log? А как же другие браузеры им то можно их удалить?
     
     
  • 8.72, Аноним (72), 22:19, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    ECMAScript описывает базовые положения языка и ни про какой input-output включа... текст свёрнут, показать
     
  • 8.197, Аноним (197), 16:24, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В консоли объект не просто выводится в виде текста Он должен продолжать где-то ... текст свёрнут, показать
     
  • 8.209, Аноним (209), 13:19, 21/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    console не является частью ecmascript ... текст свёрнут, показать
     
  • 6.60, Аноним (72), 22:08, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А где написано, что не создает ссылки? В спеках вызов логгера - "implementation-defined side effect". В правильно настроенном сборщике все console.log вырезаются из продакшн-сборки, а линтер на них ругается или кидает ворнинг.
     
  • 4.115, Аноним (14), 23:51, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Утечка, которую создаёт поведение платформы.
     
  • 2.17, Аноним (28), 21:15, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вот так сишники CVE и прогают, думая что область памяти и указатель на неё — одно и то же. А всего-то нужно было прочитать предыдущее предложение.
     
     
  • 3.118, Аноним (92), 00:06, 20/09/2022 Скрыто модератором
  • +/
     
  • 2.153, анонимывпывп (?), 04:36, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > в нижеприведённом коде в Chrome утечка памяти возникает из-за объекта "obj", несмотря на то, что ему присваивается значение null, так как Chrome сохраняет внутренние ссылки на выводимые объекты для предоставления возможности их последующего инспектирования в web-консоли

    ты бы чуть ниже прочитал, хоспаде, чел

     

  • 1.6, Аноним (2), 20:50, 19/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    использовании новой версии сайта Facebook.com, приводившие к аварийному завершению браузера на стороне клиента

    Фейсбук рулит (нет)

     
     
  • 2.187, JackONeill (?), 14:54, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем? Зачееем некоторые стали писать (нет) ?? Для кого это вообще?)))).
     

  • 1.12, YetAnotherOnanym (ok), 21:04, 19/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Сначала напихаем в веб-страницу кучу ненужнокода, а потом начнём выяснять где память утекает.
     
     
  • 2.25, Аноним (25), 21:22, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • –6 +/
    Ну конечно давай не будет ничего добавлять и дружно будем сидеть в консоли в консольных соцсеточках. Как перестать с тебя орать?
     
     
  • 3.157, Без аргументов (?), 07:24, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Чтобы загрузить чат, достаточно даже на JS отправить запрос и получить один ответ размером в 5Кб. Но вебманки называют чисто язык JS нативным, прямо как отдельное что то, не обязательное к изучению при шлепании на реактах.
     
     
  • 4.160, Аноним (160), 09:39, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Будет некрасиво и не интерактивно пользователям это не нравится. А ты проходи в консоль не задерживайся.
     
  • 3.199, Аноним (199), 17:38, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >в консольных соцсеточках

    Хотеть.

     

  • 1.13, Корец (?), 21:05, 19/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Граждане, это что же получается, js в браузере теперь пора заменять на раст?

    На сишку. В сишке, если ты вызвал free(), то это железно. Все эти {полу-}автоматические управления памятью - полумеры. В сишке если ты забыл что-то, то виноват ты сам. В язычках, типа js, как выясняется, программист может только писать код и надеяться, что он будет работать так, как ожидается.

     
     
  • 2.31, Аноним (31), 21:27, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    на html

    выполнять неконтролируемый (<<докапываться до орфографии здеся<<) чужой код на своём компе - изначально плохая идея

     
     
  • 3.71, Корец (?), 22:18, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ты вещаешь так, как будто ты контролирешь весь тот js, который выполняется в твоём браузере ;)

    -Да, но ведь js выполняется в браузере и обёрнут в 100500 песочниц!
    -Но что нам мешает запустить таким же образом код на любом другом языке?

     
     
  • 4.75, Аноним (31), 22:28, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    чукча не читатель?
     
  • 2.38, Аноним (38), 21:34, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Зря минусите. Лучшего управления памятью чем вручную еще никто не придумал. Это железобетонный факт, смиритесь.
     
     
  • 3.167, Аноним (167), 10:56, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вручную можно как очистить. Так и злонамеренно не отчистить например.
     
  • 2.49, Аноним (-), 21:52, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > В сишке если ты забыл что-то, то виноват ты сам. В язычках, типа js, как выясняется, программист может только писать код и надеяться, что он будет работать так, как ожидается.

    Если ты не понимаешь, как работает сборщик мусора, то это _ты_ не понимаешь. Это твоя безграмотность светится, а не особенности сборщика мусора.

     
     
  • 3.62, Аноним (-), 22:10, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >это другое, понимать надо
     
  • 3.69, Корец (?), 22:15, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Тогда просяти меня! Я полагаю, что сборщик мусора должен уничтожать всё, на что не осталось ни единой ссылки. Как раз как в коде в новости.
     
     
  • 4.104, Аноним (-), 23:27, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Там в новости объяснено, что ссылка осталась. Читай внимательнее.
     
  • 4.151, Аноним (151), 04:00, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ппц ты деревянный, точно программированием деньги зарабатываешь? Из статьи разве непонятно, что твой код не даёт никаких гарантий сам по себе, даже будучи формально корректным, нужно учитывать ещё контринтуитивный саботаж со стороны платформы V8, что в определенных условиях ссылки на все именованные аллокации в куче неявно складываются в глобальный кэш, из-за чего GC не может ничего собрать,  так как кэш жив до закрытия браузера?
     
     
  • 5.164, _hide_ (ok), 10:46, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Как я понял, новость кто-то поправил или я нить Ваших рассуждений теряю.
    Ведь черным по белому написано, что никакого кеша нет, просто панель отладки является частью страницы и, если Вы в неё что-то запулили, то ссылка на объект "будет жить вечно", пока консоль не будет очищена. Это неожиданно, но не смертельно (вообще не думал, что такое в продакшене встречается часто)
     
  • 2.52, Анонн (?), 22:00, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Да, в сишечке это железно. Вызвал free, а потом другой объект к обратился по этому указателю.
    И use-after-free получил. Железно!
     
     
  • 3.63, Корец (?), 22:11, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +5 +/
    >Вызвал free, а потом другой объект к обратился по этому указателю. И use-after-free получил.
    >В сишке если ты забыл что-то, то виноват ты сам.
     
     
  • 4.134, Аноним228 (?), 00:24, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ты о чем? мы про утечку памяти гутарим.
     
  • 4.152, Аноним (151), 04:11, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Вот поэтому сишка уместна для микроконтроллерных прошивок и шеллкодов на 2-3 тысячи строк кода максимум, а для чего-то размером с браузер лучше взять раст. Чем меньше человеческого фактора в кодовой базе, тем лучше. Утверждать обратное - говорить примерно то же самое, что если водишь давно и много, то тебе ремень и подушки безопасности не нужны.
     
     
  • 5.196, Совершенно другой аноним (?), 16:06, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > для чего-то размером с браузер лучше взять раст.

    В Мозилле взяли rust для браузера и не смогли..

     
  • 3.97, Аноним (92), 23:18, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    И нахер ты обращаешься к указателю, к-й уже указывает на невалидную память?
     
     
  • 4.202, YetAnotherOnanym (ok), 18:49, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Он по-другому не умеет. И виновата в этом дырявая сишка.
     
  • 3.172, _kp (ok), 11:43, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Язык делает то что приказали. И делает хорошо. Для того он и создан.
    Но, при отсутствии элементарных знаний, Си позволяет новичку пробежаться по граблям.

    Ошибки обсуждаются детские. Они и возникают не часто, и отладкой выявляются, и устраняются.  Причем без ныться, без поливания грязью сторонних компонентов. Просто, задача решается.

    И при переходе с GC языков на Си, иные подобные языки без GC, тоже обычно пишут "весьма странный" код.


     
  • 2.210, Аноним (209), 13:53, 21/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > В сишке, если ты вызвал free(), то это железно

    А потом будешь любоваться внезапными падениями вкладок. В лучшем случае.

     

  • 1.16, Аноним (28), 21:12, 19/09/2022 Скрыто модератором [﹢﹢﹢] [ · · · ]
  • +1 +/
     
     
  • 2.27, Аноним (25), 21:23, 19/09/2022 Скрыто модератором
  • –2 +/
     
     
  • 3.30, Аноним (28), 21:26, 19/09/2022 Скрыто модератором
  • +/
     

     ....ответы скрыты модератором (2)

  • 1.35, Аноним (35), 21:31, 19/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Нет JS — нет утечек.
     
     
  • 2.174, Бывалый смузихлёб (?), 13:14, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    утечки придумали ещё до жс
     
  • 2.211, Аноним (209), 13:56, 21/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >Нет софта — нет утечек.
     

  • 1.37, Аноним (32), 21:34, 19/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    var obj = {};
    console.log(obj);
    obj = null;
    так как Chrome сохраняет внутренние ссылки на выводимые объекты для предоставления возможности их последующего инспектирования в web-консоли.


    Какое-то совсем неожиданное проведение.

     
     
  • 2.42, Аноним (72), 21:44, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    почему неожиданное? можно позже щелкнуть в девтулзах по объекту правой кнопкой мыши и нажать "Store object as global variable" - и все, ссылка на объект снова восстановлена. IQ чуть выше, чем у хлебушка, подсказывает, что это было бы невозможно, если бы хром не сохранял ссылки на выводимые объекты.
     
     
  • 3.53, Аноним (32), 22:00, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Пытаюсь проверить что местные эксперты знали ДО этой новости что console.log создаёт неудаляемый обьект, но что-то не получается.
    Наверное iq хлебушка не даёт.
     
  • 2.45, Аноним (45), 21:48, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Вполне себе ожидаемое поведение.

    let a = {};
    let b = {};
    a.b = b;
    b.a = a;
    console.log(a)

    Попробуй помедитировать в консоли раскрывая эту структуру до бесконечности и подумать, как такое может быть реализовано.

     
     
  • 3.50, Аноним (-), 21:54, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В хромом они устаревают и очищаются.
     
  • 2.178, Аноним (178), 13:32, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Какое-то совсем неожиданное проведение.

    Как раз ожидаемое! Объект использует консоль браузера, освобождать объект нельзя (с ним работает консоль, сами же попросили вызвав console.log). Когда в консоли очередь переполнится (которую наверное нужно поменьше поставить) тогда объект и будет удалён.


    Даже в православной Java вызов сборки мусора не гарантирует освобождение памяти. GC может всякие эвристики использовать и не спешить отдавать память (для всяких SoftReference), мало ли... В итоге он освободит, но иногда не по первому вызову.

     

  • 1.54, darkshvein (ok), 22:02, 19/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >утечек памяти в JavaScript

    а я думал это design by default

     
     
  • 2.177, Аноним (176), 13:28, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    defective by design
     
     
  • 3.205, darkshvein (ok), 22:50, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > defective by design

    точно, спс. забываю я англицизмы.

     

  • 1.77, Аноним (31), 22:32, 19/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а как вообще в GC-языке возможны утечки памяти? (не забытые на сусеках объекты, а именно утечки)?

    там же типа забил болт на сущность - GC должен подметать, не?

    извиняюсь за тупой вопрос, я не веб-макака и не скрипт-кидди

     
     
  • 2.106, Аноним (-), 23:29, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > а как вообще в GC-языке возможны утечки памяти? (не забытые на сусеках объекты, а именно утечки)?

    Никак. Поэтому в GC-языках утечками памяти называются забытые на сусеках объекты.

     
  • 2.109, Аноним (-), 23:35, 19/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вы кгутой Анон!
    Держите на примере джавы.
    Китайца переводила
    https://russianblogs.com/article/89352659932/
     

  • 1.112, Alladin (?), 23:39, 19/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    так Facebook или Meta, а то что-то непонятное.. но запрещенное.
     
     
  • 2.116, Аноним (116), 00:02, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    запретный фэйс сладок
     
     
  • 3.163, ыы (?), 10:40, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    У вас девиация вкусовых рецепторов.
     

  • 1.142, Вы забыли заполнить поле Name (?), 00:37, 20/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересный факт: фейсбук пользуется тайпскриптом, а не своим же flow.
     
  • 1.155, Аноним (155), 06:18, 20/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > для разбора причин большого потребления памяти при работе с web-сайтами и web-приложениями.

    Как бы им намекнуть, что главная причина - "23-летние синьоры" и прочие радужные профаны между столом и стулом

     
     
  • 2.158, Аноним (92), 08:33, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >  "23-летние синьоры" и прочие радужные профаны между столом и стулом

    уверен, что точно не разрабы хрома, где после присваивания объекту null, он все равно остается существовать?

     
     
  • 3.182, Старый комп (?), 14:09, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Хром не должно быть. Должен быть только телнет!
     
  • 3.206, Аноним (197), 01:52, 21/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Дядя, ты дурак? null присваивается переменной, а не объекту. Сам объект при этом остаётся в памяти, но не может быть собран сборщиком мусора, потому что ссылка на него появляется у консоли.
     

  • 1.156, Хухрымухры (ok), 06:51, 20/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Алиллилуя!

    Ещё в браузерах надо жестко ограничить максимально потребляемые ресурсы вкладками, чтоб товарищи фронтэндеры начали включать голову.

     
     
  • 2.161, Аноним (160), 09:43, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Если это кому то реально нужно, почему же тогда большие сайты не уменьшили свои js скрипты до 5кб? Ты найти этого ответа к сожалению не сможешь, поэтому Я приготовил ответ специально для тебя: «Да потому что это не кому не нужно. Пользователю нужны фичи, а не низкое потребление, они за это платят долларом»
     
     
  • 3.162, Аноним (162), 10:40, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > они за это платят долларом

    причём сами того не подозревая (через слив персональных данных и постоянный апгрейд железа)

     
     
  • 4.168, Аноним (167), 11:00, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И что если они стали от этого полностью счастливыми? Зачем эта надуманная погоня за снижением потребления? Чтобы в твоём колхозе купленный вскладчину ДВК-2 мог отобразить список друзей в ВК?
     
     
  • 5.175, Бывалый смузихлёб (?), 13:19, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > И что если они стали от этого полностью счастливыми?

    Но стали ли они счастливы и именно от этого ?

     
     
  • 6.180, Аноним (180), 14:05, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Абсолютли. Если ты веришь в счастье это считать на МК-54, то я тебя ставлю в известность, то это не так.
     
  • 4.169, Аноним (167), 11:07, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Вон счастливые обладатели 8-битных самопяйных ПК на 7 мегагерцовых процессорах видосы смотрят с CD-ROM'а http://atmturbo.nedopc.com/load_cdrom.htm#cd_soft у них же столько счастья от того что они не купили большой дорого ПэКа, а смогли сэкономить и смотрят 16 цветные видео 224x160 15 кадров в секунду.  
     
     
  • 5.173, n00by (ok), 12:14, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • –5 +/
    > у них же столько счастья
    > от того что они не купили большой дорого ПэКа, а смогли
    > сэкономить и смотрят 16 цветные видео 224x160 15 кадров в секунду.

    Конструктор ATM-turbo 2+ (версия платы v7.18)
    Комплектация - печатная плата, полный набор деталей для сборки.
    9500 руб

    Собранная плата ПК ATM-turbo 2+ (версия платы v7.18)
    13500 руб

    Материнская плата Elitegroup GLKD-I2-N4120 [BGA 1090, Intel Celeron N4120 4x1.1 ГГц, 1xDDR4-2400 МГц, 1xM.2, Mini-ITX]
    5 699 ₽

     
     
  • 6.179, Аноним (180), 14:04, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот и ешь тогда свой Javascript тоннами чего орать-то?
     
     
  • 7.183, n00by (ok), 14:22, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Орёшь ты про Javascript, поскольку по существу моего сообщения сказать нечего.
     
     
  • 8.186, Старый комп2 (?), 14:50, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Так перед тобой никто и не собирался отчитываться ты же конченый от природы ... текст свёрнут, показать
     
     
  • 9.188, n00by (ok), 14:57, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Да знаю я, что ты никто Регулярно тебе про это пишу Если бы ты не бухал гориль... текст свёрнут, показать
     
     
  • 10.191, Старый комп 3 (?), 15:17, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да ты еще знаток веществ Всё с тобой ясно Одновременно топишь против джаваскри... текст свёрнут, показать
     
  • 6.181, Старый комп (?), 14:07, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Оуоу, давай, палегче. Что еще за собранная плата? Плату нужно самому травить, микрухи сковыривать со старой электроники, паяльник можно сделать самому. Ты из какой галактики прилетел? Из той где компы на деревьях растут?
     
     
  • 7.184, n00by (ok), 14:24, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Каконічный Легион решил сделать вид, что понимает в пайке. На деле показал, что не умеет не только искать, но даже читать.
     
     
  • 8.185, Старый комп (?), 14:49, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты ясно, конечный, паяльник в руках не держал Только ты и есть главный потребит... текст свёрнут, показать
     
     
  • 9.189, n00by (ok), 14:59, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Сколько же ты в этом году будешь за мной скакать ... текст свёрнут, показать
     
     
  • 10.192, Старый комп 4 (?), 15:18, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ахаха может когда перестанешь писать херню Это же так просто вот взять и больше... текст свёрнут, показать
     
     
  • 11.198, n00by (ok), 17:29, 20/09/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Так то ты себя правильно называешь последнее время Комп То есть бот Ты часть ... текст свёрнут, показать
     

     ....большая нить свёрнута, показать (18)

  • 1.204, Максим (??), 19:57, 20/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Если их код такой же кривой, как и интерфейс мордокниги, то пусть лучше не открывают...
     
  • 1.212, Онаним. (?), 00:25, 23/09/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    - Например в нижеприведённом коде в Chrome утечка памяти возникает из-за объекта "obj", несмотря на то, что ему присваивается значение null, так как Chrome сохраняет внутренние ссылки на выводимые объекты для предоставления возможности их последующего инспектирования в web-консоли

    Тут уже не фреймворки нужны, а пара волчьих смузи. И всё встанет на место.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2022 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру