Java虚拟机有哪些好的开源实现?

6

我正在尝试编写自己的JVM。您能指向一些现有的开源实现吗? 谢谢。

6个回答

10

请查看备选Java实现链接页面Kaffe VM,以下是其中的一部分内容(请查看原网站获取链接):

基于Kaffe的JVM

  • Latte

    基于Kaffe的开源JVM。

  • JanosVM

    多进程JVM的当前犹他工作。

  • KaffeOS

    KaffeOS是一种Java虚拟机,允许在Kaffe内执行多个进程。它分离了这些进程消耗的资源,允许安全地终止它们,并提供直接共享。

    Patrick Tullman说:

    (Kaffe核心团队成员Godmar Back的博士论文)源代码还不可用,但我认为这只是因为Godmar在完成论文后正在解压缩。

  • JESSICA项目

    项目JESSICA(Java Enabled Single-System-Image Computing Architecture)和新的JESSICA2项目都基于Kaffe,创建了一个分布式JVM,用于在PC集群上运行多线程Java应用程序。

  • Gilgul

    • Gilgul是Java的兼容扩展。*它引入了对对象标识概念的新视角。*它允许通过同时重新路由一组引用作为原子操作来进行动态对象替换。*因此,它提供了意外软件演化的手段
  • Alta

    Alta虚拟机是一个Java兼容的虚拟机,旨在为Java应用程序提供嵌套进程服务。 Alta基于Kaffe。

  • Guaraná

    Guaraná是一种反射架构,旨在实现简单性,灵活性,安全性和元级代码的重用。它使用Kaffe作为其基础。 Guaraná可在GPL下下载。

  • kangaroo

    kangaroo是一个类似于J2ME / CLDC的虚拟机。

自由软件JVM

  • Java语言的Red Hat Sourceware项目(gcj)。

    Red Hat(收购了Cygnus)正在开发一个完整的免费软件工具包,用于开发Java语言。 gcj是egcs项目的一部分,提供Java前端和一组运行时库给egcs。还包括gij解释器。

  • jRate

    GNU GCJ编译器前端和运行时系统的扩展,增加了对Java实时规范(RTSJ)所需功能的支持。

  • ORP(Open Runtime Platform)

    来自英特尔。

  • Jikes研究虚拟机(RVM)

    一个自由,自托管的虚拟机(用Java编写!)

  • JC

    在运行它之前将Java字节码转换为C的Java虚拟机。 (来自Kaffe项目校友Archie Cobbs)

  • Japhar

    Japhar是Hungry Programmers的Java VM。 它是从零开始构建的,没有咨询Sun的源代码。 Japhar是LGPLed并可供下载。

  • ElectricalFire

    ElectricalFire是一个开源项目,来自Netscape取消的商业项目,并在Mozilla伞下得到赞助。

    ElectricalFire是一种Java虚拟机,使用JIT(Just In Time)编译技术加速Java代码执行。 ElectricalFire

    这两个列表都不是最新的,缺少像OpenJDKApache Harmony这样的倡议。

    话虽如此,我不知道你所说的“好的开源实现”具体是什么意思。对于每个人来说,“好”的含义可能不一样,也可能取决于上下文。Kaffe是作为虚拟机教育和/或研究的基础的绝佳选择,IBM的Jikes编译器非常快,OpenJDK可能非常成熟,但可能不是教育目的的最佳选择,等等。它们都是好的实现,但我不知道哪一个对你来说更“好”。实际上,我让你自己决定。


6

1
实际上,OpenJDK中VM的名称是“Hotspot”。 - P Shved
JamVM可能是最小和最易访问的。 - Thorbjørn Ravn Andersen

3

我认为,OpenJDK源代码并不是学习编写虚拟机的好起点。它太庞大且过于特定于平台。有一些替代方案可供选择,例如:

  1. 据说Parrot VM能够运行Java Bytecode。Parrot VM已经是基于寄存器的。
  2. Projekt shark(OpenJDK中的项目零)是OpenJDK的便携式“分支”,没有汇编程序源代码。据我所知,它使用了LLVM。在http://gbenson.net/上有关于如何构建和调试它的信息。
  3. LLVM项目具有不完整的JAVA前端。
  4. Sun正在用JAVA本身重写JVM。它被称为Maxine,被视为研究对象。请参见http://wikis.sun.com/display/MaxineVM/Home获取更多信息。

这里有一篇关于替代JVM实现的维基百科条目,其中一些已经在这里提到,而另一些则没有。


+1 对于 Maxine 的链接。很有趣。 - serg10

2

0
一定要使用rq提供的资源,但如果你要编写JVM,请考虑使用基于寄存器的实现。正如论文所描述的那样,基于寄存器的机器确实会增加指令膨胀,但应该会更快。由于似乎没有基于寄存器的JVM实现,因此自己从头编写一个将是一个额外的奖励。

0
如果你喜欢一些更加异域风情和高级的东西,IKVM 是一个基于mono/.NET CLR构建的开源JVM。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接