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语言编写.