Mi chiedo come i riferimenti deboli funzionino internamente, ad esempio in .NET o in Java. Le mie due idee generali sono:Come vengono implementati i riferimenti deboli?
- "Intrusive" - per aggiungere un elenco di riferimenti deboli alla classe più alta (classe oggetto). Quindi, quando un oggetto viene distrutto, tutti i riferimenti deboli possono essere iterati e impostati su null.
- "Non intrusivo" - per mantenere un hash dei puntatori di oggetti alle liste di riferimenti deboli. Quando un riferimento debole A viene creato su un oggetto B, ci sarà una voce nella tabella hash modificata o creata, la cui chiave sarebbe il puntatore a B.
- "Sporco" - per memorizzare un valore hash speciale con ciascun oggetto , che verrebbe azzerato quando l'oggetto viene distrutto. I riferimenti deboli dovrebbero copiare quel valore di hash e confrontarlo con il valore dell'oggetto per verificare se l'oggetto è vivo. Ciò, tuttavia, causerebbe errori di violazione di accesso, se usato direttamente, quindi ci sarebbe bisogno di essere un oggetto aggiuntivo con quel valore hash, penso.
Una di queste soluzioni sembra pulita ed efficiente. Qualcuno sa come viene effettivamente fatto?
Trovato: http://java.sun.com/j2se/1.5.0/source_license.html –
Novità qui: http://download.java.net/openjdk/jdk7/ –