FLYING

/* TODO: 気の利いた説明を書く */

ObjectOutputStreamでOutOfMemoryErrorな件

public void send(Object obj) throws IOException {
    objectOutStream.writeObject(obj);
    objectOutStream.reset();
}

ObjectOutputStreamは一度writeObjectしたオブジェクトを内部テーブルにキャッシュして保持しつづける仕様らしい。なので,同じオブジェクトを変更してwriteObjectしても一番最初に書き込んだオブジェクトが書き出されてしまう。また,キャッシュされたオブジェクトはGCで開放されないので,OutOfMemoryを回避するためには明示的にキャッシュをクリアする必要がある。ObjectOutputStream#resetを呼び出すことですべて解決。うまくオブジェクトが書き出されない不具合も,メモリ消費が激しい不具合も一挙に解消した。そういう大切なことはJavaDocに太字で書いておくべききっとそうすべき。

プレゼン発表前日の貴重な数時間を返してください。