Java实现的JVM?

mo49yndu  于 2022-11-07  发布在  Java
关注(0)|答案(4)|浏览(194)

前段时间我发现了MJVM项目,可悲的是,这个项目已经被it作者放弃了(我通过电子邮件问Igor)。
我想知道是否有一个(续)开源项目,像这样用Java完全实现JVM。
我所说的“完全”,不仅仅是模拟移动的设备。

6uxekuva

6uxekuva1#

Jikes RVM可能是用Java编写的最著名的JVM实现。然而,它的最低层实现只是由对“魔术”接口的静态方法调用组成,该接口由编译器进行特殊处理并转换为本机代码。
Maxine VM(最初由Sun实验室开发,现在由Oracle实验室开发)是一个 * 真实的的 * 元循环VM,其中不仅所有内容都是用Java编写的,而且编译器中也没有特殊情况。Maxine VM不仅是用Java编写的,它甚至 * 在自己 * 中运行!这听起来可能很疯狂,坦率地说,我不知道它是如何工作的,但它是基于Klein VM(由Sun实验室开发)的,Klein VM对Self编程语言做了同样的事情。
这有一些非常有趣的特性:因为JVM本身是JVM解释的代码库的一部分,用户代码属于同一个代码库,这意味着它可以进行优化,例如跨VM边界内联。它可以将VM代码内嵌到用户代码中,反之亦然。这也意味着VM本身要进行相同的运行时分析和动态优化--在其他VM上(甚至包括Jikes)--只有用户代码是这样的,这意味着VM本身要不断地进行重新编译和重新优化,以适应不断变化的负载、加载的新类、不断变化的配置文件、不断变化的使用模式等等。
在HotSpot、JRockit、J 9和其他虚拟机上,这些优化是不可能的,原因很简单,JVM只知道如何优化JVML字节码,但虚拟机不是用Java编写的。但即使在Jikes中,这也是不可能的,因为虽然虚拟机是用Java编写的,但它在运行 * 之前 * 被静态编译为本机代码。并且VM本身的代码不是VM“看到”的代码的一部分。
Squawk VM也是由Sun实验室(现在的Oracle实验室)开发的JVM。(最初由Sun开发,现在由Oracle开发),即针对资源受限的嵌入式设备。Squawk的灵感也来自Klein。与Maxine不同,它有一个用C语言编写的小抽象层。但请记住,Maxine需要操作系统才能运行,而Squawk无需操作系统即可运行。因此,从某种意义上说,Squawk甚至比Maxine更纯粹,因为许多部分不是Maxine的一部分,而是操作系统的一部分(通常用C、C++或其他低级语言实现),实际上是Squawk本身的一部分。例如,设备驱动程序是用Java编写的。只有一小部分硬件抽象层和I/O库是用C编写的。

k3bvogb1

k3bvogb12#

Jikes RVM是一个用Java编写的JVM,用于研究并保持在活跃的开发中。

yfjy0ee7

yfjy0ee73#

JNode是一个用Java编写的JVM +操作系统,可以在一台x86 PC或虚拟机上运行。该项目的SVN最近相当不活跃(大约在过去6个月),但我相信该项目的GIT镜像中有活动。

c3frrgcw

c3frrgcw4#

下面是一个有趣的Java JVM实现:
https://gitlab.com/neoexpert/jvm
它能够运行简单的Java程序和一些高级程序。它也应该能够自己运行。它还有一个子项目,其中包含了JVM的JavaScript实现,可以在浏览器中运行。它非常快。您可以使用以下命令运行JS实现:

mvn clean install
cd jsjvm
./run.sh

JavaScript实现确实有一个简单的JDK,其中包含一些DOM操作和WebGL绑定的类。我计划在JDWP(Java调试器有线协议)上实现它。如果完成了,你将能够连接调试器(例如从IntelliJ)并调试在浏览器中运行的Java代码。

相关问题