预热高吞吐量Java应用程序

时间:2010-02-11 19:26:41

标签: java performance jvm jit throughput

我最近了解了在开始提供实际请求之前需要预热应用程序(具有高吞吐量要求)的方案。这背后的逻辑是允许JIT发挥其性能魔力!

这是Java应用程序的标准还是通常用于内存繁重(占用空间)的应用程序?

3 个答案:

答案 0 :(得分:12)

如果您正在谈论高流量的网络应用/网站,那么JIT是一个非常小的问题。最大的问题是预热(填充)您需要拥有的所有缓存层。例如ehcache regions which are being populated from hibernate。这是因为IO相关操作比CPU内部发生的任何事情都要慢几个数量级(除非你在计算分形:)

答案 1 :(得分:5)

问题是,您希望何时离开来执行此操作?

如果您推出了一个webapp,并且它立即生效,那么当您“加热”它时,您将增加额外的负载,这会产生反作用。桌面应用程序启动时也是如此。如果用户要立即开始使用它,就没有必要加温。或者更糟糕的是,在你加热应用程序时不允许用户进行交互。

如果您推出了一个webapp,并且在将负载均衡器指向它之前测试了部署,那么您已经将其作为副作用进行了预热。

答案 2 :(得分:4)

除了cherouvim's answer之外,我还可以考虑其他一些需要热身的问题:

  • 对象实例化(延迟加载,单例等);
  • 堆分配(如果Xms小于Xmx)。

我认为操作系统也会调整应用程序的行为,因此操作系统调用也可能受到预热期的影响。

上述大部分内容(缓存填充,对象初始化)并非特定于Java。