JVM热身查询

7 java jvm

我是Java的新手.我正在阅读有关JVM预热的内容,并了解它指的是JVM查找热点所需的时间以及JIT代码的这些部分.

我也明白,为了做到这一点,我必须进行几百次测试.

但我不明白的事情如下:

  1. 在JVM完全预热之前,如何确定测试应运行的次数?

  2. 这会将JVM更改为JVM吗?我的意思是,如果我能够通过运行1000次迭代来预热我的JVM,那么其他人可能最终需要更多或更少?

  3. 运行测试是预热JVM的唯一方法吗?

  4. 我应该什么时候预热JVM?我的意思是频率.我是否应该每次停止并启动应用程序,或者只是在重新启动服务器后执行一次?

这是我的第一个问题.我在发布之前阅读了指南.如果有任何错误,请建议编辑.

Pet*_*rey 4

在 JVM 完全预热之前,我应如何确定测试应运行的次数?

假设您有默认的-XX:CompileThreshold=10000方法,可以在 10,000 次调用后触发编译,或者其中有一个已迭代 10,000 次的循环。这是在后台排队等待编译的,因此在运行优化代码之前可能需要 12K - 20K 迭代。

注意:JIT 可以重新优化代码,即使在 10K 或 100 万次迭代之后,您也可能会看到时间变化。

这是否会将 JVM 更改为 JVM?我的意思是,如果我能够通过运行 1000 次迭代来预热我的 JVM,那么其他人最终可能会需要更多或更少的东西吗?

是的。如果您做的事情比您认为需要的更多,那么这是涵盖更多配置的最佳方法。

运行测试是预热 JVM 的唯一方法吗?

理想情况下,您确实应该运行真实的代码。运行测试可以更好地减少代码预热的影响,因此在生产中更实用。

我什么时候应该预热 JVM?我指的是频率。我应该在每次停止和启动应用程序时执行此操作,还是在重新启动服务器后执行一次?

每当启动 JVM 时,您都是从头开始。即使同一个 JVM 已经在运行,或者您从另一个 JVM 中生成了一个。

  • @TheLostMind 您不想接受每天或每周的前 100 亿个订单您将无法获得最佳速度/价格。缓慢的订单可能会花费您名义成本的 0.002%,这听起来不多,但每周可能会花费 20,000 美元。 (3认同)
  • 顺便说一句,热身不仅仅是 JIT 编译。我想说,在大型服务器应用程序中,这根本与 JIT 无关。确定预热阶段是否结束的唯一方法是观察特定于应用程序的性能指标是否达到稳定状态。 (3认同)
  • @TheLostMind 提供的实例在您需要之前加载,例如甚至 10 秒或一分钟之前,您可以花这段时间预热代码,或者至少做一些基本的正确性测试。最大的影响是第一次加载类,因此只需点击一次代码就足够了。 (2认同)