Java VMが確保するヒープサイズを調べる

javaの実行引数に-Xmxっていうオプションを追加することで明示的にヒープサイズを確保するわけですが、確保できる上限ってのがどうやらOSとかCPUとかに依存して一意じゃないということを会社の同期のT君に教えてもらいました。じゃぁ使っているPCはどこまで確保できるのかっていうと(かっこいいコマンドがあるのかもしれないけど)、以下のコマンドで調べられるそう。

java -Xmx1024m -version

ただのバージョン表示コマンド。で、普通にバージョン情報が表示されたらOK。1024mのところを2048mに変えて実行すると、エラーメッセージが表示される。というわけで、地道に探っていけば境界値が見えてくるというわけ。嗚呼地味だ...orz。というわけで、rubyスクリプトです。

 mem = 1000

loop do
  break if `java -Xmx#{mem += 50}m -version` =~ /^Error.*/
end

puts "最大ヒープサイズは#{mem}MBっぽいです。"