Java的实现…… JVM?

前段时间我找到了MJVM项目。 可悲的是,这个项目已经被作者遗弃了(我通过电子邮件询问了Igor )。

我想知道是否有一个(继续的)开源项目,就像这样在Java中完全实现JVM。

“完全”,我的意思是,不仅要仿效移动设备。

Jikes RVM可能是用Java编写的最着名的JVM实现。 但是,它的最低级实现只包含对“魔术”接口的静态方法调用,该接口由编译器专门处理并转换为本机代码。

Maxine VM (最初由Sun Labs开发,现在是Oracle Labs)是一个真正的 metacircular VM,其中不仅所有内容都是用Java编写的,而且编译器中没有特殊的shell。 更重要的是:不仅Maxine VM是用Java编写的,它甚至可以自行运行! 这可能听起来很疯狂,坦率地说,我不知道它是如何工作的,但它基于Klein VM (由Sun Labs开发),它为Self编程语言做同样的事情。

这有一些非常有趣的属性:由于JVM本身是JVM解释的代码库的一部分,与用户代码所属的代码库相同,这意味着它可以进行优化,例如跨VM边界的内联。 IOW:它可以将VM代码内联到用户代码中,反之亦然。 这也意味着VM本身需要进行相同的运行时分析和动态优化 – 在其他VM(甚至包括Jikes)上 – 只有用户代码,这意味着VM本身不断被重新编译并重新优化为适应不断变化的负载,正在加载的新类,更改配置文件,更改使用模式等。

在像HotSpot,JRockit,J9等虚拟机上,这些优化是不可能的,原因很简单,JVM只知道如何优化JVML字节码,但VM不是用Java编写的。 但即使在Jikes中,这也是不可能的,因为虽然VM是用Java编写的,但它运行之前会被静态编译为本机代码,而VM本身的代码不是VM“看到”的代码的一部分。

Squawk VM也是由Sun Labs(现为Oracle Labs)开发的JVM。 与其目标受众大致类似于J9,HotSpot或JRockit的Maxine不同,Squawk更类似于KVM(最初由Sun开发,现在是Oracle),即针对资源受限的嵌入式设备。 Squawk的灵感来自Klein。 与Maxine不同,它有一个用C编写的小抽象层。但请记住,Maxine需要运行操作系统,而Squawk在没有操作系统的情况下运行。 所以,从某种意义上说,Squawk甚至比Maxine更纯粹,因为很多部分不是Maxine的一部分,而是操作系统的一部分(它们经常用C,C ++或其他低级语言实现),实际上是Squawk的一部分本身。 例如,设备驱动程序是用Java编写的。 只有一个小的硬件抽象层和I / O库用C语言编写。

Jikes RVM是一个用Java编写的JVM,用于研究并保持积极的开发。

JNode是一个用Java编写的JVM +操作系统,它运行一个裸x86 PC或虚拟机。 该项目的SVN最近一直处于非常活跃状态(大约是过去6个月),但我相信该项目的GIT镜像中有活动。