How Excelsior JET Works

Excelsior JET enables you to accelerate your Java applications, secure them against reverse engineering, create a complete application setup, and distribute your Java software products without deployment dependencies such as the Java Runtime Environment (JRE). It may also substantially reduce the download size and disk footprint of your Java applications.

How does Excelsior JET do all these things for you?

What you use now

Your Java application is delivered in a portable bytecode form and runs on top of the Java Virtual Machine (JVM). The JVM is a part of the JRE that should be installed on every system on which your application runs.

The JVM executes the application and gradually improves its performance by optimizing the Java code at run time.

Figure 1

Fig 1. JVM warm-up cycle vs. steady performance of a native app

Put simply, when a user launches your application or a consumer turns on your Java-powered device, Java code performance is relatively low. The performance is improved to some extent only after the application has run for a while. Unfortunately, when it is re-started, the entire warm-up cycle gets repeated.

- Is there a direct route to Java performance? Yes.

Suppose you had an automatic tool that optimizes Java code for your target platform before execution. Free of resource constraints inherent to run time optimizers, it processes all the code and optimizes it well.

You feed the application's classes to the tool, which optimizes them for performance and saves the results to disk. Now, you can deploy your Java application in optimized form so that it runs fast from the start on target systems.

What is that automatic tool we are talking about? Read on.

Excelsior JET Optimizer

A Java application typically consists of class files and resource files, such as images, which are packed into one or more jar files.

Using the Excelsior JET Optimizer, you convert the classes into highly optimized x86 or ARM code and create a native executable for Windows, OS X, or Linux. This technique is called Ahead-Of-Time (AOT) compilation.

Figure 2

Now, the original Java classes are no longer required for the application to run.

And you can launch the executable as you would a native application.

The best way to secure your Java classes against reverse engineering is to not distribute them at all. Ahead-Of-Time compilation makes it possible.

Excelsior JET Runtime

Upon startup, the application executable links to the Excelsior JET Runtime, which provides the Java SE API classes (also native compiled) and low-level runtime support routines necessary for Java applications, such as garbage collection.

Figure 3

Now, your Java application runs directly on the underlying hardware.

When the Java code is agressively optimized for the target hardware before execution, applications run at full speed right from the start.

Finally, you can leverage Excelsior JET to create a professional installation for the optimized application.

Excelsior JET Installation Toolkit

With the help of the Excelsior JET Installation Toolkit, you can create a complete installation package that includes your optimized Java application, the Excelsior JET Runtime, and any additional files, like user's documentation, extra utilities, and so on.

Figure 4


The basic deployment procedure is very simple. The created installation package is a self-contained directory that can be installed on target systems by a simple copy operation. Another option is to store it on removable media, such as a flash memory card or USB drive, enabling your end users to run the application without installation.

If necessary, you can wrap the package into Excelsior Installer bundled with Excelsior JET or use another setup generator of your choice.

The JRE need not be installed on target systems for your application to run.

Do not forget to remove the JRE from your application's system requirements!

Now you can ship your server-side and desktop Java applications or Java-powered devices to end users.

Wait, but what about dynamic class loading?

Your Java application may need to load classes that are available only on a target system, downloaded from a remote host, or generated at run time. Examples are dynamic proxies, third-party plug-ins for your application, and JDBC drivers.

How does Excelsior JET cope with that? Easily.

The Excelsior JET Runtime includes a JIT compiler that transparently loads Java classes into the running application!

Figure 5

Optimizer gets smarter, installer gets smaller

One might ask: why do I need this big iron (JET Runtime) including all standard Java classes pre-compiled while my app uses only a few of them?

Very good question.

First, you may be able to leverage Excelsior JET support for Java SE compact profiles — the standard mechanism for excluding the unused parts of Java SE Platform API from the resulting installation package, introduced in Java SE 8. Also, some flavors of Excelsior JET include the Global Optimizer that can compile the classes comprising your application together with the required classes of the Java SE API together into a single executable.

As a result, a complete application setup powered by Excelsior Installer can be substantially smaller than the Oracle JRE alone.

This technique also helps you significantly reduce the disk footprint of your application compared to the Oracle JRE or OpenJDK footprint. It can save a fair bit of valuable space if your Java applications come pre-installed on removable media such as flash memory cards or USB drives.

Show me the numbers!

Figure 6

RSSOwl is a popular open source newsreader, implemented as an Eclipse RCP application. Compared with private JRE packaging, RSSOwl becomes a 40% smaller download and takes 60% less disk space when optimized and packaged with Excelsior JET.

What's next?

First of all, we invite you to download an evaluation copy of Excelsior JET.

Download Your Fully Functional 90-Days Trial Now

You may also wish to take a look at the data sheet that contains the full list of features and benefits Excelsior JET offers