如何创建自定义JVM?

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

从技术上讲,人们创建新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以支持更多function可能需要数年时间。

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

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

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

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

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

这样,您可以研究细节,但可以深入实现更多有趣的function。

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

首先,您可能希望了解Apache Harmony他们已经走了很长的路,因此他们的项目历史可能会让您对所需的工作有所了解。 我自己也不会打赌这对一个人来说是可行的