我在NetBeans中探查发现,存活生成的增加不断后,我执行查询:查询中的MyBatis内存泄漏,其结果是平均值列表。 30K行
@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
,虽然这并没有防止内存泄漏?
如果有什么需要请告诉我和我会提供什么。
UPDATE:
更多的测试后,我更关心的是,问题的MyBatis持有的检索结果的参考规定因此它们不会随时间收集垃圾。在完成20个查询调用之后,等待30分钟后,我观察不到垃圾回收。我所做的只是调用方法:List<AisDynamic> adList = mapper.getRecords(from, to, sys);
我也有MyBatis的内存泄漏。你有没有找到解决你的问题的方法? – Marc
@Marc我观察到它只发生在我检索大量大于10k的行的情况下。为我工作的解决方案是全部使用JDBC和代码全部一起,问题就没有了。甚至测试50k行。虽然它解决了我的问题,但我确实希望一直坚持使用MyBatis,因为它可以节省大量编码,但在这种情况下,这是不可能的。虽然我正在等待更好的解决方案,但谁知道可能需要修复API? – Boro
您可以将此配置添加到您的MyBatis配置文件中,看看是否有任何区别:' ' –
partlov