如何创建自定义JVM?

时间:2009-04-08 18:07:28

标签: java jvm

我正在阅读http://www.cafeaulait.org/javafaq.html上的第6.10项,我开始想知道大公司如何创建自己的JVM实现。对于一个人来说,某种或那种实验性的东西是否可行(并且可行)?

4 个答案:

答案 0 :(得分:12)

从技术上讲,人们创建新JVM所需的所有信息都在语言和目标平台的公共规范中。 JVM需要表现出不同的行为,这取决于它是在台式计算机还是手机上运行,​​即使字节码解释大致相同。

有几个地方开始寻找信息:

http://en.wikipedia.org/wiki/List_of_Java_virtual_machines
阅读Tim Lindholm的“Java虚拟机规范” http://www.jcp.org/en/jsr/detail?id=30

根据我所看到的Sun,IBM或像Esmertec这样的小公司的JVM实现,编写一个简单的JVM是一个人工月的项目,但是在JSR之后添加JSR以支持更多功能可能需要数年时间。

现在,如果您只需要一个简单的字节码解释器,它就不那么糟糕了,但它仍然需要编写很多代码。

答案 1 :(得分:6)

手工制作的JVM一般是学习虚拟机的好方法,程序语言设计的问题(通过JVM规范),以及解析的细节等等。

如果你选择在那个方向上进行,你也可以探索优化,这是它可以变得有趣的地方,你可以拿研究论文并实现他们的算法。

话虽如此,如果您对从头开始创建VM的漫长而艰巨的任务不太感兴趣,您可能希望修改现有的开源虚拟机,如Kaffe。它将向您展示虚拟机的功能,但不一定是Sun的JVM中Java代码的工作方式:

  

Kaffe是Java虚拟机的洁净室实现,以及提供Java运行时环境所需的关联类库。

通过这种方式,您可以研究细节,但可以深入实施更多有趣的功能。

答案 2 :(得分:4)

据我所知,目前,大型玩家从Sun获得了Java库的许可。然后他们添加自己的改进。实现之间的主要区别是字节码 - >机器码编译器。

答案 3 :(得分:3)

首先,你可能想看看Apache Harmony他们已经走了很长的路,所以他们的项目历史实际上可以让你对所需的努力有个好主意。我本人不会打赌这对一个人来说是可行的