jacobin
比Go中写的比最小的JVM更重要的。
地位
预期功能集:
- 运行Java 21班,但是…
- 没有JNI(Oracle打算替换它;请参见JEP 389)
- 没有安全经理(Oracle打算将其删除;请参见JEP 411)
- 没有吉特
- 有些严格的字节码验证
- 不执行密封的类
到目前为止,我们已经做了什么以及我们需要做的事情:
命令行解析
要做:
- 处理@Files(包含命令行选项)
班级加载
- 正确阅读和解析大多数课程
- 提取物字节码和执行所需的参数
- 核心Java类的自动预加载(
Object等) -
java.*JAVA_HOMEjavax.*,jdk.*,sun.* - 处理jar文件
- 处理接口
要做:
- 处理更多复杂的类(通过方法手柄等称为)
- 处理内部类
验证,链接,准备,初始化
- 执行格式检查类文件。
- 执行加载类文件的准备。
- 链接和初始化 – 最少,仅根据执行时间而需要
要做:
- 确认
- 强大的链接和初始化
执行
- 执行除InvokedyManic(包括一维数组)以外的所有字节码
- 静态初始化块
- 投掷和捕捉例外
- 运行本机功能(用GO编写)。详细信息在这里。
要做:
- 方法处理
- 打电话给超类
- 内部和嵌套的班级
- Invokedy nameganic intecode
- 注释
仪器
- 类加载仪器(使用
-trace=cloadi) - 指令级跟踪(使用
-trace=instin Class/Method/cessinditions/size-op-stack for to ecerune to ecute tece of class/trace = size-op-stack size-op-stack in emecute tecections teceptions/size size-stack sections teceptions clast-tacting size-op-stack in emecute tecuntions tece tecuntions teceptions clase-op-stack stack sip-op-stack) - 详细的指令跟踪(使用
trace=verbose以显示-trace=inst中的所有内容,以及每个说明的OP堆栈的内容)
要做:
- 将仪器数据发射到端口,以通过单独的程序阅读/显示。
- 编写一个UI组件以观察执行字节码和各种堆栈中的更改
垃圾收集
GC由Golang Runtime处理,该运行时间有自己的GC
了解代码
可以在Wiki中找到通往代码库的详细路线图。
如果您想测试jacobin
目前,我们不是在寻找测试人员,因为我们知道缺少的功能,并且正在研究它们。在这一点上,测试可能会导致挫败感。但是,如果为了自己的乐趣,您仍然想尝试一下,请在我们的发行页面上查看指示和注意事项。 (如果您想要一些乐趣,请使用-trace:inst Option在jacobin上运行您的程序,并通过不断变化的操作数堆栈内容观看执行Java Bytecodes Whiz。)
我们希望/希望/相信,到今年年底,我们将准备要求感兴趣的用户在实际程序上测试jacobin并与我们分享他们的反馈。
谢谢
该项目的主页在底部带有冗长的注释,向我们的供应商和程序员表示感谢,这些供应商和程序员使jacobin项目成为可能。他们很多,我们深表感谢。
