A more-than-minimal JVM written in Go.
This overview gives the background on this project, including its aspirations and the features that it supports. The remaining pages discuss the basics of JVM operation and, where applicable, how Jacobin implements the various steps, noting any items that would be of particular interest to JVM cognoscenti. I’ve included references to the official JVM docs, where I can both as a reference for you, the reader, and for the Jacobin team’s easy reference.
Intended feature set:
- Java 11 functionality, but…
- No JNI (Oracle intends to replace it; see JEP 389)
- No security manager (Oracle intends to remove it; see JEP 411)
- No JIT
- Somewhat less stringent bytecode verification
What we’ve done so far and what we need to do:
- Gets options from the three environment variables. Details here
- Parses the command line; identify JVM options and application options
- Responds to most options listed in the
- Handling JAR files
- Handling @files (which contain command-line options)
- Parsing the classpath
- Correctly reads and parses basic classes
- Extracts bytecode and params needed for execution
- Handle more-complex classes
- Handle interfaces
- Handle arrays
- Handle inner classes
- Automate loading of core Java classes (Object, etc.)
Verification, Linking, Preparation, Initialization
- Performs integrity check bytecode is correct.
This is the focus of current coding work
- Linking and verification
Not started yet
GC is handled by the golang runtime, which has its own GC
The overview page carries a right-side panel that expresses our thanks to vendors and programmers who have made the Jacobin project possible. They are many and we are deeply grateful to them.