7

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

这是 Java 应用程序的规范,还是通常用于内存重(占用空间)应用程序?

4

3 回答 3

12

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

于 2010-02-11T19:30:34.593 回答
5

问题是,您什么时候想竭尽全力做到这一点?

如果你推出一个 web 应用程序,并且它立即上线,那么当你“加热”它时,你就会增加额外的负载,这会适得其反。桌面应用程序启动时也是如此。如果用户要立即开始使用它,那么加热没有意义。或者更糟糕的是,在您加热应用程序时不允许用户进行交互。

如果您推出一个 web 应用程序,并在将负载均衡器指向它之前测试部署,那么您已经将它作为一个附带结果进行了预热。

于 2010-02-11T19:35:43.473 回答
4

除了cherouvim的回答,我还能想到其他几个需要热身的问题:

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

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

以上大部分内容(缓存填充、对象初始化)都不是 Java 特有的。

于 2010-02-11T19:38:49.617 回答