Sha256: d78cd4533c5d7e80c1eff7f660b6c09fe53e5f7c719408eecef909cdc92d63ae

Contents?: true

Size: 954 Bytes

Versions: 33

Compression:

Stored size: 954 Bytes

Contents

module Memory
  WORD_SIZE = 8
  OBJ_SIZE = 40 # some are smaller
  OBJ_OVERHEAD = WORD_SIZE + OBJ_SIZE

  def self.size(obj)
    return WORD_SIZE if obj.is_a?(Fixnum)

    case obj
    when String
      obj.size
    when Array
      obj.size * WORD_SIZE
    when Hash
      obj.size * WORD_SIZE * 2
    #when Enumerable
    #  result = 0
    #  obj.each do |ref|
    #    result += WORD_SIZE
    #  end
    #  result
    else
      0
    end + OBJ_OVERHEAD
  rescue => e
    puts "failed to get object size for #{obj.inspect}: #{e}"
    return OBJ_OVERHEAD
  end
end

module ObjectSpace
  def self.memory_stats(*args)
    stats = {}

    self.each_object do |obj|
      stats[obj.class] ||= []
      stats[obj.class] << Memory.size(obj)
    end

    stats.map do |cls, sizes|
      cnt = sizes.length
      sum = sizes.reduce(:+)
      avg = sum / cnt
      [cls, [cnt, avg, sum]]
    end.sort_by do |cls, sizes|
      sizes[2]
    end.reverse
  end
end

Version data entries

33 entries across 33 versions & 2 rubygems

Version Path
liquid-ext-1.2.6 lib/liquid/ext/object_space.rb
liquid-ext-1.2.5 lib/liquid/ext/object_space.rb
liquid-ext-1.2.4 lib/liquid/ext/object_space.rb
liquid-ext-1.2.2 lib/liquid/ext/object_space.rb
liquid-ext-1.2.1 lib/liquid/ext/object_space.rb
liquid-ext-1.2.0 lib/liquid/ext/object_space.rb
liquid-ext-1.1.1 lib/liquid/ext/object_space.rb
liquid-ext-1.1.0 lib/liquid/ext/object_space.rb
liquid-ext-1.0.2 lib/liquid/ext/object_space.rb
liquid-ext-1.0.1 lib/liquid/ext/object_space.rb
liquid-ext-1.0.0 lib/liquid/ext/object_space.rb
madvertise-ext-0.9.7 lib/madvertise/ext/object_space.rb
madvertise-ext-0.9.6 lib/madvertise/ext/object_space.rb
madvertise-ext-0.9.5 lib/madvertise/ext/object_space.rb
madvertise-ext-0.9.4 lib/madvertise/ext/object_space.rb
madvertise-ext-0.9.3 lib/madvertise/ext/object_space.rb
madvertise-ext-0.9.2 lib/madvertise/ext/object_space.rb
madvertise-ext-0.9.1 lib/madvertise/ext/object_space.rb
madvertise-ext-0.9.0 lib/madvertise/ext/object_space.rb
madvertise-ext-0.8.0 lib/madvertise/ext/object_space.rb