Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Preloading java classes/libraries at jar startup?

A time-out occurs during the first RPC call to a server yet subsequest requests succeed. The server times-out on the response because upon first call it loads the libraries needed to handle the request. Due to this delay, some clients time out. Although it is possible to increase the time-out delay in the client, I'd like to minimize the impact that class loading has on the application's responsiveness.

How would you preload Java class files so that when the application's .jar file is first run class loading does not introduce a delay on the first call?

like image 896
Phillip B Oldham Avatar asked Mar 24 '09 14:03

Phillip B Oldham


1 Answers

You could run a load before the server becomes live. You haven't specified how you're loading the server, the classes, and what the environment is, but you can take advantage of the fact that a class static initializer will run when the class is loaded. So, if you're running from a "main" method, your class could look something like this

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...
   }
}
like image 95
Steve B. Avatar answered Sep 16 '22 11:09

Steve B.