me observaron en NetBeans Profiler que Sobrevivir Generaciones sigue aumentando después de ejecutar la consulta:Pérdida de memoria MyBatis en una consulta cuyo resultado es una lista de prom. 30k filas
@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);
Es como si los objetos que están en la lista no se liberan a pesar de que no se están utilizando en otro sitio y debe morir con el hilo de fondo ejecutando la consulta y procesando sus resultados.
A continuación se presentan los resultados en directo devueltos por NetBeans Profiler:
Mis preguntas:
- ¿Cómo puedo prevenir la pérdida de memoria?
- ¿Cómo puedo optimizar esta consulta, como se puede ver Comencé a jugar con el
Options
, aunque esto no evitó la pérdida de memoria?
Si se necesita algo, por favor, diga qué y le daré.
ACTUALIZACIÓN:
Después de más pruebas de que estoy más preocupado de que el problema está con MyBatis la celebración de una referencia a los resultados obtenidos por lo tanto no son basura recogida en el tiempo. Después de hacer 20 llamadas de la consulta y esperar, observo que no hay recolección de basura, incluso después de 30 minutos. Todo lo que hago es llamar al método: List<AisDynamic> adList = mapper.getRecords(from, to, sys);
También tengo una pérdida de memoria con MyBatis. ¿Encontró alguna solución para su problema? – Marc
@Marc Observé que ocurre solo en situaciones en las que recupero grandes cantidades de filas de algo más de 10k. La solución que funcionó para mí fue utilizar un código JDBC y todo a mano, todo junto y el problema desapareció. Probado incluso para 50k de filas. A pesar de que resolvió el problema para mí, realmente preferiría mantener MyBatis en todo momento, ya que ahorra mucha codificación, pero en este caso no fue posible. Aunque estoy esperando una solución mejor, ¿quién sabe si se necesita una solución para la API? – Boro
¿Puede agregar esta configuración a su archivo de configuración MyBatis y ver si hay alguna diferencia: ' ' –
partlov