Class: Knj::Memory_analyzer::Object_size_counter

Inherits:
Object
  • Object
show all
Defined in:
lib/knj/memory_analyzer.rb

Overview

This class is used to calculate a guessed amount of memory the given object requires.

Instance Method Summary collapse

Constructor Details

#initialize(obj) ⇒ Object_size_counter

Returns a new instance of Object_size_counter.



295
296
297
298
# File 'lib/knj/memory_analyzer.rb', line 295

def initialize(obj)
  @checked = {}
  @object = obj
end

Instance Method Details

#calculate_sizeObject



300
301
302
303
304
305
# File 'lib/knj/memory_analyzer.rb', line 300

def calculate_size
  ret = self.var_size(@object)
  @checked = nil
  @object = nil
  return ret
end

#object_size(obj) ⇒ Object



307
308
309
310
311
312
313
314
315
316
317
318
# File 'lib/knj/memory_analyzer.rb', line 307

def object_size(obj)
  size = 0
  
  obj.instance_variables.each do |var_name|
    var = obj.instance_variable_get(var_name)
    next if @checked.key?(var.__id__)
    @checked[var.__id__] = true
    size += self.var_size(var)
  end
  
  return size
end

#var_size(var) ⇒ Object



320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
# File 'lib/knj/memory_analyzer.rb', line 320

def var_size(var)
  size = 0
  
  if var.is_a?(String)
    size += var.length
  elsif var.is_a?(Integer)
    size += var.to_s.length
  elsif var.is_a?(Symbol) or var.is_a?(Fixnum)
    size += 4
  elsif var.is_a?(Time)
    size += var.to_f.to_s.length
  elsif var.is_a?(Hash)
    var.each do |key, val|
      size += self.var_size(key)
      size += self.var_size(val)
    end
  elsif var.is_a?(Array)
    var.each do |val|
      size += self.object_size(val)
    end
  elsif var.is_a?(TrueClass) or var.is_a?(FalseClass)
    size += 1
  else
    size += self.object_size(var)
  end
  
  return size
end