chaoyangnz/zava
Mini Java VM in Zig
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
.
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.