在jar启动时预加载java类/库?
在对服务器的第一次RPC调用期间发生超时,但子请求请求成功。服务器在响应时超时,因为在第一次调用时,它会加载处理请求所需的库。由于此延迟,一些客户端超时。虽然可以增加客户端中的超时延迟,但我希望最小化类加载对应用程序响应性的影响在jar启动时预加载java类/库?,java,jvm,classloader,warm-up,Java,Jvm,Classloader,Warm Up,在对服务器的第一次RPC调用期间发生超时,但子请求请求成功。服务器在响应时超时,因为在第一次调用时,它会加载处理请求所需的库。由于此延迟,一些客户端超时。虽然可以增加客户端中的超时延迟,但我希望最小化类加载对应用程序响应性的影响 如何预加载Java类文件,以便在应用程序的.jar文件首次运行时,类加载不会在第一次调用时引入延迟?您可能希望尝试的一件事是在Java服务器本身内部编写一个简单的客户机。该客户机在启动时只调用服务器中的某个方法,强制加载类。在这个小客户端获得结果(或回调)后,它会将服务
如何预加载Java类文件,以便在应用程序的
.jar
文件首次运行时,类加载不会在第一次调用时引入延迟?您可能希望尝试的一件事是在Java服务器本身内部编写一个简单的客户机。该客户机在启动时只调用服务器中的某个方法,强制加载类。在这个小客户端获得结果(或回调)后,它会将服务器置于“外部世界可以访问”状态。我建议在打开服务器之前假装连接。这将确保(大多数)相关的延迟初始化已经执行。您可以在服务器启动之前运行负载。您没有指定如何加载服务器、类以及环境是什么,但可以利用这样一个事实,即加载类时将运行类静态初始值设定项。因此,如果您是从“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...
}
}
这个解决方案有点脆弱。一个更好的解决方案是先做一个虚拟动作,加载所有需要的类。类似于
sendRequest(“/dev/null”)
的东西会很好。但是基本的想法是可以的。你可能想看看现有的一些。