[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: User data garbage collection ...
- From: "Chris Tavares" <ctavares@...>
- Date: Mon, 1 Oct 2001 16:18:27 -0700
You should not rely on garbage collectors to free up any resource other than
memory - this holds true for Java, Smalltalk, .NET, Lua, or any other
garbage collected system. The problem is that you generally have no idea
WHEN your object will get collected - it'll happen when the collector needs
more RAM. Typically, system resources that you need collected are a lot
scarcer than memory, so you'll run out of resources long before you run out
of memory.
Granted, you can force lua to do a gc, but that'll have a performance
impact.
If, on the other hand, all you care about is preventing resource leaks, and
don't necessarily care when the cleanup happens, you can use the "gc" tag
method.
-Chris
-----Original Message-----
From: owner-lua-l@tecgraf.puc-rio.br
[mailto:owner-lua-l@tecgraf.puc-rio.br]On Behalf Of Paul Hsieh
Sent: Monday, October 01, 2001 3:56 PM
To: Multiple recipients of list
Subject: User data garbage collection ...
I've discovered that userdata can be formed from a pointer to memory coming
from
either lua_newuserdata, or malloc/&static as usual. Is the distinction
merely that
the first will be garbage collected (and luaM_free() will be called on it)
and the
second will not?
Even if that is so, how do I get a callback into my embedding program to
call the
"destructor" at the time of garbage collection for a userdata that I've
created?
The objects I intend to create in my program will be numerous, and use a lot
of
system resources (including a seperate thread), so I need for them to be
recycled
whenever possible.
Is there something I am missing, or is Lua simply not a state where it can
solve my
problem?
--
Paul Hsieh
qed@pobox.com