do I have to garbageCollect every time I create a large object?

Ohshima, Yoshiki Yoshiki.Ohshima at disney.com
Thu Aug 9 20:58:20 UTC 2001


  Hello,

> I have noticed something curious: after creating a very large object
> (Array new: 25000000 which ocupies 100.000.000 bytes of memory),
> everything gets very slow, and the SystemMonitor indicates constant
> incremental garbage collections.
> It is only after performing a full garbage collection (Smalltalk
> garbageCollect) that I can work again normally. My question is: do I
> have to do "Smalltalk garbageCollect" every time I create a large
> object? Or are there other ways to handle this situation?

  No matter what programming language you use, if your
program is going to allocate 100s of MB of short-lived
memory chunk dynamically and repetitively, it is time to
tweak the program logic a little.  You might want to recycle
previously allocated chunk or something like that.  At
least, you should do some kind of explicit deallocation by
yourself.

# Think about the fact that (Array new: 25000000) would take
# more than 125ms on a computer with 800MB/s memory bus
# because of the nil-out of allocation time.

  And, in Squeak, calling #garbageCollect is not so bad
thing after all.  You can consider the garbageCollection as
a part of the allocation of the large object.  You can also
consider the nil-out variables and calling another
garbageCollection as a part of the deallocation of the
object.

-- Yoshiki





More information about the Squeak-dev mailing list