rss = ->(key) { File.read("/proc/self/status")[/^#{key}:\s+(\d+)/, 1].to_i / 1024 }
total_gib = Integer(ARGV[0] || 1)

GC.start
before = rss.("VmRSS")
gaps = []
since = 0
last = GC.count
(total_gib * 1024).times do
  String.new(capacity: 1 << 20) << "x"
  since += 1
  next if GC.count == last

  gaps << since
  since = 0
  last = GC.count
end

puts "#{RUBY_DESCRIPTION}"
puts "#{total_gib} GiB: #{gaps.size} GCs, peak RSS +#{rss.("VmHWM") - before} MiB"
puts "MiB allocated between GCs: #{gaps.inspect}"
