在对服务器的第一次 RPC 调用期间发生超时,但 subsequest 请求成功。服务器响应超时,因为在第一次调用时它会加载处理请求所需的库。由于此延迟,一些客户端超时。尽管可以增加客户端的超时延迟,但我想尽量减少类加载对应用程序响应能力的影响。
您将如何预加载 Java 类文件,以便在.jar
首次运行应用程序文件时,类加载不会在第一次调用时引入延迟?
在对服务器的第一次 RPC 调用期间发生超时,但 subsequest 请求成功。服务器响应超时,因为在第一次调用时它会加载处理请求所需的库。由于此延迟,一些客户端超时。尽管可以增加客户端的超时延迟,但我想尽量减少类加载对应用程序响应能力的影响。
您将如何预加载 Java 类文件,以便在.jar
首次运行应用程序文件时,类加载不会在第一次调用时引入延迟?
您可以在服务器上线之前运行负载。您尚未指定如何加载服务器、类以及环境是什么,但您可以利用类静态初始化程序将在加载类时运行这一事实。所以,如果你从“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...
}
}
您可能想尝试的一件事是在 Java 服务器本身内部编写一个简单的客户端。这个客户端什么都不做,只是在启动时调用服务器中的一些方法,强制加载类。在这个小客户端得到结果(或回调)后,它会将服务器置于“外部世界可访问”状态。
我建议在打开服务器之前伪造连接。这将确保(大多数)相关的延迟初始化将被执行。