■ 現象
開発中のClick製Webアプリで、急に検索結果が表示されなくなったので調査してみると、OutOfMemoryErrorが 発生していました。発生している箇所はHtmlStringBufferのコンストラクタで、lengthは34763100でした。
public HtmlStringBuffer(int length) {
characters = new char[length];
};
大量の検索結果をテーブルでレンダリングしようとして、Table.toString()を呼び出したところでOutOfMemoryErrorが発生していたみたいです。Javaではヒープサイズを起動時パラメータで 指定するのが流儀なのでとりあえず起動時パラメータを変更して対応することにしました。
■ 対策
EclipseのTomcat Pluginの設定を変更します。ウィンドウ→設定→Tomcat→JVM設定を選択し、 「JVMパラメータへ追加」で、パラメータを追加します。
- -Xms256m
- -Xmx512m
※ちなみに他にもパラメータがある場合は、-Dname=value形式で追加できるようです。 1行に複数指定できるかどうかは未確認。
■ 結果
再起動して再度試してみるととりあえず表示できました。しかし検索結果出し過ぎという根本的な 問題があるのでそれは別の方法で対処したいと思います。