Excelsior jet standard vs. pro editions

I noted on some older threads on the forum here that there was a key difference in function between the standard and pro versions of Jet. That is, only pro produced an exe independent of needing a jvm. Is that still the case? I note on the excelsior website that the feature matrix shows all three versions (ent, pro, std) have AOT compiling, described as follows:

Highly optimizing compiler that runs on a developer system. It translates Java bytecode instructions into optimized x86 (IA-32) code and converts your Java application’s classes and jars into conventional Windows EXE and DLL files or Linux executables and shared objects.

Wondering if perhaps now standard is a viable option, whereas before it sounded like only pro was.

You are mixing “JVM” and “JRE”.

The Excelsior JET Runtime contains, and has always contained a JVM, so applications compiled with it never required a second JVM. But, prior to version 4.0 only the applications not using Swing/AWT and compiled with the Professional Edition could work without the JRE. To cut the long story short, the reason was not the JVM, but the standard library.

The situation is indeed much different now. JRE is never required anymore because we have since licensed Java from Sun and included the standard Java SE library with Excelsior JET.

However, I would still recommend you stick with the Professional Edition, for two reasons:

  1. It provides the capabilities to improve the startup time and reduce the download size of compiled applications.

  2. It is available under a special licensing program. Under certain circumstances, it may cost you less than the list price of the Standard Edition.

I’m still waiting for an ARM backend, Dmitry :slight_smile: I think there’s a huge pile of cash in there… I’d buy an ARM JET for $10k right now.

Cas :slight_smile:

If you think you would still want it in 2012, find 49 more people like you, give us half the money up front and put the rest in escrow. :slight_smile:

Thanks very much for your response. A follow-up, if I may:

I’m confused now about exactly what is produced from Excelsior Jet. I had thought that a Java application would be compiled down to native code, and that that native code (exe) consisted of only the bytes needed to run the exe on a given OS. Is that accurate?

Is it the case that the exe produced also contains a JVM? Or is it just that the JVM is present in the Jet tool, and is used when creating the native exe?

Sorry for my simplistic questions – I am a confessed newbie. :slight_smile:

What Excelsior JET does is it compiles Java bytecode down to native code. But your application remains a Java application, so it needs all the other facilities provided by a JVM: garbage collection, threading, JNI, etc. So yes, there is a JVM in the runtime.

Then, your application may create classes on the fly (e.g. dynamic proxies), or load classes that were not known at the time of native compilation (e.g. third-party plugins.) In order to handle those classes, the underlying JVM must provide either an interpreter (as GCJ does) or a JIT compiler (as Excelsior JET does). In fact, you may compile just the class containing the main() method and leave the rest to the runtime…

In other words, Excelsior JET is technically a complete Java SE implementation. It just enables you to precompile the known classes down to native code prior to deployment. It also has a couple of interesting deployment options to help you reduce the download size and disk footprint of your Java apps.

See Excelsior JET Technology Overview for details.