Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chaoyangnz/zava
Mini Java VM in Zig
https://github.com/chaoyangnz/zava
bytecode java java-8 jvm zig
Last synced: 3 months 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 (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-08-12T09:20:38.000Z (6 months ago)
- Last Synced: 2024-10-21T04:01:21.744Z (3 months ago)
- Topics: bytecode, java, java-8, jvm, zig
- Language: Zig
- Homepage:
- Size: 52.8 MB
- Stars: 9
- 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 integrationNon-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
```![demo](demo.gif)
## 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