MemoryCheck.java



/** システムのメモリ使用状況を調べる */
import java.lang.ref.*;
import java.util.*;
public class MemoryCheck {

  /** Runtime のオブジェクト */
    public Runtime runtime;

  /** 参照を記憶する ArrayListのオブジェクト */
    public ArrayList list;

  /** コンストラクタ */
    public MemoryCheck(){
        runtime = Runtime.getRuntime();
        list = new ArrayList();
    }

  /** 最初に呼び出されるメソッド */
    public static void main( String argv[] ) {
        MemoryCheck check = new MemoryCheck();
        while( true ) {
            int bigarray[] = new int[1024];
            check.list.add( new SoftReference(bigarray) );
            float rate = check.checkMemory();
            if( rate < 0.3f )
                check.freeMemory();
        }
    }

  /** メモリの状態を調べるメソッド */
    public float checkMemory() {
        float rate=0.0f;
        try {
             long total = runtime.totalMemory();
             long free = runtime.freeMemory();
             rate = (float)free/(float)total;
             System.out.println( "Free/Total: " + free + "/" + total
                               + "Bytes " + rate*100.0 + "%" );
        }
        catch( Exception e ){
            System.err.println( "Error" );
        }
        return rate;
    }

  /** メモリの解放を実行するメソッド */
    public void freeMemory() {
        for( int i=0; i<list.size(); i++ ) {
             SoftReference ref
                     = (SoftReference)list.get(i);
             ref.clear();
        }
        System.gc();
        list = new ArrayList();
    }
}