zhou533 / jvm.go

A JVM written in GO...

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

jvm.go

A JVM written in Go. jvm.go Logo

Introduction

jvm.go is a new JVM (which is far from complete) programmed in Go. The main purpose of this project is learning Go and the JVM. So the number one goal of the project is readability of code. The basic idea is to just implement the core JVM, and use rt.jar (from OpenJDK) as its class library. The garbage collector is implemented by directly using Go’s GC. For me, the hardest part is Thread and ClassLoader.

My dev environment

  • Mac OS X 10.10.2
  • Java 1.8.0_31
  • Go 1.4

Build jvm.go

go get github.com/zxh0/jvm.go/jvmgo

Run jvm.go

Download zulu1.8.0_31-8.5.0.1-macosx.zip and unzip it to somewhere, Copy jvmgo from $GOPATH/bin/ into unzipped folder (Zulu is a certified build of OpenJDK that is fully compliant with the Java SE standard.)

cd path/to/zulu1.8.0_31-8.5.0.1-macosx
jvmgo -cp path/to/jars:path/to/classes HelloWorld

Example

Create a Java source file, Main.java:

public class Main {

    public static void main(String []args){
        String val = "hello world";
        if(args != null && args.length > 0){
            val = args[0];
        }
        System.out.println(val);
    }
}

Compile Main.java, which will generate Main.class:

javac Main.java

Run with jvmgo:

jvmgo Main

Output:

hello world

About

A JVM written in GO...


Languages

Language:Go 86.3%Language:Java 13.6%Language:JavaScript 0.0%