java - 在 jar 启动时预加载 java 类/库?

标签 java jvm classloader warm-up

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

您将如何预加载 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 - 在 jar 启动时预加载 java 类/库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/677739/

相关文章:

java - 如何区分不同jar版本的类加载器?

Java:用Java实现的Apache Qpid

java - 强制 JVM 在没有页面缓存的情况下执行所有 IO(例如 O_DIRECT)

Java:WAITING同步块(synchronized block),谁先走?

java - 通过资源加载 jdbc 驱动程序 (Tomcat 7)

java - 引导类加载器和扩展类加载器的职责可以合并吗?

java - 完全忽略带有 AspectJ 的 Spring/@Transactional

java - 用科学计数法格式化 double 值

java - Tomcat 5.5 上的 GWT 部署

android - Robolectric 测试在没有消息的情况下抛出 IllegalArgumentException