我最近了解了需要在应用程序开始服务实际请求之前预热应用程序(具有高吞吐量要求)的场景。这背后的逻辑是让 JIT 发挥其性能魔力!
这是 Java 应用程序的规范,还是通常用于内存重(占用空间)应用程序?
我最近了解了需要在应用程序开始服务实际请求之前预热应用程序(具有高吞吐量要求)的场景。这背后的逻辑是让 JIT 发挥其性能魔力!
这是 Java 应用程序的规范,还是通常用于内存重(占用空间)应用程序?
如果您谈论的是高流量 webapp/网站,那么 JIT 是一个非常小的问题。最大的问题是预热(填充)您需要拥有的所有缓存层。例如,从 hibernate 填充的 ehcache 区域。这是因为与 IO 相关的操作比 CPU 内部发生的任何操作都慢几个数量级(除非您正在计算分形:)
问题是,您什么时候想竭尽全力做到这一点?
如果你推出一个 web 应用程序,并且它立即上线,那么当你“加热”它时,你就会增加额外的负载,这会适得其反。桌面应用程序启动时也是如此。如果用户要立即开始使用它,那么加热没有意义。或者更糟糕的是,在您加热应用程序时不允许用户进行交互。
如果您推出一个 web 应用程序,并在将负载均衡器指向它之前测试部署,那么您已经将它作为一个附带结果进行了预热。
除了cherouvim的回答,我还能想到其他几个需要热身的问题:
Xms
的小于你的Xmx
)。我想操作系统也会适应应用程序的行为,因此操作系统调用也可能会受到预热期的影响。
以上大部分内容(缓存填充、对象初始化)都不是 Java 特有的。