From: Mathieu Bouchard Date: 2001-10-15T17:05:17+09:00 Subject: [ruby-talk:22556] Re: Forcing full GC? On Mon, 15 Oct 2001, Aristarkh A Zagorodnikov wrote: > Hello! > Is there a way to force GC to reclaim _all_ unused objects > (disregarding time which it may take). I'm trying to create a > long-running application (some sort of data server), and it slowly > increases in size (gets 20 megs from initial 2.9 megs after several > hours of hard load) while ObjectSpace iterators does not indicate any > object growth. Quick'n'dirty hacks even at C source level are accepted > ;)) If there is any moment at which the process size gets at 20 megs, it is likely that it will stay at that size, unless you have very large Arrays/Hashes/Strings (usually 128 kilobytes), which get allocated separately by GLIBC (last time I checked), and thus reduce the process size. If the increase is really gradual while the amount of data stays low, this may indicate a memory-leak in one of the libraries you use. Or else, there may be an Array or Hash that you store lots of non-allocated objects in (Fixnum, Symbol), which don't show up in ObjectSpace. You may try something like this: ObjectSpace.each_object {|x| case x when Array,Hash,String puts "#{x.id} length=#{x.length}" if x.length > 1000 end } However, if a large array loses elements, it seems that its capacity shrinks (to length*2) only when length*10