大家好, 假设我想制作一个只使用程序集和java的系统,我的问题就是,只要我包含了所有的jvm文件夹,类,jar等等.java应该仍然有效地运行吗? 我知道有些东西是专门编译的平台,但这就是为什么我要问,是否有可能使用程序集复制所有的.exe或java包含在纯程序集/ java系统中的其他可执行文件?< / p>
答案 0 :(得分:4)
如果您在询问是否可以使用“裸机”运行的Java和汇编语言构建系统,答案是肯定的。目前有几个例子:
请注意,构建此类系统是一个多年,多人的项目,需要深入了解虚拟机内部,编译器,垃圾收集器,硬件架构,设备驱动程序编写等。
如果您正在询问其他问题,请更明确。
编辑:回应OP的后续问题:
答案 1 :(得分:1)
如果我正确理解您的问题,您的意思是JavaOS。当然,它可以在硬件上实现JVM raw,不知道为什么你会这样做。如果你这样做了,为什么你不会在大多数工作中使用C代替汇编。
答案 2 :(得分:1)
理论上可以用其他语言实现jvm。我能想到的最好的例子是Python / Jpython,其中有原始的C实现和该语言的纯Java实现。
反对这一点的主要论点是 - 它的大量工作没有太大的好处。
官方Sun jvm和支持jni库主要是用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。他们多年来一直致力于此。