9

在对服务器的第一次 RPC 调用期间发生超时,但 subsequest 请求成功。服务器响应超时,因为在第一次调用时它会加载处理请求所需的库。由于此延迟,一些客户端超时。尽管可以增加客户端的超时延迟,但我想尽量减少类加载对应用程序响应能力的影响。

您将如何预加载 Java 类文件,以便在.jar首次运行应用程序文件时,类加载不会在第一次调用时引入延迟?

4

3 回答 3

4

您可以在服务器上线之前运行负载。您尚未指定如何加载服务器、类以及环境是什么,但您可以利用类静态初始化程序将在加载类时运行这一事实。所以,如果你从“main”方法运行,你的类可能看起来像这样

public class Foo {

   static {
     //this will be run when the class is loaded
     try { Class.forName("fully.qualified.class.name.that.i.want.to.Load"); }
     catch ...
   }

   public static void main (string args[])
   {
    //run my server...
   }
}
于 2009-03-24T15:42:50.583 回答
3

您可能想尝试的一件事是在 Java 服务器本身内部编写一个简单的客户端。这个客户端什么都不做,只是在启动时调用服务器中的一些方法,强制加载类。在这个小客户端得到结果(或回调)后,它会将服务器置于“外部世界可访问”状态。

于 2009-03-24T15:00:51.620 回答
1

我建议在打开服务器之前伪造连接。这将确保(大多数)相关的延迟初始化将被执行。

于 2009-03-24T15:02:37.917 回答