■ヒーププロファイリング
【 HprofSample1.java 】
■CPUプロファイリング
【 HprofSample2.java 】
■モニターオブジェクトの状態監視
【 HprofSample3.java 】
【 HprofSample1.java 】
import java.util.Vector; /** * ヒーププロファイリング用サンプル */ public class HprofSample1 { static public void main(String[] args) { HprofSample1 sample1 = new HprofSample1(); sample1.execute(); } /** * ObjectHolderを大量に生成・保持する */ public void execute() { // ObjectHolder を 1024 個保持する Vector vector = new Vector(); for(int i = 0; i < 1024; i++) { ObjectHolder obj = new ObjectHolder(); vector.add(obj); } } } /** * String型配列、int型配列を保持するサンプルクラス */ class ObjectHolder { String[] strArray = new String[32]; Integer[] intArray = new Integer[32]; /** * String型配列、int型配列を保持する */ public ObjectHolder() { for(int cnt = 0; cnt < 32; cnt++) { strArray[cnt] = new String(""); intArray[cnt] = new Integer(0); } } }→戻る
■CPUプロファイリング
【 HprofSample2.java 】
/** * CPUプロファイリング用サンプル */ public class HprofSample2 { static public void main(String[] args) { HprofSample2 sample2 = new HprofSample2(); sample2.execute(); } /** * 時間がかからない処理を大量に繰り返し実行し、 * 時間がかかる処理を1回実行する。 */ public void execute() { // 時間がかからない処理を大量に繰り返し実行する for(int cnt = 0; cnt < 65535; cnt++) { this.shortMethod(); } // 時間がかかる処理を1回実行する this.longMethod(); } /** * 時間がかからない処理を実行する。 */ public void shortMethod() { double d = (double)1.0; for(int i = 0; i < 1024; i++) { d *= 2; d /= 2; } } /** * 時間がかかる処理を実行する。 */ public void longMethod() { double d = (double)1.0; for(int cnt = 1; cnt < 65535; cnt++) { for(int i = 0; i < 1024; i++) { d *= 2; d /= 2; } } } }→戻る
■モニターオブジェクトの状態監視
【 HprofSample3.java 】
/** * モニターオブジェクトの状態監視用サンプル */ public class HprofSample3 { static public void main(String[] args) { // デッドロックを起こすため、SyncClassを生成する SyncClass obj1 = new SyncClass(); SyncClass obj2 = new SyncClass(); obj1.setOther(obj2); obj2.setOther(obj1); // SyncClass実行スレッドを起動する obj1.start(); obj2.start(); // SyncClass実行スレッドがデッドロックを起こすので // プログラムを強制終了する try { Thread.currentThread().sleep(2000); System.exit(0); } catch(Throwable t) { t.printStackTrace(); } } } /** * デッドロックを起こすためのサンプルクラス。 * 自分自身のsynchronizedブロックから * setOtherメソッドで指定されたインスタンスの * synchronizedメソッドを互いに呼び出すことで、 * デッドロックを引き起こす。 */ class SyncClass extends Thread { SyncClass other; /** * ロックするオブジェクトを保持する * @param ロックするオブジェクト */ public void setOther(SyncClass obj) { other = obj; } /** * ロックするオブジェクトを保持する */ public void run() { synchronized(this) { System.out.println("lock my object."); try { Thread.currentThread().sleep(1000); other.lock(); } catch(Throwable t) { t.printStackTrace(); } } } /** * デッドロックを引き起こすためのsynchronizedメソッド */ synchronized public void lock() { System.out.println("lock."); } }→戻る







Copyright (C) 2008 SMG Co., ltd. All Rights Reserved.