[Newbies] terminate event?
Bert Freudenberg
bert at freudenbergs.de
Mon Jan 22 16:10:57 UTC 2007
I'm sorry, but that's exactly what I wrote in the first example.
"Utilities finalize" does nothing as far as I can tell. It executes
the "Object>>finalize" method which is a no-op. Remove that line and
it will also print to the Transcript immediately.
- Bert -
Am Jan 22, 2007 um 15:38 schrieb abdu chadili:
> Or
>
> x := Object new.
> x toFinalizeSend: #show: to: Transcript with: 'He''s dead, Jim!\'
> withCRs.
> Utilities finalize.
> x:=nil.
>
> will display the message to the transcript immediately.
>
> ----- Original Message ----
> From: David Urquhart <david.urquhart at hotmail.com>
> To: beginners at lists.squeakfoundation.org
> Sent: Sunday, January 21, 2007 9:42:16 PM
> Subject: Re: [Newbies] terminate event?
>
>
> Thanks for a fantastic answer and sample code.
>
> -Dave
>
>
> >From: Bert Freudenberg <bert at freudenbergs.de>
> >Reply-To: "A friendly place to get answers to even the most basic
> >questionsabout Squeak." <beginners at lists.squeakfoundation.org>
> >To: "A friendly place to get answers to even the most basic questions
> >aboutSqueak." <beginners at lists.squeakfoundation.org>
> >Subject: Re: [Newbies] terminate event?
> >Date: Sun, 21 Jan 2007 15:48:08 +0100 (MET)
> >
> >
> >Am Jan 21, 2007 um 15:21 schrieb Bert Freudenberg:
> >
> >>Am Jan 21, 2007 um 14:07 schrieb David Urquhart:
> >>
> >>>Hi
> >>>
> >>>I'm a Squeak beginner. I want to write to the transcript when
> an object
> >>>is coming to life and when its terminating. I have an
> initialize method
> >>>for the birth - what is the method called that fires at death?
> >>
> >>There is no such method. A message can be send to an object only
> if there
> >>is a reference to it. As long as a reference to an object
> exists, it is
> >>not dead, it does only get garbage-collected when the last
> reference is
> >>removed.
> >>
> >>About the only thing you can do is to register a *different*
> object to be
> >>notified when one object is garbage-collected. This is called
> >>"finalization".
> >
> >Here's an example. Evaluate this in a workspace:
> >
> > x := Object new.
> > x toFinalizeSend: #show: to: Transcript with: 'He''s dead, Jim!
> \' withCRs
> >
> >Nothing should happen. Then do
> >
> > x := nil
> >
> >which should print "was finalized" immediately. This is because x
> still
> >holds onto a relatively "new" object, which gets freed very fast.
> >
> >However, once an object gets "old" it takes until the next full
> garbage
> >collection (GC)! Create your object again, but this time, do this:
> >
> > Smalltalk garbageCollect.
> > x := nil.
> >
> >Nothing will be printed, because the GC reclaims all space, but
> also marks
> >all surviving objects as "old". So even though after assigning
> nil to x
> >your object is dead, the finalizer does not know it, yet. Only if
> you
> >trigger a full GC again, the object's space is reclaimed, and the
> >finalizer is activated.
> >
> >- Bert -
>
More information about the Beginners
mailing list