Mini Java VM in Zig v0.13.0
Zava is a Java* VM implementation in Zig. This is a sister project of Gava which is using Go. The goal of Zava is to implement a couple of features which are not capable of doing by Go, such as GC and fine control of memory allocation.
The reference of the implement is JVM Spec 8 edition and it is supposed to be compatible with Java 8 bytecode.
* JAVA is a trademark of Oracle America, Inc.
Feature:
- type system definition
- class file parser
- instructions interpretion
- native methods bridge to support HelloWorld
- class loading
- bootstrap class loader
- user defined class loader
- string pool
- basic reflection support (Class, Field, Method, Consutructor)
- multi-thread and concurrency
- garbage collector
- profiling and Debugger integration
Non-functional:
- sufficent unit test coverage
- code readability and clear documentation of high-level design
- mini ebook to describe how to evolve a mini VM from scratch
- VSCode debugging extension
Download JDK and extract to jdk
folder.
The default class path is examples/classes
and jdk/classes
, so any classes located in the path can be loaded by zava
.
- HelloWorld
zig build
./zava HelloWorld
A VS code launch.json is configured for your debugging.
And after running the program, a zava.log
is produced to trace the execution.
- info level: only method calls are logged
- debug level: per instruction executions are also logged with the context