Вопрос по ruby – Объем памяти хеша или другого объекта?
Каков наилучший способ получить размер заданного хеша (или любого другого объекта) в байтах в Ruby 1.9.3?
Решение & quot;Найти количество байтов, которые конкретный хеш использует в Ruby& Quot; не представляется действительным в 1.9.3, потому чтоmemsize_of
нет в документации дляпространства объектов.
что реальный размер определить практически невозможно, поскольку он зависит от того, какую ВМ вы используете, какую версию ВМ и так далее. Кроме того, если вы ссылаетесь на строку, на которую также ссылаются где-то еще, то удаление вашего хэша не означает, что конкретная содержащаяся строка также будет сброшена, поскольку на нее уже ссылаются где-то еще.
Однажды я написал анализатор для подсчета приблизительного размера объектов, просматривая все содержащиеся в данном объекте объекты. Вдохновитесь, чтобы написать свой собственный:
https://github.com/kaspernj/knjrbfw/blob/master/lib/knj/memory_analyzer.rb#L334
Мой работает так:
require "rubygems"
require "knjrbfw"
analyzer = Knj::Memory_analyzer::Object_size_counter.new(my_hash_object)
puts "Size: #{analyzer.calculate_size}"
ObjectSpace.memsize_of
работает в 1.9.3, задокументировано или нет:
require 'objspace'
p ObjectSpace.memsize_of("a"*23) #=> 23
p ObjectSpace.memsize_of("a"*24) #=> 24
p ObjectSpace.memsize_of("a".*1000) #=> 1000
h = {"a"=>1, "b"=>2}
p ObjectSpace.memsize_of(h) #=> 116