無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

メモリを拘束するユーティリティ

メモリを拘束してOutOfMemoryErrorをスローする&スローしやすい状態を作るユーティリティです。テスト用に作りました。

  • hold()でOutOfMemoryErrorが発生するまでメモリを拘束し、OutOfMemoryErrorをスローします。
    • スローした後もメモリは拘束された状態のままです。
  • release()で拘束したメモリを解放します。
import java.util.ArrayList;
import java.util.List;

/**
 * メモリを拘束するユーティリティ
 *
 * @version $Revision:$
 * @author  $Author:$
 */
public class MemoryHolder {

    /**拘束したメモリ*/
    private List<byte[]> memory = new ArrayList<byte[]>();

    /**
     * {@link OutOfMemoryError}が発生するまでメモリを拘束する。<br/>
     * メソッドから復帰した後も、{@link #release()}が実行されるまで、拘束されたままとなる。
     * @throws OutOfMemoryError メモリ不足
     */
    public void hold() throws OutOfMemoryError {
      while ( true ) {
        byte[] b = new byte[256];
        for (int i = 0; i < b.length; i++){
            b[i] = Byte.MAX_VALUE;
        }
        memory.add( b );
      }
    }

    /**
     * {@link #hold()}で拘束したメモリを解放する。
     */
    public void release() {
        memory = new ArrayList<byte[]>();
    }
}

サンプル。

public static void main( String[] args ) throws InterruptedException {
    MemoryHolder m = new MemoryHolder();
    showFreeMemory(); // 余裕有り
    try {
        m.hold(); // メモリを拘束
    } catch ( OutOfMemoryError e ) {}
    showFreeMemory(); // 余裕なし

    m.release(); // 解放

    System.gc(); // 一応GC
    Thread.sleep( 2000 ); // GCされるのを待つ

    showFreeMemory(); // 余裕有り / 割り当て最大値まで領域が拡張されているため、初回より多い。
}
private static void showFreeMemory() {
    System.out.println( Runtime.getRuntime().freeMemory());
}

実行結果です。

4850032
376
62277752