В NetBeans Profiler я заметил, что 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 Profiler:
Мои вопросы:
- Как я могу предотвратить утечку памяти?
- Как мне оптимизировать этот запрос, ведь я начал играться с
Options
, хотя это не предотвратило утечку памяти?
Если что-то нужно, пожалуйста, скажите, что и я предоставлю.
ОБНОВЛЕНИЕ:
После дополнительного тестирования я больше обеспокоен тем, что проблема заключается в том, что MyBatis содержит ссылку на полученные результаты, поэтому они не собираются мусором с течением времени. Выполнив 20 вызовов запроса, а затем ожидая, я не наблюдаю сборку мусора даже через 30 минут. Все, что я делаю, это вызываю метод: List<AisDynamic> adList = mapper.getRecords(from, to, sys);
<settings><setting name="localCacheScope" value="STATEMENT"/></settings>
- person partlov   schedule 08.04.2013