NetBeans プロファイラーで、クエリを実行した後、Surviving Generations が増加し続けることを確認しました。
@Select("SELECT * FROM ais_dynamic WHERE rep_time >= #{from} AND rep_time <= #{to} AND ais_system = #{sys}")
@Options(useCache=false,fetchSize=8192)
List<AisDynamic> getRecords(
@Param("from") Timestamp from,
@Param("to") Timestamp to,
@Param("sys") int sys);
リストにあるオブジェクトは、他の場所では使用されていないにもかかわらず解放されず、クエリを実行してその結果を処理するバックグラウンド スレッドで停止するかのようです。
以下は、NetBeans プロファイラーによって返されたライブ結果です。
私の質問:
- どうすればメモリリークを防ぐことができますか?
- このクエリを最適化するにはどうすればよい
Options
ですか?
何か必要な場合は、何を教えてください。提供します。
アップデート:
さらにテストを重ねた結果、取得した結果への参照を保持している MyBatis に問題があるため、時間の経過とともにガベージ コレクションが行われないことが懸念されます。クエリを 20 回呼び出してから待機した後、30 分経ってもガベージ コレクションが発生しません。私がすることは、メソッドを呼び出すことだけです:List<AisDynamic> adList = mapper.getRecords(from, to, sys);