Java 为什么第一个HQL查询比其他查询耗时更长?

Java 为什么第一个HQL查询比其他查询耗时更长?,java,mysql,hibernate,hql,Java,Mysql,Hibernate,Hql,我正在测试JDBC和Hibernate(使用JPA)的性能,并连续多次运行相同的查询。我注意到第一个查询(使用JDBC和Hibernate)运行的时间比其他查询长 我已经禁用了mysql缓存,所以我认为它不应该是特定于mysql的。可能是吗? 我还清除了每个(HQL)查询之间的EntityManager 有人能告诉我为什么第一个查询比其他查询耗时更长吗 日志: 感谢您的回复我想是因为您的程序进行了运行时优化 在每次运行期间,都会收集代码的评测信息,JIT优化器会应用优化。以下可能是一些原因 连接

我正在测试JDBC和Hibernate(使用JPA)的性能,并连续多次运行相同的查询。我注意到第一个查询(使用JDBC和Hibernate)运行的时间比其他查询长

我已经禁用了mysql缓存,所以我认为它不应该是特定于mysql的。可能是吗? 我还清除了每个(HQL)查询之间的EntityManager

有人能告诉我为什么第一个查询比其他查询耗时更长吗

日志:


感谢您的回复

我想是因为您的程序进行了运行时优化


在每次运行期间,都会收集代码的评测信息,JIT优化器会应用优化。

以下可能是一些原因

  • 连接池
  • 准备好的发言
  • DB发动机预热/初始化
  • 在任何一种情况下,第一次迭代都比其他迭代有更多的工作要做


    例如,对于准备好的语句,查询计划是第一次构建的,并缓存起来以便在后续执行中重用。

    您是否在测试之间终止并重新启动了应用程序?@Kukmedis:有任何答案提供了帮助吗???@phresnel没有。我正在写我的最后一篇学士论文,无法对这个问题进行猜测。我知道这些猜测可能是真的,但我需要用文献等论据来支持它们,…,也许答案会给你一些提示,告诉你下一步该去哪里研究?在我看来,你期待的是完全合格的论文片段,而不想对自己进行更多的研究。你有没有看过答案中提到的主题以外的内容?@phresnel事实上,我在提问之前曾尝试过搜索网页。既然我已经完成了我的论文,我当然查阅了文献(这样我可以支持我的论点)。当我写最后一条评论时,我一直在紧张地写我的论文(截止日期)。抱歉:)连接池是第一次查询的原因。我查阅了热点白皮书,发现第一次运行code bluck时,它是在以前编译的。我认为这就是第一个运行slowerI的test查询的原因。我曾经对我编写的一些Java代码进行过一些基准测试。为了使它成为一个严肃的基准测试,我要么在花时间之前运行10次,要么在比较不同的算法时,每次运行只测试一个算法。如果我要测试桌面应用程序,那么是的,混合算法是明智的,但我测试服务器应用程序,它可能有1个月的正常运行时间,我想它总是会运行编译后的代码。Sun实际上表示,服务器应用程序更需要JIT,但在进行性能测试时,JIT可能会对结果产生偏差,不管服务器与否,所以一定要进行多次测试:)