[1] ライブラリ「sizeOf」を利用する
設定方法
[1] 以下のサイトからライブラリ「sizeOf」をダウンロードし、Zipを解凍する
http://sourceforge.net/projects/sizeof
[2] Eclipseを立ち上げ、任意のプロジェクトの配下に「lib」を作成し、
その下にダウンロードした「SizeOf.jar」を配置しておく
[3] プロジェクトを右クリックして、[BuildPath]-[Configure BuildPath]を
クリックすると、「Java Build Path」のウィンドウが表示されるので、
このウィンドウの「Libraries」タブの「Add JARs」ボタンから
[2]の「SizeOf.jar」を追加
[4] [Run]-[Run Configurations]を開き、「Arguments」タブの「VM arguments」項目に
「-javaagent:./lib/SizeOf.jar」を入力
サンプル
import net.sourceforge.sizeof.SizeOf;
public class HelloWorld {
public static void main(String[] args) {
String str = "Tom";
SizeOf.skipStaticField(true); // 初期化コード
SizeOf.setMinSizeToLog(10); // 初期化コード
long size = SizeOf.deepSizeOf(str); // オブジェクトのサイズを取得
System.out.println("Tom = " + size);
str = "Kevin";
size = SizeOf.deepSizeOf(str); // オブジェクトのサイズを取得
System.out.println("Kevin = " + size);
}
}
出力結果
JAVAGENT: call premain instrumentation for class SizeOf
Found big object: [C@2228437 size: 24.0b
Found big object: java.lang.String@27291192 size: 48.0b
Tom = 48
Found big object: [C@3299256 size: 24.0b
Found big object: java.lang.String@20843194 size: 48.0b
Kevin = 48
[2] ライブラリ「Classmexer」を利用する
設定方法
「SizeOf」と同じなので、省略。以下はダウンロードサイト。
http://www.javamex.com/classmexer/
サンプル
import com.javamex.classmexer.MemoryUtil;
public class HelloWorld {
public static void main(String[] args) {
String str = "Tom";
// オブジェクトのサイズを取得
long size = MemoryUtil.deepMemoryUsageOf(str);
System.out.println("Tom = " + size);
str = "Kevin";
size = MemoryUtil.deepMemoryUsageOf(str);
System.out.println("Kevin = " + size);
}
}
出力結果
JAVAGENT: call premain instrumentation for class SizeOf
Tom = 48
Kevin = 48