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.



336
337
338
339
# File 'lib/knj/memory_analyzer.rb', line 336

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

Instance Method Details

#calculate_sizeObject



341
342
343
344
345
346
# File 'lib/knj/memory_analyzer.rb', line 341

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

#object_size(obj) ⇒ Object



348
349
350
351
352
353
354
355
356
357
358
359
# File 'lib/knj/memory_analyzer.rb', line 348

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



361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
# File 'lib/knj/memory_analyzer.rb', line 361

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