首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在tomcat中的每个循环迭代中,JPA查询都会变慢。

在tomcat中的每个循环迭代中,JPA查询都会变慢。
EN

Stack Overflow用户
提问于 2019-09-10 20:35:05
回答 2查看 585关注 0票数 1

我有一个简单的select查询,它返回200行。查询被迭代1437次。技术: java 8,spring 2.1.3,hibernate,tomcat,hibernate

每次迭代时,查询都会变慢。第一个查询需要55 The,最后一个查询需要702 the。

但是,当我在Junit "@RunWith(SpringJUnit4ClassRunner.class)“中启动相同的查询时,查询不会变得更慢。每个查询都需要+- 37。

在Tomcat中运行时的第一次和最后一次日志

运行junit时的第一个和最后一个日志

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-10 21:19:33

正如您在日志中看到的那样,一个不同之处是,在Tomcat上的每次迭代之后,Entity并不是关闭的(但它在JUnit上是关闭的)。经过1k的迭代后,实体管理器将在内存中保存许多对象,并且在这样一个加载的上下文上的操作将变得非常昂贵。在每次迭代中,记忆压力也应该越来越高。

我会尝试更频繁地使用上下文(即每次迭代之后),或者至少增加可用内存,以避免GC经常起作用。

另见这个答案

票数 1
EN

Stack Overflow用户

发布于 2019-09-11 18:33:28

我在每次查询之后添加了entitymanager.clear(),这解决了问题。谢谢卡斯卡德!

结果确实令人印象深刻。第一个查询需要73 1ms,而对于最后一个查询,它将相反地“下降”到1ms。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57877902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档