Confusing array garbage collection, how to get valid heap snapshot?

Discussion in 'Ruby' started by Greg Fodor, May 23, 2007.

  1. Greg  Fodor

    Greg Fodor Guest

    We are working on tracking down a memory leak, and are hoping to use
    heap snapshotting to find the culprit. Using the neat bleak_house
    library:

    http://blog.evanweaver.com/articles/2007/04/28/bleak_house

    I have got snapshotting working on my local machine. Note this library
    does not go through ObjectSpaces, but uses a custom ruby build, so its
    much more accurate in showing the true state of the heap. However,
    there seems to be a bit of a problem, this simple script I wrote for
    testing purposes:

    # Snapshot here
    a = Array.new(1000) { Object.new }
    a = nil
    1.upto(20) { GC.start; ObjectSpace.garbage_collect; sleep 1; }
    # Snapshot here

    Shows that the 1000 objects in the array are still on the heap in the
    second snapshot. Now, I realize GC.start makes no guarantees about
    actually removing the objects marked, but it seems that in this case
    they should go away since I am calling it so aggressively over such a
    long period. What is really strange however is that if I all a.clear
    before setting a to nil, the objects *do* go away upon the first
    GC.start. So, either there is something still holding those references
    in the above case, or the GC is extraordinarily conservative in
    relation to GC.start.

    I've also tried wrapping this code up into a class, putting the array
    into an instance variable, and I get the same behavior. (This was to
    make sure there are no procs or something at the root scope holding
    these guys.)

    In order to effectively track down memory leaks, there needs to be the
    concept of a totally GC'ed heap snapshot. It appears based upon the
    above behavior this is difficult to get. If the above code was under
    test my heap snapshot would show a 'leak' of 1000 objects even though
    my code was correctly dereferencing them. Is there something I am
    missing here?
    Greg Fodor, May 23, 2007
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    1
    Views:
    360
    Roedy Green
    Jan 19, 2006
  2. Øyvind Isaksen
    Replies:
    1
    Views:
    946
    Øyvind Isaksen
    May 18, 2007
  3. Michal Slocinski

    Heap dump file size vs heap size

    Michal Slocinski, Mar 25, 2008, in forum: Java
    Replies:
    1
    Views:
    717
    GArlington
    Mar 25, 2008
  4. Greg  Fodor
    Replies:
    1
    Views:
    98
    Greg Fodor
    May 23, 2007
  5. Greg  Fodor
    Replies:
    1
    Views:
    83
    Joel VanderWerf
    May 23, 2007
Loading...

Share This Page