Как удалить переменную из памяти сервера?

У меня есть приложение nodejs, требующее соответствия стандарту PCI/DSS.

Пример :

let number = "91029039102930193092"

Как я могу эффективно удалить его из памяти или сборщика мусора V8 (GC)?

Могу ли я сделать это: number = "" чтобы сбросить его на пустую строку?


person Alvin    schedule 11.07.2017    source источник
comment
Да, вы можете сделать number = "" или delete number;   -  person ponury-kostek    schedule 11.07.2017
comment
@ponury-kostek, который не обязательно сразу удалит его из памяти.   -  person robertklep    schedule 11.07.2017
comment
Где объявлена ​​переменная? Если это внутри функции, переменная будет удалена сборщиком мусора, когда функция завершит выполнение. Если это глобальная область, она может оставаться в памяти на протяжении всего времени существования приложения nodejs.   -  person Mμ.    schedule 12.07.2017
comment
Вы также можете принять к сведению, что микрооптимизация может быть плохой. Вы должны позволить v8 обрабатывать сборку мусора. Типичными вещами, на которые вы обращаете внимание, являются объекты с циклическими ссылками, которые могут вызвать утечку памяти.   -  person Samuel Toh    schedule 12.07.2017
comment
Принудительная сборка мусора для переменной вероятно не помогает с PCI, потому что она все еще находится в памяти в течение некоторого времени. Вы можете опубликовать еще один вопрос, объясняющий, что вы пытаетесь сделать и с какими требованиями PCI вы имеете дело - может быть лучший способ.   -  person Bobson    schedule 14.07.2017


Ответы (1)


Вы можете запустить узел с флагом --expose_gc. В вашем коде вы можете сделать

number = ""; 

or

delete number;

и после этого заставить gc

global.gc();

Это даст вам возможность немедленно освободить память

delete number;
global.gc();

и более безопасный способ

number = undefined;
global.gc();
person ponury-kostek    schedule 12.07.2017