A more-than-minimal JVM written in Go.
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.