{"id":13694733,"url":"https://github.com/guxingke/mini-jvm","last_synced_at":"2025-09-08T14:37:39.891Z","repository":{"id":36263165,"uuid":"213353848","full_name":"guxingke/mini-jvm","owner":"guxingke","description":"使用 JDK8 实现 JVM(Java Virtual Machine)","archived":false,"fork":false,"pushed_at":"2023-07-31T09:21:59.000Z","size":7583,"stargazers_count":715,"open_issues_count":5,"forks_count":97,"subscribers_count":33,"default_branch":"master","last_synced_at":"2025-05-24T05:04:08.644Z","etag":null,"topics":["interpreter","jvm","jvm-bytecode","jvm8"],"latest_commit_sha":null,"homepage":"https://jvm.guxingke.com/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/guxingke.png","metadata":{"files":{"readme":"README.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}},"created_at":"2019-10-07T10:25:11.000Z","updated_at":"2025-05-16T07:25:52.000Z","dependencies_parsed_at":"2022-07-31T23:38:50.080Z","dependency_job_id":"36121f72-9435-4a4c-90e6-38f7fa8932bc","html_url":"https://github.com/guxingke/mini-jvm","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/guxingke/mini-jvm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guxingke%2Fmini-jvm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guxingke%2Fmini-jvm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guxingke%2Fmini-jvm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guxingke%2Fmini-jvm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/guxingke","download_url":"https://codeload.github.com/guxingke/mini-jvm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guxingke%2Fmini-jvm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274199616,"owners_count":25239883,"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","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["interpreter","jvm","jvm-bytecode","jvm8"],"created_at":"2024-08-02T17:01:39.287Z","updated_at":"2025-09-08T14:37:39.801Z","avatar_url":"https://github.com/guxingke.png","language":"Java","funding_links":[],"categories":["Java","JVM实现"],"sub_categories":[],"readme":"# [Mini-jvm](https://jvm.guxingke.com) \n![CircleCI](https://img.shields.io/circleci/build/github/guxingke/mini-jvm/master?style=for-the-badge\u0026token=f20bab2e6e06b66e96f9440f31fa391524a8ed60)![GitHub](https://img.shields.io/github/license/guxingke/mini-jvm?style=for-the-badge)![GitHub commit activity](https://img.shields.io/github/commit-activity/w/guxingke/mini-jvm?style=for-the-badge)![GitHub last commit](https://img.shields.io/github/last-commit/guxingke/mini-jvm?style=for-the-badge)\n------\n使用 Java 8 实现 JVM\n\n\u003cdiv align=center\u003e\u003cimg height=\"300px\" width=\"300px\" src=\"docs/assets/imgs/mini-jvm-logo.png\"/\u003e\u003c/div\u003e\n\n## 特性\n\n### 元循环(Metacircular)\nmini-jvm on mini-jvm on hotspot. 可以在 mini-jvm 里运行 mini-jvm . \n```\n$ java -jar jvm-core/target/mini-jvm.jar -jar jvm-core/target/mini-jvm.jar -jar test.jar\n# Hello World!\n```\n\n## 动机\n\n1. 尝试了解 JVM 原理, Learning by doing\n2. 纸上得来终觉浅, 实践\n3. 用简单的代码帮助 Javaer 理解 JVM\n\n## 快速体验 [Macos 用户]\n\n### Hello world\n\n```bash\nbrew tap guxingke/repo \u0026\u0026 brew install mini-jvm\n\ncat \u003c\u003cEOF \u003e HelloWorld.java\npublic class HelloWorld {\n  public static void main(String[] args) {\n    if (args.length == 0) {\n      System.out.println(\"hello\");\n      return;\n    }\n\n    for(int i = 0; i \u003c args.length; i ++) {\n      System.out.println(args[i]);\n    }\n  }\n}\nEOF\n\njavac HelloWorld.java\n\n# no args\nmini-jvm HelloWold\n# =\u003e hello\n\n# with program args\nmini-jvm HelloWold hello mini-jvm\n# =\u003e  hello\n# =\u003e  mini-jvm\n\n# 输入 mini-jvm -help 了解更多.\n```\n\n## 快速体验 [其他操作系统]\n\n需要自行下载打包. [Dev](https://jvm.guxingke.com/#/dev)\n\n## 规划\n- Class 文件解析 90%\n- 字节码执行 90%\n- 类加载 90%\n- 方法调用 90%\n- 实例化 90%\n- Native 方法 90%\n- 异常处理 60%\n- self-booting 70%\n\n## 局限\n1. 不实现 GC\n2. 不实现多线程\n\n## 变更记录\n- 实现了元循环(Metacircular)\n- 反射特性基本可用\n- 增加简单的调试器 bin/jdb.\n- 支持 Lambda 调用, closure, currying 可用.\n- Hello World 级别可用\n\n## 个人记录\n- [如何构建你自己的 JVM (2) Hello World](https://www.guxingke.com/how-to-build-your-own-jvm-3/)\n- [如何构建你自己的 JVM (1) 解释器](https://www.guxingke.com/how-to-build-your-own-jvm-2/)\n- [如何构建你自己的 JVM (0) 概述](https://www.guxingke.com/how-to-build-your-own-jvm-1/)\n- [用 Java 实现一个简单的虚拟机 ?](https://www.guxingke.com/mini-jvm-intro/)\n\n## 建议\n- 在JDK1.8.0_121环境下发现编译不过的情况，详情见[#25](https://github.com/guxingke/mini-jvm/issues/25)，本项目的目的是学习JVM，为了项目足够小，清晰和易于理解，并不打算做各种适配工作，建议大家在MacOSX，Maven 3.3+,JDK 1.8.0_192+下学习；\n\n## 联系作者\n\u003cdetails\u003e\n\u003csummary\u003e微信群\u003c/summary\u003e\n\u003cp\u003e加个人微信 `guxingke_`，备注 mini-jvm 拉你进群。\u003c/p\u003e\n\n\u003cimg style=\"margin:0 auto;display:block;\" src='docs/assets/imgs/wechat.jpeg'\u003e\u003c/img\u003e\n\u003c/details\u003e\n\n## 参考\n- [The Java® Virtual Machine Specification](https://docs.oracle.com/javase/specs/jvms/se8/html/)\n- [JVM 字节码从入门到精通](https://juejin.im/book/5c25811a6fb9a049ec6b23ee/)\n- [自己动手写Java虚拟机](https://book.douban.com/subject/26802084/)\n\n## 其他\n\n新项目地址 [mini-jvm_x](https://github.com/mini-mo/mini-jvm_x), 使用多种语言实现。\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguxingke%2Fmini-jvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguxingke%2Fmini-jvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguxingke%2Fmini-jvm/lists"}