Skip to content

RobertObkircher/SchokoVM

Folders and files

NameName
Last commit message
Last commit date
Jun 22, 2021
Aug 7, 2021
Aug 12, 2021
Aug 8, 2021
Jun 22, 2021
Aug 7, 2021
Apr 24, 2021
Aug 7, 2021
Aug 7, 2021
Aug 7, 2021
Aug 7, 2021
Jun 20, 2021
Aug 12, 2021
Aug 12, 2021
Jun 22, 2021
Aug 12, 2021
Aug 7, 2021

Repository files navigation

SchokoVM

Run tests

A java bytecode interpreter that was implemented by two students for the course on Abstract Machines at the TU Wien.

The name was inspired by cacao jvm.

Slides of our presentation: presentation.pdf

Working:

  • Load class and jar files.
  • All instructions except invokedynamic.
  • Objects/arrays.
  • Exceptions.
  • Native method calls.

Partially:

  • OpenJDK 11 Class Library (System.out.println works).
  • Some functions are still missing to use libjvm with java -XXaltjvm=.
  • Primitive garbage collection.

Not implemented:

  • Invokedynamic (String concatenation).
  • Multi-threading / synchronized.
  • Custom class loaders.
  • Bytecode verification.

Build and test

The repository contains run configurations for the CLion IDE.

Command line instructions:

mkdir build
cd build
cmake ..
make -j
ctest -j 12

Ctest uses the script compare.sh to compare SchokoVM to the system JDK.

Dependencies

  • Linux or macOS

  • OpenJDK 11:

    If CMake finds the wrong version, you can set the JAVA_HOME environment variable.

  • libzip, libdl, libffi

OpenJDK 11 sources

You can optionally download the source code for OpenJDK 11 with this script: cd jdk && ./download.sh. This is not necessary to compile the project.

Notes

Some bullet points about the jvm specification can be found in JvmSpecNotes.md.