From: Robert Klemme Date: 2006-05-10T16:05:26+09:00 Subject: Re: garbage-collection question OR ruby-gnome bug? 2006/5/10, Cam : > Hi, > > My friend and I have been writing an application that makes extensive > use of gdkpixbuf's, but they never get de-allocated. I'm not entirely > sure how the garbage-collector works internally in ruby, but my > program quickly grows to over 114M pretty routinely. My friend wrote > a simple demonstration script: > > require 'gtk2' > Gtk.init > path = ARGV.pop > raise "Pass a large image on the command line" unless path > puts "Look at how much memory I'm using, then press enter" > gets #1 > buf = Gdk::Pixbuf.new( path ) > puts "Now I've allocated the pixbuf, I should be using more memory." > puts "Hit enter to dereference the pixbuf." > gets #2 > buf = nil > puts "Done. Press enter to exit." > gets #3 > > Ok, here's the memory usage between various stages: > > 1: > 1000 17271 0.3 2.4 15744 9312 pts/5 S+ 23:03 0:00 ruby pixbuf.rb > > 2: > 1000 17271 0.3 4.1 22448 16228 pts/5 S+ 23:03 0:00 ruby pixbuf.rb > > 3: > 1000 17271 0.3 4.1 22448 16228 pts/5 S+ 23:03 0:00 ruby pixbuf.rb > > Now this example is much more trivial than the program we're trying to > right, but they're both having this issue w/ the pixbuf's never being > de-allocated. Is this a known bug? Is there something we can do to > force the GC to take care of them? I can only say something about your short demo piece because I don't have the other code. It's quite unlikely that you see the GC kick in before program termination here. GC kicks in when the interpreter decides to do it - not necessarily soon after an object has become unreachable. This is really only a problem if you have a long running version and it keeps using more memory over time. I suggest you modify your script by removing lines with "gets" and put the whole thing in a loop say 10,000 times. Then watch how memory usage develops. If it's linearly increasing your chances are that there is a bug in Gdk or you're using it the wrong way (i.e. do not release Gdk resources as required by the lib). HTH robert -- Have a look: http://www.flickr.com/photos/fussel-foto/