代码之家  ›  专栏  ›  技术社区  ›  ianmac45

如何创建自定义JVM?[关闭]

  •  16
  • ianmac45  · 技术社区  · 16 年前

    我在看第6.10条 http://www.cafeaulait.org/javafaq.html 我开始想,大公司是如何创建自己的JVM实现的。对于一个人来说,一个或另一个实验性的东西是可能的(也是可行的)吗?

    4 回复  |  直到 7 年前
        1
  •  12
  •   michael aubert    10 年前

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

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

        2
  •  5
  •   Charles Wood    11 年前

    手工的JVM是学习虚拟机的一个很好的方法,一般来说,它是程序语言设计的问题(通过JVM规范),以及解析的本质等等。

    如果你选择向这个方向发展,你也可以探索优化,在优化中它会变得有趣,你可以拿研究论文和实现它们的算法。

    也就是说,如果您对从头创建虚拟机这项漫长而艰巨的任务不太感兴趣,那么您可能希望修改现有的开源虚拟机,比如 Kaffe . 它将向您展示虚拟机所做的工作,但不一定是Java代码在Sun的JVM中工作的方式:

    KAFE是Java虚拟机的洁净室实现,再加上提供Java运行时环境所需的相关类库。

    通过这种方式,您可以研究细节,但是深入到实现更有趣的特性。

        3
  •  4
  •   Tom Hawtin - tackline    16 年前

    我知道,目前,大玩家从Sun授权Java库。然后他们添加自己的改进。实现之间的主要区别在于字节码->机器代码编译器。

        4
  •  3
  •   Vincent De Baere    16 年前

    首先,你可能想看看 Apache Harmony 他们已经走了很长的路,所以他们的项目历史实际上可能会给你一个关于所需工作的好主意。我自己也不敢打赌这对一个人来说是可行的。