Java Glossary : JET

CMP home Java glossary home Menu no menu Last updated 2004-06-28 by Roedy Green ©1996-2004 Canadian Mind Products

Java definitions: 0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

You are here : home : Java Glossary : J words : JET.

logoJET
Excelsior's optimiser, native code generator, created in Novosibirsk Russia.

See the benchmarks.

How does it work? It needs somebody else's compiler such as Sun's to produce the byte codes, then it converts class files to a native Windows EXE file. Why is it so fast? The professional version is able to determine if methods overriding a particular non-final method are never actually called in a particular application and therefore inline the method or generate direct calls of it. JET will allocate some local objects on the stack. It can eliminate a remarkable amount of code that is not necessary, e.g. redundant checks for null by both caller and callee. Jet does loop versioning, i.e. it creates a special safe version of loop code used when it knows that various exceptions can't possibly happen, e.g. subscripts out of range. This way it can avoid much of the overhead of the Java safety net.

There are now three versions described in their FAQ. The professional version adds JetPerfect the global optimiser and the ability to dynamically load classes that were not known at compile time. It does this with a native windows application, JIT-style, stripped down class file compiler shipped with the application, not an interpreter. You can use class.forName in all three versions if there is a precomplied DLL matching the class name. It further lets you generate EXEs that don't require a JRE installed for non-GUI apps.

It can also work with IBM's SWT GUI. Then you don't need the JRE and can create GUI apps that will fit on a single floppy.

I have been very impressed with the Jet people. They have answered questions both in newsgroups and via email even though I never paid them a cent. They have been responsive both to bug reports and suggestions to improve their website and documentation. Ironically, I have had better support from them than you typically get when you have a paid support contract.

Optimising compilers are notoriously buggy, yet Jet seem to generate flawless code time after time. I have never encountered any wrong code generated.

If you buy the Jet compilers via the buy buttons below, I get a 20% commission. This helps support this website. It costs you exactly the same. You deal directly with Excelsior/Jet; it is just I get the referral credit. Payment is not handled by PayPal, but by regsoft.com via regsoft. RegSoft accept any credit cards and purchase orders and take a 10% cut themselves.

You can download an evaluation copy then purchase later. The evaluation copy requires that you have Jet and the full JDK installed to run the executables. Other than that, it is fully functional.

Purchase Excelsior Jet
Excelsior JET 3.15, Personal Edition
(Download, one Individual License, no support)
free download
Excelsior JET 3.15, Standard Edition
(Download, one Individual License, Standard Support)
$200.00 USD buy
Excelsior JET 3.15, Professional Edition
(Download, 1 Individual License, Standard Support, No Maintenance)
$750.00 USD try buy
Excelsior JET 3.15, Professional Edition with Maintenance
(download, CD-ROM, 1 Individual License, Standard Support, 1 Year Maintenance Contract)
$950.00 USD buy
Excelsior JET 3.15, Professional Edition with Premium Support and Maintenance
(download, CD-ROM, 1 Individual License, 1 Year Premium Support and Maintenance Contract)
$2300.00 USD buy
You can get started developing right away with the evaluation version. You can download the production version within one business day of your credit card being approved. Then, if you ordered a CD, that too will be mailed to you first class, usually from Switzerland so it should arrive in a few days.

You use it much as is it were java.exe. To create an exe file from *.class files you type:

rem compile without a jar
jc com/mindprod/mypackage/MyClass

rem compile a jar
jc MyClass.jar

rem or run the total control gui version with
launchpad

to convert the class files to an exe file.

Jet now lets you support multiple JVMs at once.

It also comes with an improved JetPack for bundling up self-installing applications. It allows:

It is very easy to use. Just fill in the blanks. The only important thing it does not do is automatically fetch the JVM if the customer does not already have it.

When you first install Jet it has to compile the entire JVM. This takes about an hour on modern machines or over twelve hours on clunkers like mine.

Jet has another use. when you compile a jar file it tells you if any dependent classes are missing. This is a lot quicker than running the program and waiting for an exception when you execute the code that needs the missing class.

Sometimes Jet is a little bit behind Sun in supporting the latest JVM. Jet supports the JDK 1.4.2_01 and well as earlier ones.

JetPerfect

JetPerfect is the global optimiser that comes with the Professional Edition. It in not a separate program, but a rather awkward-to-use command line option on the jc.exe compiler. You can't use it within the jet.exe GUI project interface. It globally optimises not only your code, but also the Sun code, including just the classes needed into one ~3 MB executable. The advantage of this is you don't need to fool around with installing JREs, JET or DLLs on the runtime client system. The executable is fully standalone. To use this feature you
  1. Insert a line into your *.prj project file of the form !module xxx.usg where xxx.exe is the name of the final executable. It goes in just after the other !module commands.
  2. Add -IncludeTimeZoneInfo+ to the *.prj project file to force the code for all timezones, not just the ones you test with, to be included. Otherwise you will have the embarrassment of your code only working for customers in the same timezone as you are.
  3. Add -IncludeLoggingAPI- to the *.prj to indicate you are not using logging.
  4. Add -IncludeDetectedLocales+ to the *.prj project file and possibly manually add some unexercised locales as well.
  5. Then you compile like this:

    set JETVMPROP=-Djet.usage.list -Djet.default.classloader:bootstrap
    jc =project xxx
    

    Where xxx.prj is the name of your project file.

  6. Then you exercise the app, running it while Jet notices what sort of classes you load and Class.forName games you play, accumulating statistics in a file called xxx.usg.
  7. Then you may manually check or edit the *.usg file to make sure it has all the classes you might want to load dynamically. You can exercise the app many times, and sort the xxx.usg entries to help keep track.
  8. Then you recompile a second time, like this, to create the JetPerfect executable:

    jc =project xxx +perfect
    

  9. Make sure you test your exe on a variety of virgin machine to flush out any missing class problems.
The disadvantage of JetPerfect is that compilation is considerably slower. You use JetPerfect only just before deployment.

Downside

The scheme for distributing the support DLLs, and compiled JREs seems brittle. Jet works beautifully on my own machine, but sometimes mysteriously stops working on other machines, or never works, when I deploy. I get error messages saying that DLLs have gone missing or that the Jet runtime has not been installed. It is hard to remotely troubleshoot such problems with an unsophisticated customer. With either distribution scheme, the files you send people are 3 to 20 MB, rather than the tiny jars I would send otherwise. I have to post the distributables on my website for pickup rather than sending by email.

It installs the Jet runtime in yourappdir/JET RT and any private copy of the JRE in yourappdir/JRE. It does not install Jet itself, so that if some other developer is using Jet, there will be duplicate copies of the Jet runtime. You would think this mechanism which does not require the registry for Jet to find its files would be robust, but in practice sometimes it cannot. I still don't understand how it fails.


CMP logo
CMP_home
home
Canadian Mind Products CSS
HTML Checked!
ICRA ratings logo
mindprod.com IP:[24.87.56.253]
Your IP:[80.134.30.163]
You are visitor number 4203.
Please send errors, omissions and suggestions
to improve this page to Roedy Green.
You can get a fresh copy of this page from: or possibly from your local J: drive mirror:
http://mindprod.com/jgloss/jet.html J:\mindprod\jgloss\jet.html