1. ライブラリ「sizeOf」を利用する
http://sourceforge.net/projects/sizeof
使い方
上のリンクからSizeOf.jarをダウンロードし、BuildPathを通します。
(eclipseでBuildPathを通す場合は、プロジェクトを右クリックして、BuildPath -> Configure BuildPathをクリックすると、Java Build Pathのウィンドウが表示されるので、このウィンドウのLibrariesタブのAdd JARsボタンから追加できます。)
実行時にVMの引数に次の行を追加して実行します。
-javaagent:[SizeOf.jarのファイルパス]
私の場合は、プロジェクト/lib/SizeOf.jarに入れているので以下のようになります。
-javaagent:./lib/SizeOf.jar
(eclipseでVMの引数を設定する場合は、Run -> Run Configurationsを開き、ArgumentsタブのVM arguments項目に引数を入力します。)
以下に、サンプルのソースコードを載せておきます。
import net.sourceforge.sizeof.SizeOf; public class SizeOfTester { public static void main(String[] args) { String str = "String"; SizeOf.skipStaticField(true); // 初期化コード SizeOf.setMinSizeToLog(10); // 初期化コード long size = SizeOf.deepSizeOf(str); // オブジェクトのサイズを取得 System.out.println(size); } }
2. ライブラリ「Classmexer」を利用する
http://www.javamex.com/classmexer/
使い方
上のリンクから、classmexer.jarをダウンロードし、BuildPathを通します。
実行時にVMの引数に次の行を追加して実行します。
-javaagent:[classmexer.jarのファイルパス]
以下に、サンプルのソースコードを載せておきます。
import com.javamex.classmexer.MemoryUtil; public class ClassmexerTester { public static void main(String[] args) { String str = "String"; long size = MemoryUtil.deepMemoryUsageOf(str); // オブジェクトのサイズを取得 System.out.println(size); } }