作成手順
[1] Eclipseで、サンプルの「ObjectSizeFetcher.java」を参考にプログラムを書く [2] Eclipseで、「build.xml」を作成する(内容はサンプルの「build.xml」を参照のこと) [3] 手順[2] で作成した「build.xml」を右クリックし、[Run As]-[Ant Build]を選択 ⇒すると、ビルドが成功すれば「lib」直下に「ObjectSizeFetcher.jar」ができるはず。 [4] メモリを測るクラス(呼び出し先)を作成 (内容はサンプルの「SampleMain.java」を参照のこと) [5] 手順[2] で作成した「SampleMain.java」を右クリックし、 [Run As]-[Run Configurations]を選択 [6] 「Arguments」タブの「VM arguments」項目に 「-javaagent:./lib/ObjectSizeFetcher.jar」を入力 [7] 「Run」ボタン押下で、クラスを実行する
サンプル
ObjectSizeFetcher.java
http://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to-determine-the-size-of-an-objectより
package com.sample; public class ObjectSizeFetcher { private static Instrumentation instrumentation; public static void premain(String args, Instrumentation inst) { System.out.println("premain"); ObjectSizeFetcher.instrumentation = inst; } public static long getObjectSize(Object o) { System.out.println("getObjectSize"); return ObjectSizeFetcher.instrumentation.getObjectSize(o); } }
build.xml
http://www.ne.jp/asahi/hishidama/home/tech/java/javassist.html#h2_PreMainを参考に作成
<?xml version="1.0" encoding="UTF-8"?> <project name="HelloWorld" default="make_ObjectSizeFetcher_jar" basedir="."> <target name="make_ObjectSizeFetcher_jar"> <jar jarfile="./lib/ObjectSizeFetcher.jar"> <manifest> <attribute name="Premain-Class" value="com.sample.ObjectSizeFetcher" /> </manifest> </jar> </target> </project>
SampleMain.java
* 実行するクラスpackage com.sample; import com.sample.ObjectSizeFetcher; public class SampleMain { public static void main(String[] args) { String str = "Mike"; System.out.println(ObjectSizeFetcher.getObjectSize(str)); } }
出力結果
premain getObjectSize 24