[Newbies] How to get rid of objects...
cdrick
cdrick65 at gmail.com
Tue May 9 16:48:56 UTC 2006
Hi Ron and thanks for that answer ;)
sure this list is a cool thing ;-)
In general, if you want an object to be taken to the garbage, you need to
> break all links to strong objects. Then you can force a garbage collection
> by running: Utilities garbageCollectAndReport.
>
I do it but doesnt change size a lot :)
What is a strong reference you ask? That is anything that is not a weak
> reference. You can hold onto an object using a weakArray but when the
> garbage collector comes around she can pull it right outa there. So, simply
> nil-ing out references to your object and closing it (since an inspector or
> even the debugger has a strong reference to it), should allow the garbage
> collector to clean things up for you.
>
cool. I ve always wandered what it was :). I still dont see really well how
it works but I'll have a look to it. A weak array then store object with
weak references and then when GC come over, it removes the references ???
> Ok from your question it would seem to me that you have a connection
> object, not a persistent data object that just won't go away. You could
> find the references to that object and nil them out. This is the preferred
> method. You could look at the clean up code on that object and see if you
> can figure out how the database vendor does it. Methods like close,
> cleanUp, disconnect, or something like that will give you and idea of what
> they wanted to do if it hadn't blown up on you. Follow the path that you
> would normally go down for disconnecting when you don't blow up.
>
I try to look at that before, but often when connection fails, it remains an
object... etc that was why :)
(maybe local variables of workspace are keeping references...)
I ll see with pointers...
the thing is I dont really feel the difference between
object pointing to this value
chase pointers
and explore pointers
Now for the really dangerous, not for the faint of heart, back up your
> entire computer before you even read this, there is become: ! (are you
> scared?) Become says change this object ID into an object ID of something
> else! This is how proxies usually work. The database grabs and
> instantiates an object from disk then it tells the proxy to become the
> newObject. (aProxy become: newObject). In this case everybody is happy
> cause nobody wants a proxy they want the new object. Now kids don't try
> this at home! You can force a garbage collect of your connection object by
> doing aConnectionObject become: String new. The issues here are pretty
> simple, you could type this wrong and blow away your whole String class.
> You could leave your database objects looking for a connection on an empty
> string. But if as you say it is broken anyway, it can't get worse!
>
tried that once :) dangerous :) I ll wait a bit lol
>
> Ok so now look at the method ron it hasn't changed, but when you print
> Object ron, you get something completely different, and not very flattering
> either. This is because the method contains a string literal.
>
cool example :)
Thanks for all Ron
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/beginners/attachments/20060509/8693d0e3/attachment-0001.htm
More information about the Beginners
mailing list