Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fernandezseb/experimental-vigurvm
A simple JVM, for learning purposes
https://github.com/fernandezseb/experimental-vigurvm
classfile hotspot java java-8 jvm
Last synced: 2 months ago
JSON representation
A simple JVM, for learning purposes
- Host: GitHub
- URL: https://github.com/fernandezseb/experimental-vigurvm
- Owner: fernandezseb
- License: gpl-2.0
- Created: 2023-12-07T22:11:22.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2024-08-24T20:18:32.000Z (4 months ago)
- Last Synced: 2024-09-30T13:04:29.672Z (3 months ago)
- Topics: classfile, hotspot, java, java-8, jvm
- Language: C++
- Homepage:
- Size: 20.1 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# VigurVM
![Logo of the project, showing a simple drawing inspired by a famous windmill in Vigur, Iceland](Vigur_logo.svg)
A simple java virtual machine made for learning purposes.
## Goal and scope
### VigurVM
The goal of this project is to be a simple to understand C++ implementation of a Java Virtual Machine, in order to learn more about Java and C++.
(Because I haven't worked professionally with C++ yet.)The goal is **not** to be reliable, fast, or memory efficient, or even feature complete.
Even though it is not set in stone, I will be trying to implement as much features as possible of JDK 8, in the free time that I have.### ClassDump
In the [/tools/ClassDump](/tools/ClassDump) subdirectory is a custom tool similar to javap that shares some code with VigurVM. (Although there is not much reuse of code at the moment between VigurVM and the ClassDump tool. This will also happen over time.)
The development of ClassDump is less important but will slowly continue alongside with VigurVM.
For any further information about this project, please refer to the README in the project's subdirectory [here](/tools/ClassDump).## Current state
Some simple programs can work, but some basic things like printing text using the standard System.out PrintWriter doesn't work yet.
The current goal is to get all the instructions, and native code working to get the System.out PrintWriter Object created, as well as all the requirements for this Object.
And get the output connected to the user's standard out.
Alongside that, there are still some major things that need to be done:* Implement [class file verification](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.10)
* Implement more [instructions](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html) (and improve the already created ones)
* Implement a proper garbage collector infrastructure and a simple garbage collector
* Support [custom ClassLoaders](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html#jvms-5.3.2) (Now only the boostrapping classloader works)
* Implement multithreading logic in VM
* Implement full [Format Checking](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.8)