https://github.com/chaoyangnz/zava
Mini Java VM in Zig
https://github.com/chaoyangnz/zava
bytecode java java-8 jvm zig
Last synced: about 1 year ago
JSON representation
Mini Java VM in Zig
- Host: GitHub
- URL: https://github.com/chaoyangnz/zava
- Owner: chaoyangnz
- Created: 2022-08-23T08:56:50.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2024-08-12T09:20:38.000Z (almost 2 years ago)
- Last Synced: 2025-03-18T13:15:37.067Z (about 1 year ago)
- Topics: bytecode, java, java-8, jvm, zig
- Language: Zig
- Homepage:
- Size: 52.8 MB
- Stars: 11
- Watchers: 3
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-zig - zava🗒️Java VM / bytecode interpreter in Zig
README
# 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](https://github.com/chaoyangnz/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](https://docs.oracle.com/javase/specs/jvms/se8/html/) and it is supposed to be compatible with Java 8 bytecode.
---
> \* JAVA is a trademark of Oracle America, Inc.
## Roadmap
Feature:
- [x] type system definition
- [x] class file parser
- [x] instructions interpretion
- [x] native methods bridge to support HelloWorld
- [x] class loading
- [x] bootstrap class loader
- [x] user defined class loader
- [x] string pool
- [x] 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](https://github.com/chaoyangnz/zava/wiki/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
```

## 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