1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
#!/usr/bin/env ruby
class ObjectKind
attr_reader :name, :kind, :heap
def initialize(name, kind, heap)
@name = name
@kind = kind
@heap = heap
end
def hash
@name.hash + @kind.hash + @heap.hash
end
def eql?(other)
@name == other.name and @kind == other.kind and @heap == other.heap
end
def to_s
"#{@heap}:#{@kind}:#{@name}"
end
end
$sizeHistogram = {}
$currentHeap = nil
$stdin.each_line {
| line |
line.chomp!
case line
when "bootstrap_free_heap:", "utility_heap:"
$currentHeap = line.chop
when /^ 0x([0-9a-f]+)\.\.\.0x([0-9a-f]+): ([^,]+), size = ([0-9]+), kind = (.*)/
objectKind = ObjectKind.new($3, $5, $currentHeap)
size = $4.to_i
$sizeHistogram[objectKind] = 0 unless $sizeHistogram[objectKind]
$sizeHistogram[objectKind] += size
end
}
$sizeHistogram.keys.sort {
| a, b |
$sizeHistogram[b] <=> $sizeHistogram[a]
}.each {
| key |
puts "#{key}: #{$sizeHistogram[key]}"
}
|