gpt4 book ai didi

java - 最小化 Java "warm-up"时间的技术或实用程序?

转载 作者:IT老高 更新时间:2023-10-28 20:48:09 25 4
gpt4 key购买 nike

我正在支持需要低延迟(处理每条消息的时间小于 300 微秒)的 Java 消息传递应用程序。但是,我们的分析表明,Sun Java 虚拟机一开始运行缓慢,在前 5,000 条左右消息后加速。前 5,000 条消息的延迟为 1-4 毫秒。在大约前 5,000 条消息之后,后续消息的延迟约为 250 微秒,偶尔会出现异常值。

通常认为这是 Java 应用程序的典型行为。但是,从业务的角度来看,告诉客户他们必须等待 JVM “预热”才能看到他们需要的性能是 Not Acceptable 。在处理第一条客户消息之前,需要“预热”应用程序

JVM 是 Sun 1.6.0 update 4。

克服这个问题的想法:

  1. JVM设置,如-XX:CompileThreshold=
  2. 添加一个组件以在启动时“预热”应用程序,例如通过应用程序发送“假消息”。
  3. 在应用程序启动时静态加载应用程序和 JDK 类,以便在处理客户消息时不会从 JAR 加载类。
  4. 一些实用程序或 Java 代理可以完成上述两个想法中的一个或两个,这样我就不必重新发明轮子了。

注意:显然,对于这个解决方案,我正在考虑所有因素,包括芯片架构、磁盘类型和配置以及操作系统设置。但是,对于这个问题,我想重点关注可以做些什么来优化 Java 应用程序并最大限度地减少“预热”时间。

最佳答案

Java 中的“热身”一般讲两件事:

(1):延迟类加载:这可以通过强制加载来解决。

最简单的方法是发送虚假消息。您应该确保虚假消息将触发对类的所有访问。例如,如果你发送一个空消息,但你的程序会检查消息是否为空并避免做某些事情,那么这将不起作用。

另一种方法是在程序启动时通过访问该类来强制类初始化。

(2):实时优化:在运行时,Java VM会优化部分代码。这就是为什么会有热身时间的主要原因。

为了缓解这种情况,您可以发送一堆虚假(但看起来很真实)的消息,以便在您的用户使用它之前完成优化。

另一个可以帮助缓解这种情况的方法是支持内联,例如尽可能多地使用 private 和 final。原因在于,VM 不需要查找继承表来查看实际调用的方法。

希望这会有所帮助。

关于java - 最小化 Java "warm-up"时间的技术或实用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com