Verdaderas referencias débiles, no, todavía no (pero los fabricantes de navegadores están analizando el tema). Pero aquí hay una idea sobre cómo simular referencias débiles.
Podría crear un caché a través del cual conducir sus objetos. Cuando se almacena un objeto, la caché mantiene una predicción de cuánta memoria ocupará el objeto. Para algunos elementos, como el almacenamiento de imágenes, esto es sencillo de resolver. Para otros, esto sería más difícil.
Cuando necesite un objeto, solicítelo al caché. Si la caché tiene el objeto, se devuelve. Si no está allí, el elemento se genera, se almacena y luego se devuelve.
Las referencias débiles se simulan mediante la eliminación de elementos de la memoria caché, cuando la cantidad total de memoria prevista alcanza un cierto nivel. Predecirá qué elementos se utilizan menos en función de la frecuencia con la que se recuperan, ponderado por cuánto tiempo se retiraron. También se podría agregar un costo de 'cálculo', si el código que crea el artículo se pasa a la caché como un cierre. Esto permitiría que la caché guarde elementos que son muy costosos de construir o generar.
El algoritmo de eliminación es clave, porque si se equivoca, podría terminar eliminando los elementos más populares. Esto causaría un rendimiento terrible.
Siempre que el caché sea el único objeto con referencias permanentes a los objetos almacenados, entonces el sistema anterior debería funcionar bastante bien como una alternativa a las verdaderas referencias débiles.