Server applications generally don't use graphical user interfaces, they run for longer periods of time and are usually parallel and thread intensive. This can be fully exploited to gain performance only through a server specific design policy. The main reason is that it allows for easy, rapid development with standard components. Java applications are also hardware independent and can be easily extended or moved when the system scales. This lets the JVM analyze the situation and adapt its behavior to increase speed and efficiency.
Adaptive optimization is the process of detecting and optimizing bottlenecks in a running program.
Traditionally, this has only been applied to code where the program spends a lot of time, but there is nothing stopping us from changing thread scheduling policies, memory management or other aspects of the environment, if we discover that we can speed things up. An adaptively optimizing virtual machine has access to more information about the running program, and can do better optimizations than a statically compiling environment. Another great advantage is that none of the dynamic characteristics of interpreted languages are lost. There are three main reasons. An adaptive optimizer will give you the same high performance for classes dynamically loaded over the net as for classes on local your machine.