|
From: | Alaric Snell-Pym |
Subject: | Re: [Chicken-hackers] [PATCH] catch exceptions in finalizers, remove dynamic resizing of finalizer vector |
Date: | Tue, 19 Jun 2012 21:38:40 +0100 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120314 Thunderbird/11.0 |
On 19/06/12 20:12, John Cowan wrote:
Peter Bex scripsit:The GC needs to be able to associate an object with its finalizers, so there either needs to be a global list or some extra slot added to each object. The latter takes up more memory when you don't have a lot of finalizers (and finalizers are slow, so it's best not to generate too many of them).How about if finalizers are only attached to pointers? That seems to be the principal use case, and adding a slot to a pointer (maybe only a "finalizable tagged pointer" wouldn't be so expensive.
It would also be quite easy to attach such "finalizing objects" to records, vectors, and the like (ensuring that that is the ONLY reference) to get a notification of the parent object being GCed, too. Ugh, that's not very clear. What I'm saying is, you could create a finalizable tagged pointer that doesn't actually point to anything, and only exists to be placed in an otherwise unused slot of a record (for instance), such that when the record is no longer reachable and gets GCed, the finalizable tagged pointer is then also unreachable and gets finalized, acting as a proxy for the otherwise-unfinalizable object. Perhaps the pointer could be left pointing to whatever state might be needed to finalize the real object, as the real object would be unreachable by the time the finalizer was triggered. ABS -- Alaric Snell-Pym http://www.snell-pym.org.uk/alaric/
[Prev in Thread] | Current Thread | [Next in Thread] |