使用Java和汇编语言构建一个运行在“裸机”上的系统

时间:2009-08-20 03:46:47

标签: java assembly

大家好,      假设我想制作一个只使用程序集和java的系统,我的问题就是,只要我包含了所有的jvm文件夹,类,jar等等.java应该仍然有效地运行吗?      我知道有些东西是专门编译的平台,但这就是为什么我要问,是否有可能使用程序集复制所有的.exe或java包含在纯程序集/ java系统中的其他可执行文件?< / p>

5 个答案:

答案 0 :(得分:4)

如果您在询问是否可以使用“裸机”运行的Java和汇编语言构建系统,答案是肯定的。目前有几个例子:

  • JavaOS主要针对嵌入式系统域。 (如今,Sun认为SunOS是一个“传统”产品线。)
  • JNode目标更广泛,包括嵌入式系统,桌面系统,服务器和云计算。

请注意,构建此类系统是一个多年,多人的项目,需要深入了解虚拟机内部,编译器,垃圾收集器,硬件架构,设备驱动程序编写等。

如果您正在询问其他问题,请更明确。

编辑:回应OP的后续问题:

  1. 本身使用Java和其他“exe”文件是不切实际的。他们需要一个完全成熟的操作系统;例如Windows,Linux等等。如果您可以访问源代码,可以想象可以根据需要重写以使它们在“裸机”上运行,但这需要进行重大的体系结构更改,尤其是如果您想在Java中编写设备驱动程序等。 (此外,Sun的JRE的核心是用C ++实现的......)。
  2. 您不能直接使用现有的Java类库JAR文件,因为它们包含大量特定于平台的代码。但是,您可以从现有的Java类库的开源版本(例如OpenJDK 6.0 J2SE库)构建自己的Java类库JAR。您可以通过将自己的版本作为本机库或(如JNode所提供)作为Java类来处理特定于平台的代码。

答案 1 :(得分:1)

如果我正确理解您的问题,您的意思是JavaOS。当然,它可以在硬件上实现JVM raw,不知道为什么你会这样做。如果你这样做了,为什么你不会在大多数工作中使用C代替汇编。

答案 2 :(得分:1)

理论上可以用其他语言实现jvm。我能想到的最好的例子是Python / Jpython,其中有原始的C实现和该语言的纯Java实现。

反对这一点的主要论点是 - 它的大量工作没有太大的好处。

官方Sun jvm和支持j​​ni库主要是用C语言编写的,至少需要为大多数C POSIX API提供本机汇编程序实现。

C的原始设计目标也是“便携式汇编语言”,并且在很大程度上它仍然符合这些目标。 C生成高效的机器代码,大多数C编译器都会让代码机器指令与C代码内联。

C的另一个好处是可用的交叉编译器的数量,您不需要在目标架构上运行开发环境,您可以在您喜欢的paltform / IDE上进行开发和单元测试,当您准备好后,您可以导出您的目标平台的可执行文件。

答案 3 :(得分:1)

Jikes RVM和Sun的Maxine提供了一个JVM实现,只有少量(1 kloc)本机代码。但是,两个VM都需要操作系统,并且只是研究实施。创建形成机器代码的八位字节流的过程显然可以在Java中实现。

答案 4 :(得分:1)

看看JNode。他们多年来一直致力于此。

http://www.jnode.org/

相关问题