169 похожих чатов

Привет. Подскажите пожалуйста как очистить память на TS/JS. Создаю бесконечный

цикл, в нем генерируются объекты и добавляются в список. Время от времени удаляю из списка некоторые элементы при помощи slice и concat, но количество занятой памяти не изменяется. Как это возможно сделать?

9 ответов

10 просмотров

советую почитать как вообще все устроено https://deepu.tech/memory-management-in-v8/

Den- Автор вопроса
Pavel Dudkouski
советую почитать как вообще все устроено https://d...

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

Den
Ну исходя из этого все должно работать. Удаляю объ...

Часть объектов попадает в old space. Я думаю Major GC просто не выполняются потому что v8 думает что нет смысла это делать. Вот память и не освобождается в случае с нодой можно запустить процесс с параметром --expose-gc и потом запускать сборку мусора при помощи global.gc(); ну и да, я тут про в8. Другие движки могут себя вести немного иначе

Den- Автор вопроса
Pavel Dudkouski
Часть объектов попадает в old space. Я думаю Major...

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

Den
Попробовал, не помогло. Также попробовал просто в ...

Сделай хипдамп и посмотри на то чем занята память ну и на v8.getHeapStatistics() посмотри и на v8.getHeapSpaceStatistics() тоже

Den
Попробовал, не помогло. Также попробовал просто в ...

ну и запусти еще ноду с параметром --trace-gc для полноты картины

Den- Автор вопроса
Pavel Dudkouski
ну и запусти еще ноду с параметром --trace-gc для ...

Запустил, посмотрел, но если честно понятнее ничего не стало, вижу что заполняется, меняется, а из-за чего именно, не пойму. Схематично, мой код выглядит так. Та часть что внутри цикла вызывает переполнение let listResults = []; async function main() { new Promise(resolve => start()); // next logic ... } async function start(): Promise < void> { while(true) { // if comment out everything below, memory consuming is ok await new Promise(resolve => setTimeout(resolve, 500)); let calculation = getCalculation(); let newObj = createObjByCalc(calculation); // if comment out the part below, memory filling slows down, but does not disappear listResults.push(newObj); clearUnuserdValsFromList(); }

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта