Skip to content

chaoyangnz/zava

Repository files navigation

zava

Mini Java VM in Zig v0.13.0

What it is

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.

Roadmap

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

Get started

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

demo

Debugging

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