Hi! Currently, I try to fix several memory leaks, namely at trac ticket #715, #11521, #12215 and #12313. The common idea is: Use weak references for the caches (in particular for caching coercions and actions), so that stuff can be collected once it is no more used.
But of course it would be easy to overdo it. For example, with the current patch from #715, the following computation involves the creation of 481 actions, while it only needs 320 actions without the patch: E = J0(46).endomorphism_ring() g = E.gens() So, in that example, actions seem to be garbage collected although they will be used again. However, other examples involving elliptic curves (e.g., EllipticCurve('960d1').prove_BSD()) are fine, the same number of actions is created with or without the patch. Now I wonder what you would recommend to do? * Is there a Python package that provides "soft" references (that is stronger than a weak reference)? That would be a good solution, but google has not been able to find it. * Should I try to trace down "E.gens()" and add a reference to some parent in an appropriate location, so that the 160 actions in the example above are prevented from being collected? That would solve the particular problem, but there is no guarantee that it is the only example of that type. * Should I modify my weak version of `sage.structure.coerce_dict.TripleDict` so that strong references are used in the first place, but so that the oldest references are "weakened" when the dictionary grows bigger than a certain threshold? That is likely to fix the example above and other types of examples as well, but may create an overhead. * Should I consider it as the price to pay for fixing memory leaks? Best regards, Simon -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org