[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Best way to determine the memory footprint of an object

Wes Gamble

3/6/2007 7:41:00 AM

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.

Thanks,
Wes

--
Posted via http://www.ruby-....

3 Answers

Robert Klemme

3/6/2007 8:20:00 AM

0

On 06.03.2007 08:40, Wes Gamble wrote:
> 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).

Marshal doesn't text - the output is binary. But there's another
problem: what do you regard an object's size? Is it just the instance?
Is it the instance plus certain members like Arrays, Strings and
numbers? Is it the whole graph of objects reachable from your object?
In any case how do you deal with aliasing, i.e. objects referenced by
more than one object? etc.

Kind regards

robert

Tomasz Wegrzanowski

3/6/2007 1:50:00 PM

0

On 06/03/07, Wes Gamble <weyus@att.net> wrote:
> 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.blo...2007/02/ruby-and...

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

--
Tomasz Wegrzanowski [ http://t-a-w.blo... ]

Mauricio Fernández

3/6/2007 3:07:00 PM

0

On Tue, Mar 06, 2007 at 04:40:37PM +0900, Wes Gamble wrote:
> 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.

http://eige.../hiki.rb?ruby+spac...

A rule of thumb:

for normal objects the memory footprint is around 100 bytes plus 20 bytes per
instance variable (applies to objs. with <55 instance variables).

(Apply recursively if you want to consider referenced objects too.)

See the above link for more details regarding Arrays, Hashes, Symbols,
Structs, etc...

--
Mauricio Fernandez - http://eige... - singular Ruby
** Latest postings **
Towards compatibility with Ruby 1.9: Rails, Rake, RubyGems...
http://eige.../hiki.rb?porting-rails-to-ruby-1.9
Ruby interpreting Prolog' interpreting Lisp interpreting Lisp solving FizzBuzz
http://eige.../hiki.rb?lisp-in-lisp-and-prolog-and-ruby