3 ms·
Of course the next step is to write an implementation of memoize that stores the entries in its maps using SoftReferences (http://java.sun.com/javase/6/docs/api
by spuz 17y ago
Of course the next step is to write an implementation of memoize that stores the entries in its maps using SoftReferences (http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftRefe...). This way, anything stored in the cache will always be garbage collected before the JVM throws an OutOfMemoryError. I'm surprised that SoftReferences are not part of the default implementation given Clojure's nice Java interop as they would be perfect for a function like memoize.
- mikedouglas 17y agoSent a patch to Rich, so we'll hopefully see it in the official implementation.
- spuz 17y agoAwesome, you don't happen to have published the patch to github or Assembla have you? I have a suspicion that Rich will not replace the existing memoize with a SoftReference version as it is quite specific of the underlying architecture to provide this functionality. Rich is currently focused very much on CINC (Clojure in Clojure) and probably wants to avoid exposing implementation details to increase portability to other platforms (such as .NET). All the same, it would be great to have a SoftReference memoize in the contrib library for example.
- mikedouglas 17y agoForgot about that. Looks like soft references are tied to the JVM as well (IKVM emulates them by waiting until a full run to collect). http://github.com/fanatico/clojure/commit/aa78d57476806df10f2f1aa41181b65cae943127 http://github.com/fanatico/clojure/commit/aa78d57476806df10f...
- st3fan 17y agoI think my next step is actually to do something similar but then with memcache as the backing store instead of a local map.
- st3fan 17y agoI like the SoftReference idea btw!