Javaのオブジェクトサイズの測り方、sizeof - minghaiの日記で紹介されてました。下の2サイトで、コードつきで紹介されてたので確認してみることに。
- http://www.javaworld.com/javaworld/javatips/jw-javatip130.html?page=1
- http://weblogs.java.net/blog/mister__m/archive/2004/02/playing_with_th_1.html
まず下のサイトのほうがコードがシンプルだったのでそっちから。SunのWindows用Java 1.4.2ではこんな感じ。
$ java SizeOf SizeOf: (bytes) Object: 8
ちなみに下のサイト、Factoryパターンでobjectを作ってるんだけど、それは自分で実装しろということらしい。めんどくさ・・・。とりあえず適当に作る。
class LangObjectFactory implements ObjectFactory{ public String getClassName(){return "Object";} public Object makeObject(int i){return new Object();} public int makeHowMany(){return 100000;} }
Windows版はいいのですよ。これを某ベンダーの某OSにもっていくと・・・
Java 1.4.2
# java SizeOf SizeOf: (bytes) Object: 15
Java 1.5
# java5 SizeOf SizeOf: (bytes) Object: -5
うううーん。15って・・・きり悪すぎだろ。あと、Java5の結果はマイナスになってるとかひどい・・・!上のサイトはコードが長い分、この環境でも正確に測定してくれました。
Java 1.4.2
# java Sizeof 'before' heap: 1537720, 'after' heap: 3176520 heap delta: 1638800, {class java.lang.Object} size = 16 bytes