There are a few number of tools out there (Excelsior JET, etc.) that claim to transform Java app's into native executables (
*.exe). However it is my understanding that these tools are really just creating native wrappers that invoke/execute
java from a shell or command-line.
If that understanding is incorrect, I don't see how it could be. If a running JVM (
java process) is essentially a high performance interpreter, loading bytecode from Java classfiles on the fly, then I don't see how a Java app (a collection of bytecode files that serve as input to a JVM) could ever be truly converted into an executable.
This is because the JVM process is already a native executable that takes sets of bytecode files as input. To merge those bytecode files and the JVM process into a single, unified native executable doesn't seem possible without completely rewriting the JVM and de-railing from the JVM specification.
So I ask: how do these tools actually "transform" Java class files into a native executable, or do they?