JVM 预热查询
JVM Warmup Queries
我是 Java 的新手。我正在阅读有关 JVM 预热的内容,并了解到它指的是 JVM 找到热点并对这些代码部分进行 JIT 所花费的时间。
我也明白我必须 运行 我的测试几百次才能做到。
但是我不明白的地方如下:
如何确定在我的 JVM 完全预热之前测试应该 运行 的次数?
这是否将 JVM 更改为 JVM?我的意思是,如果我能够通过 运行 宁 1000 次迭代来预热我的 JVM,那么其他人最终可能需要更多或更少吗?
运行ning 测试是预热 JVM 的唯一方法吗?
我应该什么时候预热 JVM?我的意思是频率。我应该在每次停止和启动我的应用程序时都这样做,还是在重新启动我的服务器后才这样做?
这是我的第一个问题。我在发布前阅读了指南。如果有任何错误,请提出修改意见。
首先,您不必担心生产环境中的预热/强制编译方法,因为让我们面对现实吧 - JIT 比我们更聪明:P.
How shall I determine the number of times a test should run before my
JVM is fully warmed-up?
On Java 8 on a mac,一个方法需要大约 256 次迭代才能被 JIT 编译(假设该方法能够被 JIT 编译)。这个数字可能因一个 JVM 而异。
Does this change JVM to JVM? I mean is it possible that if I'm able to
warm-up my JVM by running 1000 iterations then someone else might end
up needing more or less?
这可能 从 JVM 更改为 JVM。假设这个数字对于不同的 JVM 保持不变是不安全的。
Is running tests the only way to warm-up the JVM?
好吧,如果您想对某些东西进行基准测试,那么是的。您应该让 JVM 优化它所能做的(通过使用预热运行),然后测量性能。
When should I warm-up the JVM? I mean the frequency. Should I do it
every-time I'm stopping and starting my application or just once after
rebooting my servers?
每次您想进行基准测试时(即在 JVM / 应用程序启动时)。我认为没有理由在 生产环境 中这样做。请注意,在某些情况下,如果 JIT 在其假设中发现缺陷,它实际上可能更喜欢解释方法而不是编译方法。
How shall I determine the number of times a test should run before my JVM is fully warmed-up?
假设您有默认的 -XX:CompileThreshold=10000
一个方法可以在 10,000 次调用后被触发编译,或者您有一个迭代 10,000 次的循环。这在后台排队等待编译,因此在您 运行 优化代码之前可能需要 12K - 20K 次迭代。
注意:JIT 可以重新优化代码,即使在 10K 或 100 万次迭代后,您也可能会看到时间变化。
Does this change JVM to JVM? I mean is it possible that if I'm able to warm-up my JVM by running 1000 iterations then someone else might end up needing more or less?
是的。如果您做的比您认为需要的更多,这是涵盖更多配置的最佳方式。
Is running tests the only way to warm-up the JVM?
你真的应该 运行 真正的理想代码。 运行 测试可以更好地减少预热代码的影响,因此在生产中更实用。
When should I warm-up the JVM? I mean the frequency. Should I do it every-time I'm stopping and starting my application or just once after rebooting my servers?
无论何时启动 JVM,都是从头开始。即使同一个 JVM 已经 运行ning,或者你从另一个生成一个。
How shall I determine the number of times a test should run before my JVM is fully warmed-up?
- 测量您的应用程序逻辑的延迟和吞吐量,看看它何时趋于平稳
- 使用
-XX:+PrintCompilation
跟踪 JIT 行为
每个应用程序都是不同的,因此最好收集自己的数据。然后,您可以根据这些数据做出进一步的决定。
我是 Java 的新手。我正在阅读有关 JVM 预热的内容,并了解到它指的是 JVM 找到热点并对这些代码部分进行 JIT 所花费的时间。
我也明白我必须 运行 我的测试几百次才能做到。
但是我不明白的地方如下:
如何确定在我的 JVM 完全预热之前测试应该 运行 的次数?
这是否将 JVM 更改为 JVM?我的意思是,如果我能够通过 运行 宁 1000 次迭代来预热我的 JVM,那么其他人最终可能需要更多或更少吗?
运行ning 测试是预热 JVM 的唯一方法吗?
我应该什么时候预热 JVM?我的意思是频率。我应该在每次停止和启动我的应用程序时都这样做,还是在重新启动我的服务器后才这样做?
这是我的第一个问题。我在发布前阅读了指南。如果有任何错误,请提出修改意见。
首先,您不必担心生产环境中的预热/强制编译方法,因为让我们面对现实吧 - JIT 比我们更聪明:P.
How shall I determine the number of times a test should run before my JVM is fully warmed-up?
On Java 8 on a mac,一个方法需要大约 256 次迭代才能被 JIT 编译(假设该方法能够被 JIT 编译)。这个数字可能因一个 JVM 而异。
Does this change JVM to JVM? I mean is it possible that if I'm able to warm-up my JVM by running 1000 iterations then someone else might end up needing more or less?
这可能 从 JVM 更改为 JVM。假设这个数字对于不同的 JVM 保持不变是不安全的。
Is running tests the only way to warm-up the JVM?
好吧,如果您想对某些东西进行基准测试,那么是的。您应该让 JVM 优化它所能做的(通过使用预热运行),然后测量性能。
When should I warm-up the JVM? I mean the frequency. Should I do it every-time I'm stopping and starting my application or just once after rebooting my servers?
每次您想进行基准测试时(即在 JVM / 应用程序启动时)。我认为没有理由在 生产环境 中这样做。请注意,在某些情况下,如果 JIT 在其假设中发现缺陷,它实际上可能更喜欢解释方法而不是编译方法。
How shall I determine the number of times a test should run before my JVM is fully warmed-up?
假设您有默认的 -XX:CompileThreshold=10000
一个方法可以在 10,000 次调用后被触发编译,或者您有一个迭代 10,000 次的循环。这在后台排队等待编译,因此在您 运行 优化代码之前可能需要 12K - 20K 次迭代。
注意:JIT 可以重新优化代码,即使在 10K 或 100 万次迭代后,您也可能会看到时间变化。
Does this change JVM to JVM? I mean is it possible that if I'm able to warm-up my JVM by running 1000 iterations then someone else might end up needing more or less?
是的。如果您做的比您认为需要的更多,这是涵盖更多配置的最佳方式。
Is running tests the only way to warm-up the JVM?
你真的应该 运行 真正的理想代码。 运行 测试可以更好地减少预热代码的影响,因此在生产中更实用。
When should I warm-up the JVM? I mean the frequency. Should I do it every-time I'm stopping and starting my application or just once after rebooting my servers?
无论何时启动 JVM,都是从头开始。即使同一个 JVM 已经 运行ning,或者你从另一个生成一个。
How shall I determine the number of times a test should run before my JVM is fully warmed-up?
- 测量您的应用程序逻辑的延迟和吞吐量,看看它何时趋于平稳
- 使用
-XX:+PrintCompilation
跟踪 JIT 行为
每个应用程序都是不同的,因此最好收集自己的数据。然后,您可以根据这些数据做出进一步的决定。