最小化Java“预热”时间的技术或实用程序?
我支持需要低延迟的Java消息传递应用程序(处理每条消息<300微秒)。但是,我们的分析表明,Sun Java 虚拟机起初运行缓慢,在前 5,000 条消息左右后速度加快。前 5,000 条消息的延迟为 1-4 毫秒。在大约前 5,000 个消息之后,后续消息的延迟约为 250 微秒,偶尔会出现异常值。
通常认为,这是 Java 应用程序的典型行为。但是,从业务角度来看,告诉客户他们必须等待 JVM“预热”才能看到他们所需的性能,这是不可接受的。在处理第一个客户消息之前,需要“预热”应用程序
JVM 是 Sun 1.6.0 更新 4。
克服这个问题的想法:
- JVM 设置,例如 -XX:CompileThreshold=
- 添加一个组件以在启动时“预热”应用程序,例如通过应用程序发送“假消息”。
- 在应用程序启动时静态加载应用程序和 JDK 类,以便在处理客户消息时不会从 JAR 加载类。
- 一些实用程序或Java代理可以完成上述两个想法中的一个或两个,因此我不必重新发明轮子。
注意:显然,对于此解决方案,我正在查看所有因素,包括芯片架构,磁盘类型和配置以及操作系统设置。但是,对于这个问题,我想把重点放在可以做些什么来优化Java应用程序并最大限度地减少“预热”时间。