2007年4月26日木曜日

Javaのインスタンスが使っているメモリサイズをみたい

まぁお気づきと思いますがここのところメモリの問題で悩んでたわけです.
結局,Java6.0SEであっさり問題を発見できたのですけどその最中に色々やっていたのが"SizeOf".

みんな色々とやってたんですねぇ.
http://d.hatena.ne.jp/minghai/20060319/p1

でもって結局うまく動かせたのはこれ.
http://sourceforge.net/projects/sizeof

動かすには以下
1.Java5.0SE以上

2.配布されているSizeOf.jarにクラスパスに通す
 例えばlib/SizeOf.jarとなるように配置して,Properties/Java Build Path/Librariesから追加する

3.実行時のVMオプションに次の行を追加する.
-javaagent:lib/SizeOf.jar

方法としてはメニューRun/Runよりダイアログをだし,実行ターゲットのArgumentタブで入力する


追加コードとしては
SizeOf.skipStaticField(true);
SizeOf.setMinSizeToLog(10);


っていう初期化コードと
SizeOf.deepSizeOf(<your object>);

というサイズを返すメソッドを任意に入れれば良い.

で,こいつがreflect辺りで自分の中のオブジェクトを再帰的にたどって大きさを割り出すときに標準出力にログを吐き出す.
そのログを解析するのに必要だったのが先日のgawkの式.
{}はインデントによって再帰を表現していたのでこれに対応したかった.
[]中の文字列は該当するクラスのパッケージ名の先頭一文字目ね.

a...apple, s...sun, j...java, k...秘密



ということでこいつを自分でやらないでEclipseのTreeViewとかで表示できないかなぁーなんて思ったんだけど誰か作ってw.

0 件のコメント: