Java的实现...... JVM?

msc*_*ker 12 java jvm

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

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

"完全",我的意思是,不仅要仿效移动设备.

Jör*_*tag 30

JIKES研究虚拟机可能是最显眼的JVM实现用Java编写的.但是,它的最低级实现只包含对"魔术"接口的静态方法调用,该接口由编译器专门处理并转换为本机代码.

玛克辛VM(由Sun实验室,现在是Oracle实验室最初开发)是一个真正的 metacircular VM,其中不仅一切都用Java编写的,但也没有特别的套管在编译器回事.更重要的是:不仅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"看到"的代码的一部分.

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


wkl*_*wkl 6

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