How can I do to load all the resources when starting the app?

Java loads the resources as they are needed.

Actually, it is more complicated than that. If you have a class A that statically depends on a class B that statically depends on a class C, then loading A will trigger eager loading of B and C and so on. But some libraries (and I think AWT and Swing do this) internally use the Class.forName(...) method to lazily load implementation classes. This reduces the number of classes that are loaded initially, and (ideally) avoids loading code that your application will never use.

How can I do to load all the resources when starting the app?

I suppose that you could create explicit static dependencies to defeat the laziness above, but that probably won't make your application's initial window appear more quickly. A better strategy would be to try to use more lazy loading to reduce the amount of code that needs to be loaded to get the initial window visible. But this needs to be done judiciously. If you lazyily load classes that are needed for the initial window, you may actually make startup slower.

Compiling to native code (using GCJ for example) is another alternative, but this has various downsides; e.g. larger binaries, more native library dependencies, portability issues, (possibly) slower execution speed for a long running application.

Re your EDIT: I think that code will "work", but I don't see how it could possibly speed up your application's startup.


If you mean also other resources than classfiles then you could use the proxy pattern to delay loading (lazy loading) until you really need the resources.


The problem is harder: The code is initialized if it is used, which can be seen even on the method level. So you have to run it to load it.

The only other possibility is to buy Excelsior Jet, which does the compile step for you (and returns a nice .exe as a side effect).

EDIT: You can reduce your runtime by Class.forName()ing all your classes during startup, and having everything loaded when its needed. Please note that for having everything really fast, the code must have been run, so maybe you can open, but hidden, all windows, the close them, and then really show the main window from which all other windows are opened. Sadly this will make your app startup really slow. But it can even be done in background, while the user decides what to do next.


How does Android handle static classes? In particular, if I declare a static variable like this: private static boolean someBoolean = true; ... // Somewhere else in the code I do this: ...

I am a SolrJ beginner and want to find out whats the fastest way to determine if an document with an unique ID exists? I don't need the document, I just want to find out if it is already in the index....

I have a Validator interface which provides a isValid(Thing) method, returning a ValidationResult which contains a boolean and a reason message. I want to create a ValidatorAggregator implementation ...

I'm stuck. Coming from C++ I thought this would simply work, but it does not. Can you please give me an advice? I will try to not end up with kind of creation method in each class used for T. public ...