Re:Java Polyfill for the Browser
by TheAceOfHearts on Sunday May 08, 2016 @05:54PM
(#11656110)
Once ES6 support is everywhere, you should be able to use WeakMap and WeakSet.
[0] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
Actually, those are not sufficient to implement weak references, and have a much different use case! With WeakMap and WeakSet, the keys are weakly referenced, hence the names. If you have a WeakMap, you can't produce a value stored in the map without a strong reference to a key.
You can actually polyfill WeakMap and WeakSet. You can't do the same for weak references.
I misspoke -- you can polyfill WeakSet, but you cannot polyfill WeakMap, since you do not know when you can shrink the map. (But you still cannot use it to emulate weak references, since you need a strong reference to get data out of the map.)
The nitty gritty details are in the PLDI 2014 paper [0]. Some details have slightly changed, though (e.g. DoppioJVM supports JDK8 now).
[0] https://plasma-umass.github.io/doppio-demo/paper.pdf