Ключ WeakMap не собран - PullRequest
       35

Ключ WeakMap не собран

0 голосов
/ 15 сентября 2018
const frame = {
    key: {}
};

const map = new WeakMap();
map.set(frame.key, 'value');
console.log(map); // { {} -> 'value' }

delete frame.key;
// Force GC
console.log(map); // { {} -> 'value' }

В таком фрагменте кода, почему key не собирается? Я думал, что как только я delete key, frame перестанет удерживать его, и его счетчик ссылок станет равным нулю, таким образом, либо запустив GC, либо, по крайней мере, он будет собран GC, который я запускаю вручную.

Я запустил GC в Firefox, перейдя на about:memory и нажав все кнопки в поле Свободная память .

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

Я могу подтвердить, что представление в Инструментах разработчика не устарело, поскольку я могу развернуть объект карты с помощью entries[0] и щелкнуть правой кнопкой мыши значение key, выбрав Сохранить как глобальный объект и когда я оцениваю , что , я получаю нормальную проверку, без ошибок, ничего.

...