# jjvm **Repository Path**: sxudong/jjvm ## Basic Information - **Project Name**: jjvm - **Description**: Java手写JVM虚拟机,此项目的引用 http://www.jianshu.com/p/4d81465c2fb8 大牛的作品。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-11-30 - **Last Updated**: 2024-08-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JJvm 这是一个Java实现的JAVA虚拟机,它会非常简单,实际上简单的只够运行HelloWorld。虽然简单,但尽量符合 JVM 标准,目前主要参考依据是[《Java虚拟机规范 (Java SE 7 中文版)》](http://www.iteye.com/topic/1117824)。 关于此项目的说明,[详见此文](http://www.jianshu.com/p/4d81465c2fb8)。 项目地址:https://github.com/caoym/jjvm ## 运行 先写一个HelloWorld,代码如下: ```java package org.caoym; public class HelloWorld { public static void main(String[] args){ System.out.println("Hello World"); } } ``` 可以通过以下命令运行: ```shell $ java /home/myclasspath org.caoym.jjvm.JJvm org.caoym.HelloWorld Hello World ``` ## 可运行的示例 [用于测试 JJvm 的示例代码可在此处下载](https://github.com/caoym/jjvm-samples) ```angular2html PS F:\code\jjvm\target\clas > org/caoym/samples/sample1/HelloWorld.main@0:GETSTATIC > org/caoym/samples/sample1/HelloWorld.main@1:LDC > org/caoym/samples/sample1/HelloWorld.main@2:INVOKEVIRTUAL Hello World > org/caoym/samples/sample1/HelloWorld.main@3:RETURN ``` ```angular2html PS F:\code\jjvm\target\classes> java org.caoym.jjvm.JJvm F:\code\jjvm\target\classes org.caoym.samples.sample2.Main Girl > org/caoym/samples/sample2/Main.@0:NEW > org/caoym/samples/sample2/Main.@1:DUP > org/caoym/samples/sample2/Main.@2:LDC > org/caoym/samples/sample2/Main.@3:INVOKESPECIAL > org/caoym/samples/sample2/Speaker.@0:ALOAD_0 > org/caoym/samples/sample2/Speaker.@1:INVOKESPECIAL > org/caoym/samples/sample2/Speaker.@2:ALOAD_0 > org/caoym/samples/sample2/Speaker.@3:LDC > org/caoym/samples/sample2/Speaker.@4:PUTFIELD > org/caoym/samples/sample2/Speaker.@5:ALOAD_0 > org/caoym/samples/sample2/Speaker.@6:ALOAD_1 > org/caoym/samples/sample2/Speaker.@7:PUTFIELD > org/caoym/samples/sample2/Speaker.@8:RETURN > org/caoym/samples/sample2/Main.@4:PUTSTATIC > org/caoym/samples/sample2/Main.@5:RETURN > org/caoym/samples/sample2/Main.main@0:GETSTATIC > org/caoym/samples/sample2/Main.main@1:ALOAD_0 > org/caoym/samples/sample2/Main.main@2:ICONST_0 > org/caoym/samples/sample2/Main.main@3:AALOAD > org/caoym/samples/sample2/Main.main@4:INVOKEINTERFACE > org/caoym/samples/sample2/Speaker.helloTo@0:GETSTATIC > org/caoym/samples/sample2/Speaker.helloTo@1:NEW > org/caoym/samples/sample2/Speaker.helloTo@2:DUP > org/caoym/samples/sample2/Speaker.helloTo@3:INVOKESPECIAL > org/caoym/samples/sample2/Speaker.helloTo@4:ALOAD_0 > org/caoym/samples/sample2/Speaker.helloTo@5:GETFIELD > org/caoym/samples/sample2/Speaker.helloTo@6:INVOKEVIRTUAL > org/caoym/samples/sample2/Speaker.helloTo@7:LDC > org/caoym/samples/sample2/Speaker.helloTo@8:INVOKEVIRTUAL > org/caoym/samples/sample2/Speaker.helloTo@9:ALOAD_1 > org/caoym/samples/sample2/Speaker.helloTo@10:INVOKEVIRTUAL > org/caoym/samples/sample2/Speaker.helloTo@11:INVOKEVIRTUAL > org/caoym/samples/sample2/Speaker.helloTo@12:INVOKEVIRTUAL Hello Girl > org/caoym/samples/sample2/Speaker.helloTo@13:RETURN > org/caoym/samples/sample2/Main.main@5:RETURN PS F:\code\jjvm\target\classes> ``` 注意 maven 配置: ```angular2html jdk.tools jdk.tools 1.8 system C:/Java/jdk1.8.0_172/lib/tools.jar jdk.rt jdk.rt 1.8 system C:/Java/jdk1.8.0_172/jre/lib/rt.jar ```