2015-09-21 10 views
6

Per il codice indicato, sarebbe l'unico elemento considerato raggiungibile o meno? Quindi, sarà spazzatura raccolta o no?Un riferimento "circolare" sarebbe considerato come "raggiungibilità" per una WeakMap?

PS: questa domanda viene posta dal punto di vista della specifica, non di particolari implementazioni.

+1

Non è previsto. Le cose che hanno solo riferimenti circolari sono idonee per la garbage collection, quindi non dovrebbero rimanere in weakMap. – jfriend00

+0

Stavo dicendo che dovrebbe essere rilasciato perché non ci sono riferimenti esterni ad esso e quindi non è raggiungibile altrove. – jfriend00

+0

Che dire di questo esempio è circolare? – loganfsmyth

risposta

8

Citando WeakMap Objects section,

Se un oggetto che viene utilizzato come chiave di una coppia chiave WeakMap/valore è raggiungibile solo seguendo una catena di riferimenti che inizia entro tale WeakMap, tale chiave/valore la coppia è inaccessibile e viene automaticamente rimossa da WeakMap.

Nel tuo caso, l'unico modo per raggiungere o sarebbe iniziare da una delle chiavi del weakMap, come non ci sono riferimenti esterni ad esso. Quindi, sarebbe considerato inaccessibile.

Le implementazioni WeakMap devono rilevare e rimuovere tali coppie chiave/valore e qualsiasi risorsa associata.

Quindi, sarebbe alla fine raccogliere i rifiuti.

Problemi correlati