Veri riferimenti deboli, no, non ancora (ma i produttori di browser stanno esaminando l'argomento). Ma ecco un'idea su come simulare riferimenti deboli.
Potresti costruire una cache in cui guidare i tuoi oggetti. Quando un oggetto viene archiviato, la cache mantiene una previsione della quantità di memoria occupata dall'oggetto. Per alcuni elementi, come l'archiviazione delle immagini, è facile risolverlo. Per altri questo sarebbe più difficile.
Quando hai bisogno di un oggetto, chiedilo alla cache. Se la cache contiene l'oggetto, viene restituito. Se non è presente, l'elemento viene generato, archiviato e quindi restituito.
I riferimenti deboli vengono simulati dalla cache rimuovendo gli elementi, quando la quantità totale di memoria prevista raggiunge un certo livello. Prevede quali elementi sono meno utilizzati in base alla frequenza con cui vengono recuperati, ponderati in base a quanto tempo fa sono stati estratti. È inoltre possibile aggiungere un costo di "calcolo", se il codice che crea l'elemento viene passato nella cache come chiusura. Ciò consentirebbe alla cache di conservare elementi molto costosi da costruire o generare.
L'algoritmo di cancellazione è fondamentale, perché se sbagli potresti finire per rimuovere gli elementi più popolari. Ciò causerebbe prestazioni terribili.
Finché la cache è l'unico oggetto con riferimenti permanenti agli oggetti memorizzati, il sistema sopra dovrebbe funzionare abbastanza bene come alternativa ai veri riferimenti deboli.