I'd like to be able to estimate how much memory a given object requires.
What is the best/easiest way to do this? One thing that occurred to me
was the Marshal.dump the object to a file and look at that, although
looking at a textual representation of the object could be significantly
larger (I think).
Any advice is appreciated.
Take a look at object printing code in:
http://t-a-w.blogspot.com/2007/02/ruby-and-judy.html
It prints reports like:
IV Table of object Complex(1.0, 2.0)
Flags = 2
Class = Complex
IV_TBL:
* Bins: 11
* Entries: 2
* Bin 0:
* Entry
* Hash: 10802
* Key:
@real
* Record: 1.0
* Bin 1: empty
* Bin 2: empty
* Bin 3: empty
* Bin 4: empty
* Bin 5: empty
* Bin 6: empty
* Bin 7: empty
* Bin 8:
* Entry
* Hash: 10810
* Key: @image
* Record: 2.0
* Bin 9: empty
* Bin 10: empty
Memory use: 88 bytes
It only works with normal objects, not anything special (like strings,
arrays, hashes, floats etc.), becuase I never needed anything else.
Object uses memory for:
* main data structure (flags, class pointer, table of instance
variables pointer)
* instance variable table
* some extra storage for non-standard objects
* associated singleton class, if any (if you include it in the count)
* instance variables are objects unless they're immediate values (if
you include them in count)
* some undefined memory allocator overhead for all of the above