| #!/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]}" |
| } |
| |
| |
| |