[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: GC of external resources
- From: Rici Lake <lua@...>
- Date: Fri, 1 Dec 2006 22:55:22 -0500
On 1-Dec-06, at 10:40 PM, Diego Nehab wrote:
I forget what is the standard solution to make Lua's GC
aware of the external cost of a "userdata" value. Sometimes
you have a userdata representing, say, an image. But the
image itself takes more room than the userdata because it
was allocated outside of Lua (sometimes you can't change
that). So Lua might not feel like collecting the userdata
eventhough it represents a lot of memory and is not
Can anyone refresh my memory?
__gc will only be executed when the garbage collector feels
like it. This decision is based on how much memory the userdata itself
takes (a few bytes). However, this userdata might be just a boxed
pointer, pointing to a big hunk of external
memory (say, a few megabytes).
I don't think that Lua makes its decision about which objects to delete
based on their size. It does make a decision about how often to advance
garbage collection based on its idea of how much memory is used, and
then later on how much to advance sweeping based on its idea of how
much memory has been freed.
Unaccounted for memory will cause the mark phase to be run too little
and the sweep phase to be run too much. But as far as I can see, it
won't change the order of which objects are collected.