{"id":13630023,"url":"https://github.com/y1yang0/yvm","last_synced_at":"2025-04-09T10:10:20.323Z","repository":{"id":138060926,"uuid":"104560011","full_name":"y1yang0/yvm","owner":"y1yang0","description":"[yvm] low performance garbage-collectable jvm","archived":false,"fork":false,"pushed_at":"2023-02-15T12:04:14.000Z","size":3989,"stargazers_count":253,"open_issues_count":5,"forks_count":57,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-04-02T08:12:31.709Z","etag":null,"topics":["classloader","cpp14","garbage-collector","homemade","java","java-virtual-machine","jvm","mark-and-sweep"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/y1yang0.png","metadata":{"files":{"readme":"README.ZH.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-09-23T10:36:00.000Z","updated_at":"2025-03-11T05:12:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"f55b0b78-261b-4368-8c54-6fefa3655c4d","html_url":"https://github.com/y1yang0/yvm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y1yang0%2Fyvm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y1yang0%2Fyvm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y1yang0%2Fyvm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y1yang0%2Fyvm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/y1yang0","download_url":"https://codeload.github.com/y1yang0/yvm/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248018061,"owners_count":21034048,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["classloader","cpp14","garbage-collector","homemade","java","java-virtual-machine","jvm","mark-and-sweep"],"created_at":"2024-08-01T22:01:27.533Z","updated_at":"2025-04-09T10:10:20.305Z","avatar_url":"https://github.com/y1yang0.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# YVM\n## 简介\n\n\u003e [中文](./README.ZH.md) | [English](./README.md)\n\nYVM是用C++写的一个玩具Java虚拟机，现在支持Java大部分功能，以及一个基于标记清除算法的并发垃圾回收器。YVM的实现遵守[Java虚拟机规范 8](https://docs.oracle.com/javase/specs/jvms/se8/jvms8.pdf)。时间有限没有为所有组件补充测试，另外Java语言的特性并没有完全覆盖，但是目前足够让我开心了，就这样了。如果你发现了bug，或者感兴趣想参与，请直接开Issue反馈或者提Pull Request贡献代码，谢谢。\n\n## 构建和运行\n```bash\n# Note, C++14 is required at least.\n$ cd yvm\n$ cmake .\n$ make\n$ ./yvm\nUsage:\n  yvm --lib=\u003cpath\u003e \u003cmain_class\u003e\n\n      --lib=\u003cpath\u003e     Tells YVM where to find JDK classes(java.lang.String, etc)\n      \u003cmain_class\u003e     The full qualified Java class name, e.g. org.example.Foo\n$ ./yvm --lib=/path/to/yvm/bytecode ydk.test.QuickSort\n0 1 1 1 1 1 4 4 4 5 6 7 7 9 9 9 12 74 96 98 8989 \n```\n\n## 已实现特性\n高级特性逐步支持中，可以开Issue提议或者直接PR。已实现的预言特性主要有下面这些：\n+ Java基本算术运算，流程控制语句，面向对象。\n+ [RTTI](./javaclass/ydk/test/InstanceofTest.java)\n+ [字符串拼接(+,+=符号重载)](./javaclass/ydk/test/StringConcatenation.java)\n+ [异常处理(可输出stacktrace)](./javaclass/ydk/test/ThrowExceptionTest.java)\n+ [创建异步线程](./javaclass/ydk/test/CreateAsyncThreadsTest.java)\n+ [Synchronized(支持对象锁)](./javaclass/ydk/test/SynchronizedBlockTest.java)\n+ [垃圾回收(标记清除算法)](./javaclass/ydk/test/GCTest.java)\n\n![](./docs/snapshot.jpg)\n\n示例Java小程序参见[here](javaclass/ydk/test/).\n\n## 开发指南\n### 1. 工作原理\n1. `loadJavaClass(\"org.example.Foo\")`\n    - findJavaClass查找已加载的类\n    - 查找失败，则从--lib路径加载，加载后存放到ClassSpace\n2. `linkJavaClass(\"org.example.Foo\")`\n    - 默认值初始化static字段\n3. `initJavaClass(\"org.example.Foo\")`\n    - Invoke `org.example.Foo.\u003cclinit\u003e`\n4. `invokeByName(\"org.example.Foo\",\"main\",\"([Ljava/lang/String;)V\")`\n    - 初始化执行栈\n    - 从JavaClass查找main方法\n    - `execByteCodede`\n        - 在模拟的栈上解释执行字节码\n        - 如果遇到`invoke*`系列字节码，则递归调用`execByteCode`\n\n### 2. 代码结构\n```bash\nroot@ubuntu:~/yvm/src$ tree .\n.\n├── classfile               \n│   ├── AccessFlag.h        # 类，字段，方法的访问标志\n│   ├── ClassFile.h         # .class字节码对应的结构体\n│   └── FileReader.h          # 读取.class文件\n├── gc\n│   ├── Concurrent.cpp      # 并发组件\n│   ├── Concurrent.hpp\n│   ├── GC.cpp              # 垃圾回收\n│   └── GC.h\n├── interpreter\n│   ├── CallSite.cpp        # 调用点对象，描述具体的调用\n│   ├── CallSite.h\n│   ├── Internal.h          # 虚拟机内部通用类型\n│   ├── Interpreter.cpp     # 代码执行引擎\n│   ├── Interpreter.hpp\n│   ├── MethodResolve.cpp   # 调用方法解析\n│   └── MethodResolve.h\n├── misc\n│   ├── Debug.cpp            # 调试组件\n│   ├── Debug.h\n│   ├── NativeMethod.cpp    # Java native方法实现\n│   ├── NativeMethod.h\n│   ├── Option.h            # 参数和配置\n│   ├── Utils.cpp           # 工具组件\n│   └── Utils.h\n├── runtime\n│   ├── JavaClass.cpp       # 虚拟机中的类表示\n│   ├── JavaClass.h\n│   ├── JavaException.cpp   # 异常处理\n│   ├── JavaException.h\n│   ├── JavaFrame.cpp       # 运行时栈帧\n│   ├── JavaFrame.hpp\n│   ├── JavaHeap.cpp        # 虚拟机堆，管理对象\n│   ├── JavaHeap.hpp\n│   ├── JavaType.h          # 虚拟机中的Java类表示\n│   ├── ClassSpace.cpp      # 方法区，管理JavaClass\n│   ├── ClassSpace.h\n│   ├── ObjectMonitor.cpp   # synchronized语义实现\n│   ├── ObjectMonitor.h\n│   ├── RuntimeEnv.cpp      # 运行时结构定义\n│   └── RuntimeEnv.h\n└── vm\n    ├── Main.cpp             # 命令行解析\n    ├── YVM.cpp              # 虚拟机抽象。\n    └── YVM.h\n```\nWiki和源码中有很多详细的开发文档，如果想探索关于`YVM`的更多内容，请移步浏览.\n\n## 开源协议\n所有代码基于[MIT](./LICENSE)协议\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fy1yang0%2Fyvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fy1yang0%2Fyvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fy1yang0%2Fyvm/lists"}