У меня есть сцена использования массива как очереди, и у меня есть вопрос об этой сцене о памяти.Управление памятью массива Javascript/Node.js
Во-первых, я создаю объект массива в глобальном масштабе и создаю продюсера, чтобы заставить элемент массива работать без прерывания.
var arr = [];
function runningProducer() {
setInterval(itemProducer, 50);
function itemProducer() {
var item = generateItem();
arr.push(item);
}
function generateItem() {
return { a: Math.random(), };
}
}
Затем я создаю клиент, чтобы очистить массив в 1 второго
function runningCustomer() {
setInterval(clearQueue, 1000);
function clearQueue() {
var t = arr.concat(arr);
arr = [];
}
}
и выполнение вышеуказанных функций в течение периода времени, я обнаружил, что память всегда растет.
setInterval(() => {
var mem = process.memoryUsage();
console.log(mem);
}, 2000);
Я думаю, что массив должен освободить память после пустого набора, но нет. Пожалуйста, дайте мне несколько советов по этому вопросу, и есть ли способ освободить память вручную в javascript?
Память будет очищена при запуске сборщика мусора, а не сразу, когда вы очистите массив. – Barmar
Что такое 'var t = arr.concat (arr),' предполагается делать? Если переменная 't' не упоминается в другом месте, то вся строка является избыточной, но если она * указана в другом месте (каким-то образом, в коде не показана), то ссылка на этот массив (которая вдвое больше размера' arr' была) все еще существует, поэтому он будет продолжать использовать память. – nnnnnn
Производитель использует массив, вы не можете ожидать, что массив будет очищен из памяти. –