De vraies références faibles, non, pas encore (mais les fabricants de navigateurs se penchent sur le sujet). Mais voici une idée sur la façon de simuler des références faibles.
Vous pouvez créer un cache dans lequel vous conduisez vos objets. Lorsqu'un objet est stocké, le cache conserve une prédiction de la quantité de mémoire occupée par l'objet. Pour certains éléments, comme le stockage d'images, c'est simple à résoudre. Pour d'autres, ce serait plus difficile.
Lorsque vous avez besoin d'un objet, vous le demandez au cache. Si le cache contient l'objet, il est renvoyé. S'il n'y figure pas, l'élément est généré, stocké puis renvoyé.
Les références faibles sont simulées par le cache en supprimant des éléments, lorsque la quantité totale de mémoire prévue atteint un certain niveau. Il permettra de prédire quels éléments sont les moins utilisés en fonction de la fréquence à laquelle ils sont récupérés, pondérés par le temps écoulé depuis qu'ils ont été retirés. Un coût de «calcul» pourrait également être ajouté, si le code qui crée l'élément est passé dans le cache en guise de fermeture. Cela permettrait au cache de conserver des éléments qui sont très coûteux à construire ou à générer.
L'algorithme de suppression est essentiel, car si vous vous trompez, vous risquez de supprimer les éléments les plus populaires. Cela entraînerait des performances terribles.
Tant que le cache est le seul objet avec des références permanentes aux objets stockés, le système ci-dessus devrait fonctionner plutôt bien comme alternative aux vraies références faibles.