ECMAScript 6 wprowadza słabe mapy, dostępne w pliku Node.JS v0.11.3 z flagą --harmony
. Rozważ następujące.Opis słabych map
let weakMap = WeakMap();
let key = [];
let rubbish = 'fish cans';
weakMap.set(key, rubbish);
rubbish = 'empty bottle';
// Prints "fish cans"
console.log(weakMap.get(key));
Byłem pod wrażeniem, że dla słabych map, odniesienie od klucza do wartości jest słaby, tak, że jeśli tylko odniesienie do wartości jest kluczem, następnie wartość może nie dłuższy być dostępnym.
Dlaczego więc wartość 'fish cans'
jest nadal dostępna i czy nie są gromadzone śmieci? Zmienna rubbish
nie odwołuje się już do niego, a odniesienie z key
do 'fish cans'
jest słabe, tj. Nieistniejące z punktu widzenia śmieciarza. czego mi brakuje?
Zgaduję, że wartość * nadal * może być dostępna tylko dlatego, że śmieciarz nie przeszedł jeszcze przez ulicę. Innymi słowy, może gdybyś spróbował, że jakiś czas po tym nie zadziała? –
Sposobem sprawdzenia, czy tak jest, byłoby uruchomienie sadystycznej pętli przydziałów, w których silnik byłby zmuszony do załadunku GC. Jeśli nadal tam jest, coś go trzyma. –